【问题标题】:Array Path Combinations阵列路径组合
【发布时间】:2011-02-28 23:18:19
【问题描述】:

我不确定如何为我的问题命名,所以我不能确定这个问题之前没有得到回答。也就是说,以下是对我的编程问题的描述。

我有一个包含 2 个整数元素的类 R,比如 X 和 Y。然后我有两个名为 A 和 B 的 24 元素数组,其中每个元素都包含一个类 R 的实例。我想遍历数组以确定如何使用 RY 填充第三个数组 C,如下所示:

如果 A 的索引 i 处的 R.Y 大于 B 的索引 i 处的 R.Y,则将 A 中的 R 放入 C 的索引 i 中。

如果 B 的索引 i 处的 R.Y 大于 A 的索引 i 处的 R.Y,则将 B 中的 R 放入 C 的索引 i。

如果 A 的索引 i 处的 R.Y 等于 B 的索引 i 处的 R.Y,则将任一 R 放入 C 的索引 i。

让我感到困惑的是这些条件中的第三个。例如,如果数组 A 和 B 的索引 7、15 和 19 的 RY 彼此相等,那么我想在 C 中的这些索引处尝试 A 和 B 的每个元素,以确定基于 CRC 需要哪个元素检查C。所以我可以将以下R值放入C的相同索引值中:

A[7]、A[15]、A[19]

A[7]、A[15]、B[19]

A[7]、B[15]、A[19]

A[7]、B[15]、B[19]

B[7]、A[15]、A[19]

B[7]、A[15]、B[19]

B[7]、B[15]、A[19]

B[7]、B[15]、B[19]

这 8 种组合来自 2^3(2 个数组的 RY 次幂相同的次数),所以如果我在 A 和 B 中有 4 个索引,其中 RY 相等,那么将有 16 种组合, 5 个索引 = 32 个组合,6 = 64,等等。

问题是我永远不知道 R.Y 在 A 和 B 中对于所有索引有多少次相同;它可能是 0 到 24。所以为了简短的描述,我需要一个算法来填充 C 与来自 A 和 B 的所有可能的 R 类,其中 RY 在两个数组中是相等的,遍历 C 的所有可能组合并停止当 C 的第一个实例通过 CRC 校验时。

听起来很简单?但愿如此。如果您需要任何进一步的说明,请告诉我,或者将我指向一个与已经回答的类似内容的线程。 TIA

【问题讨论】:

    标签: .net c++ arrays combinations


    【解决方案1】:

    我认为您在自己的问题中已经接近答案了。制作一个数组,列出您必须尝试 A 或 B 的所有索引。示例中的 L={7,15,19}。 n=3。然后你将从 0 循环到 2^n-1 (包括)。在循环的每次迭代中,您将测试每个位 b=0、位 1、... 一直到位 n-1。 L[b] 告诉你需要设置哪个索引,根据该位是否清零,将其设置为对应的 A 或 B 值。

    最坏的情况是你必须执行 2^24 组合,每个组合都有 24 位测试。您确定要全部尝试吗?

    伪代码:

    start with empty L;
    for(i=0 to 23) put A[i] or B[i] in C[i] (whichever has larger Y) *or* add i to L (if A.y and B.y match)
    let n=length of L;
    for (x=0 to (1<<n)-1)
       for(b=0 to n-1)
           test x&(1<<b), if clear put A[L[b]] in C[L[b]], or put B[L[b]] in C[L[b]]
       endloop
       test this array C
    endloop
    

    【讨论】:

    • 我需要检查的不是位,而是 R.Y 的 int 值,以确定我正在使用的所有可能组合的 A 或 B 中的 R 类需要进入 C。我一直在考虑一组索引,但不确定循环迭代公式。我会试试你的建议,让你知道我想出了什么。很少有超过 6 个索引要检查,但我仍然需要检查所有可能性。谢谢。
    • 我在答案中添加了一些伪代码,希望它更清楚一点。
    • 这确实成功了。使用伪代码,很容易实现和理解。很高兴这里有知道他们在做什么的人!再次感谢。 :)
    猜你喜欢
    • 2021-02-10
    • 1970-01-01
    • 1970-01-01
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    • 2013-11-18
    • 1970-01-01
    相关资源
    最近更新 更多