编程理论:改组2D阵列

时间:2012-09-11 00:44:18

标签: arrays complexity-theory theory shuffle computation-theory

我和一位朋友正在考虑一个有趣的计算机科学问题。


你有一个简单的二维数组

[  1,  2,  3,  4 ]
[  5,  6,  7,  8 ]
[  9, 10, 11, 12 ]
[ 13, 14, 15, 16 ]

现在拿这个数组并洗牌数组中的所有元素

[ 11,  5, 14, 10 ]
[  8,  2,  4, 16 ]
[ 15,  1,  3, 13 ]
[  6, 12,  9,  7 ]

一开始是一个相当简单的概念。但是,如果我们再强调一步怎么办?现在,随机播放原始数组,以便新数组的 no 元素位于与原始数组中相邻的项目旁边主要方向。

我们的第一次洗牌失败,因为1在2的旁边,并且在原始数组中也是2的旁边。

以下是正常工作示例:

[  7, 16, 13,  2 ]
[ 14,  3,  5,  8 ]
[  9,  1,  4, 11 ]
[ 12, 10, 15,  6 ]

仍然不坏。现在来到真正的问题!

再次对原始数组进行随机播放,使得数组的 no 元素位于它们在基本方向或通过对角线<\ n>相邻的元素旁边

我们的工作示例失败,因为1在对角线旁边是5,在原始数组中紧挨着5。

一些想法:

  1. 甚至可以确定阵列吗?
  2. 是否取决于阵列的大小?
  3. 阵列是否需要对称?
  4. 阵列是否需要偶数/奇数量的元素?
  5. N 的所有 M 数组的解决方案是否适用?
  6. 如果存在解决方案,那么找到新阵列的运行时间是多少?
  7. 您怎么看?

    修改

    我很惊讶地发现我的问题被关闭为“偏离主题”。根据{{​​3}},如果我的问题“......通常涵盖一个特定的编程问题......”那么就可以被问到并且不是“偏离主题”。

    我问的底线问题是:

      

    “你可以拿一个二维数组并将其洗牌,这样就不会有新成员在新阵列中彼此相邻,包括对角线”。

    这不是一个好的编程问题吗?我强烈地认为我的问题不应该被关闭。

1 个答案:

答案 0 :(得分:1)

1.Can an array even be determined?
  • 当然,你可以使用转换Rn - &gt; RN通过转置到边缘。
  

2.它取决于阵列的大小吗?

  • 你不能为MxM&lt; = 3做,所以是。
  

3.阵列是否需要对称?

  • 取决于*
  

阵列是否需要偶数/奇数量的元素?

  • 取决于*
  

5.对于所有大小为M的阵列,N是否存在解决方案?

  • 取决于*
  

6.如果存在解决方案,找到新阵列的运行时间是什么?

运行时间可以O(N^2)使用简单的转换(尽管考虑为O(1))。

  • 这取决于将重复项视为解决方案的一部分(a bag)或不是(set)。

现在算法本身。虽然这看起来像一个很好的大脑锻炼方式,但听起来更像是一个家庭作业,所以为什么不尝试一些东西并要求具体细节。