以前、JavaScriptで作った組合せ生成プログラムをちょっと書き直してみました。(^_^;
今回のは同じものを含んでいても使えます。
●GenComb02.html
<html> <head> <title>GenComb02.html</title> <script type="text/javascript"> // 順列生成 function next_perm(p, n, r) { var i, j, k, tmp; if(r <= 0 || n < r) return(false); for(i = r + 1; i <= n-1; i++) for(j = i; j >= r + 1 && p[j-1] < p[j]; j--) tmp = p[j], p[j] = p[j-1], p[j-1] = tmp; for(i = n - 1; i > 0 && p[i-1] >= p[i]; i--); if(!i) return(false); for(j = n - 1; j > i && p[i-1] >= p[j]; j--); tmp = p[i-1], p[i-1] = p[j], p[j] = tmp; for(j = n - 1; i < j; i++, j--) tmp = p[i], p[i] = p[j], p[j] = tmp; return(true); } function isAscending(p, m) { for(var i=0; i< m-1; i++) if(p[i]> p[i+1]) return(false); return(true); } // 組合せ生成 function next_comb(p, n, r) { do{ if(!next_perm(p,n,r)) return(false); } while(!isAscending(p,r)); return(true); } </script> </head> <body> <script type="text/javascript"> var cnt=0 var N=5; var R=3; var P=["A","B","C","D","E","F","G","H","I","J"]; var p =new Array(N); p=P.slice(0,N).sort(); var tm=(new Date()).getTime(); // Timer start do{ document.write(++cnt,":",p.slice(0,R),"<br>"); }while(next_comb(p,N,R)); tm=(new Date()).getTime()-tm; // Timer stop document.write("Runtime : ",tm/1000.0, "[sec]<br>"); </script> </body> </html>
●実行結果
1:A,B,C 2:A,B,D 3:A,B,E 4:A,C,D 5:A,C,E 6:A,D,E 7:B,C,D 8:B,C,E 9:B,D,E 10:C,D,E Runtime : 0[sec]
※参考URL
●同じものを含む組合せの質問をJavaで解いてみた。
●組合せ生成プログラム JavaScript - rscの日記
●組合せ生成プログラム JavaScript (3) - rscの日記
- 作者: David Flanagan,村上列
- 出版社/メーカー: オライリージャパン
- 発売日: 2012/08/10
- メディア: 大型本
- 購入: 12人 クリック: 252回
- この商品を含むブログ (18件) を見る
- 作者: David Flanagan,木下哲也
- 出版社/メーカー: オライリージャパン
- 発売日: 2012/08/10
- メディア: 単行本(ソフトカバー)
- 購入: 1人 クリック: 31回
- この商品を含むブログ (4件) を見る
JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス
- 作者: Douglas Crockford,水野貴明
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/12/22
- メディア: 大型本
- 購入: 94人 クリック: 1,643回
- この商品を含むブログ (190件) を見る