簡體   English   中英

陣列路徑組合

[英]Array Path Combinations

我不確定如何給我的問題加上標題,所以我不確定這是以前沒有回答過的問題。 也就是說,以下是對我的編程問題的描述。

我有一個R類,其中包含2個整數元素,例如X和Y。然后我有兩個名為A和B的24個元素數組,其中每個元素都包含R類的實例。我想遍歷這些數組以確定如何使用RY如下填充第三個數組C:

如果A的索引i的RY大於B的索引i的RY,則將R從A放入C的索引i。

如果B的索引i處的RY大於A的索引i處的RY,則將B中的R放入C的索引i中。

如果A的索引i處的RY等於B的索引i處的RY,則將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次數的冪),因此,如果我在RY相等的A和B中有4個索引,那么將有16個組合,其中5個索引= 32個組合,6 = 64,依此類推。

問題是我永遠不會知道對於所有索引來說,A和B中RY相同的次數是多少? 它可以是0到24。因此,為了簡短起見,我需要一種算法,用A和B中所有可能的R類(其中RY在兩個數組中均相等)填充C,然后遍歷C的所有可能組合並停止當C的第一個實例通過CRC檢查時。

聽起來簡單嗎? 希望如此。 讓我知道您是否需要進一步說明,或將我指向具有類似於已經回答的問題的線程。 TIA

我認為您在自己的問題中接近答案。 創建一個列出所有必須嘗試A或B的索引的數組。在示例中,L = {7,15,19}。 n = 3。 然后,您將從0循環到2 ^ n-1(含)。 在循環的每次迭代中,您將測試b = 0,bit 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM