V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
DIO
V2EX  ›  程序员

有一个算法问题,求大佬们给个思路

  •  
  •   DIO · 2022-11-15 22:16:58 +08:00 · 1722 次点击
    这是一个创建于 767 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有描述不清楚的地方还请大佬们积极提出,我会积极回答。

    现有一个 5*5 矩阵 Mat
    [ a11 ,a12 , a13 , a14 , a15;
    a21 ,a22 , a23 , a24 , a25;
    a31 ,a32 , a33 , a34 , a35;
    a41 ,a42 , a43 , a44 , a45;
    a51 ,a52 , a53 , a54 , a55 ]

    求一个矩阵 matR ,将 mat 再排列。
    要求原矩阵 mat 中的相邻元素(横竖左右撇捺)在新生成 matR 中不相邻

    对每个元素 aij 设定积分 point(ij). aij 在新矩阵 matR 中距离原相邻元素距离之和为 point(ij)
    例如:aij 在原矩阵 Mat 的相邻元素{a(i-1)j,a(i-1)(j-1),......... } 在新矩阵 matR 中距离这些元素的直线距离单元格数为{1 ,1 ,1 ,1 ,1 ,1 ,1 ,1} 合计为 point(ij)=8

    要求在生成的 matR 中 Σpoint(ij) 最大化

    发在隔壁节点没反应,所以在这重发一次

    第 1 条附言  ·  2022-11-16 12:58:14 +08:00
    3L 概括得很好

    “意思是把 5x5 矩阵打散,原来相邻的元素不相邻(硬性),现在距离越远越好”




    这里我简单粗略做了一个 point 计算办法,还有不清楚的地方欢迎提出。欢迎大佬们提出想法,集思广益。

    这里是源文件地址: https://wwd.lanzout.com/i9oko0g10eda 密码:b52e

    9 条回复    2022-11-16 13:03:05 +08:00
    liplushe
        1
    liplushe  
       2022-11-15 23:03:02 +08:00
    你这问题描述怎么稀里糊涂的
    qq007523
        2
    qq007523  
       2022-11-15 23:23:11 +08:00
    没看懂...
    Tanix2
        3
    Tanix2  
       2022-11-15 23:28:59 +08:00
    意思是把 5x5 矩阵打散,原来相邻的元素现在距离越远越好,你这个距离我没看明白,能否再解释以下
    iOCZ
        4
    iOCZ  
       2022-11-15 23:29:06 +08:00
    真是费解,应该搞一些符号
    DIO
        5
    DIO  
    OP
       2022-11-16 00:35:36 +08:00 via Android
    @qq007523 是的,你理解的意思是对的。这个距离是我试图把这个意思量化的一个标准,不过似乎弄巧成拙了。明天画几个图再明确一下含义。比如说在新矩阵中,得出原相邻元素的坐标,计算他们横向和纵向坐标差的绝对值,两个维度求和。

    我目前咨询了一些人,有一些局部最优解的方案,比如假设有一个目标矩阵,它恰好是对称的,那么对角线应当还是 i==j.那么根据规则计算对角线的情况。然后再填充上三角,根据这个推出下三角。今天晚上验证了一下,明天再具体研究一下。
    Tanix2
        6
    Tanix2  
       2022-11-16 00:37:40 +08:00
    首先原来相邻的现在都不相邻的矩阵是存在的
    a44 a52 a34 a54 a42
    a25 a11 a13 a15 a21
    a23 a31 a33 a35 a43
    a45 a51 a53 a55 a41
    a24 a12 a32 a14 a22
    然后我就不会了
    whitepuppy
        7
    whitepuppy  
       2022-11-16 11:38:36 +08:00
    感觉可以对行操作?把每行 2 ,4 位数调换下位置,这保证了横着的不相邻,然后 1 ,2 ,3 ,4 ,5 行变为 4 ,1 ,3 ,5 ,2 ,每一行都不和之前的相邻行相邻,保证了所有的竖着的和斜着的都不相邻。
    whitepuppy
        8
    whitepuppy  
       2022-11-16 11:41:43 +08:00
    @whitepuppy 第一步有点问题,2 ,4 调换还是改成后面那种对应
    DIO
        9
    DIO  
    OP
       2022-11-16 13:03:05 +08:00
    意思是通过把不相邻排列行列分别转化一次吗,这样好像确实可行。

    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2427 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 15:42 · PVG 23:42 · LAX 07:42 · JFK 10:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.