我需要帮助来构建以下编程逻辑

时间:2013-06-08 14:15:47

标签: algorithm

我有一个数组 -

$hubnode[1]=array(1,2,3,5,10,11,12,13,15,16,17);
$hubnode[2]=array(1,2,3,5,10,11,12,13,15,16,17);
$hubnode[3]=array(2,10,11,15);
$hubnode[4]=array(1,2,3,5,10,11,12,13,15,16,17);
$hubnode[5]=array(1,2,3,5,8,9,10,11,12,13,15,16,17);
$hubnode[6]=array(2,10,11,13,15);
$hubnode[7]=array(1,2,3,5,8,9,10,11,12,13,15,16,17);
$hubnode[8]=array(1,2,3,5,8,9,10,11,12,13,15,16,17);

我需要通过从每一行取一位数来制作每个可能的8个成员组 在一个组中,所有8位数字都是唯一的。

在计数期间,任何群组都不能重复。例如,有效群组是: -

$组[1] = 1,2,10,3,4,11,5,8;

$组[2] = 1,3,10,2,4,11,9,8;

........................等

1 个答案:

答案 0 :(得分:0)

让我们尝试一些动态编程!

1)如果你只有一组怎么办?那会很容易,对吧?简单的N种可能性,其中N是组的大小。例如:

$hubnode[1]=array(1,2,3);
group[1] = 1
group[2] = 2
group[3] = 3

2)现在如果我们添加另一组呢?让我们说:

$ hubnode [2] =阵列(3,4);

你得到:

group[1] = 1,3
group[2] = 1,4
group[3] = 2,3
group[4] = 2,4
group[5] = 3,4

这向我们展示了什么?基本上,在为N个集线器计算组时,我们可以将N-1集线器的组取出,如果它不在该组中,则每个集合都添加来自集线器N的元素。

我的意思是:

  • 对于N = 1,您有一个组“group [1] = 1”,现在您逐个从hub2获取所有元素并尝试将它们应用于该组,每次创建一个新元素。在这种情况下,这会创建组{1,3}和{1,4}。在组[3]的情况下,它只创建组{3,4},因为{3,3}不满足我们关于唯一元素的条件。

3)如果我们不能在N点将任何号码从集线器应用到组中怎么办?好吧,我们抛弃那个群体。例如,当你有{1,3}然后{1}时,你首先获得2组1和3,但你不能对第一组做任何事情,所以弃掉它。

现在的问题是如何有效地检查X是否在组[Y]中。这是一个很好的问题,因为除非我们还为来自哪个组的每个值添加标签,否则我们无法对这些组进行排序(因为顺序很重要)。然后使用二进制搜索,我们可以检查给定的数字是否在组中。

4)作为一种性能提升(如果你需要它),你可以处理从最小到最大的数组,因为最小的数组将给你最大的可能解决方案的限制。

最糟糕的情况是,我们可以简单地线性检查每个组......

复杂性将是巨大的,但在最糟糕的情况下,你会有很多可能性,所以不要认为你可以做那么多...最糟糕的情况你会有8组 n 不同的数字,这意味着n ^ 8,哇!

P.S。正如Ondrej在评论部分所说的那样,你应该尝试自己想出一些东西 - 我回答的只是因为我正在练习面试;)