有一组例如(1,4,2,5,7,6,9,8,3)。我们通过以下方式计算其first difference
(FD):firstDifference[i] = inputArray[i+1] - inputArray[i]
。 inputArray是原始集。在示例中,情况是(1,4,2,5,7,6,9,8,3)。 firstDifference是通过以下方式从inputArray创建的:(inputArray的第二个元素) - (inputArray的第一个元素)依此类推。
因此给定集合的FD是(3,-2,3,2,-1,3,-1,-5)。任务是找到给定集合的多个排列,其中第一个差异是FD的排列。在示例情况下,我们应该找到(1,4,2,5,7,6,9,8,3)的这种排列,即第一个差异是(3,-2,3,2,-1,3, - 的排列)。 1,-5)。
这是我的算法:
但是这个算法太慢了。你能帮助创建更快的算法吗?可能我做了一些可以消除的步骤?
答案 0 :(得分:3)
答案 1 :(得分:0)
这是一个很大的问题...如果我理解你,你需要找到原始集的所有排列,以保持原始FD集的排列。
您的算法将起作用,除非您通过查看原始集的所有排列然后查看这些FD的所有排列来计算大量不必要的排列。如果您首先查看原始FD的所有可能排列,您应该能够消除原始集合的一堆排列。
换句话说:
例如:
设置{1,2,3,5} FD {1,1,2}
在计算此示例时,当您进入步骤3时,您应该能够自动消除以1,5开头的任何排列,因为4的差异永远不会出现在原始FD的任何排列中。它只会在这个特定的例子中保存一些计算,但是一旦你开始使用更大的集合,这个算法就有可能为你节省大量的时间。