簡體   English   中英

有效地查找一組數字中的組合

[英]Finding combinations in a set of numbers efficiently

我目前正在開發一個 java 項目,我需要其中的一部分來給我一個滿足的數字組合列表
1<= A<=B<=C<=D<=E<=F<=N其中N是任何as small as 75整數,將作為輸入。 ABCDEF可以是any integer ,只要它fulfills the equality

我知道我可以簡單地使用brute force來完成每個組合,但這需要很長時間。 我想要嘗試做的是以仍然滿足原始要求的方式將等式splittwo separate的等式,但它會將運行時間減少近一半。

假設您需要滿足指定條件的A, B, C, D, E, F的所有可能組合的列表,那么您將無法獲得比執行蠻力回溯搜索更高效的方法。

對於A每個可接受的值:找到B所有可接受的值,然后對於每個可接受的值,找到C ...,依此類推。

您將獲得等效的運行時間:

  • 分而治之
  • 動態規划
  • 貪婪(只會減少回溯)

(但這些算法不適合這個問題,需要人為的實現)

以下將僅生成有效的有效組合。 對於較大的 N 值,可能需要一段時間,但這是因為將有大量組合滿足您的不等式。

N = 75; 300500200組合

N = 100; 1609344100組合

    for(int A = 1; A <= N ; ++A) {
        for(int B = A; B <= N; ++B) {
            for(int C = B; C <= N; ++C) {
                for(int D = C; D <= N; ++D) {
                    for(int E = D; E <= N; ++E) {
                        for(int F = E; F <=N; ++F) {
                            // do whatever you want with the combo
                        }
                    }
                }
            }
        }
    }

暫無
暫無

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

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