[英]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
來完成每個組合,但這需要很長時間。 我想要嘗試做的是以仍然滿足原始要求的方式將等式split
為two 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.