[問題] 利用整數的位元運算,列舉所有組合

看板Prob_Solve (計算數學 Problem Solving)作者 (嘎嘎嘎嘎嘎)時間2年前 (2022/01/24 19:22), 編輯推噓1(103)
留言4則, 3人參與, 2年前最新討論串1/1
最近在想一個問題,想要用一個整數,來代表一種組合 然後把 C(28, 5) 的所有組合,快速輪詢過一遍 C(28, 5) = 98280 有點大不好舉例,拿 C(6, 3) = 20 來當例子 var state = 56; //代表二進位的 111000 do { console.log( state ); } while ( state = next(state) ); 迴圈會印出以下20個值 56 //代表二進位的 111000 52 //代表二進位的 110100 50 //代表二進位的 110010 49 //代表二進位的 110001 44 //代表二進位的 101100 42 //代表二進位的 101010 41 //代表二進位的 101001 38 //代表二進位的 100110 37 //代表二進位的 100101 35 //代表二進位的 100011 28 //代表二進位的 011100 26 //代表二進位的 011010 25 //代表二進位的 011001 22 //代表二進位的 010110 21 //代表二進位的 010101 19 //代表二進位的 010011 14 //代表二進位的 001110 13 //代表二進位的 001101 11 //代表二進位的 001011 7 //代表二進位的 000111 位元運算 a & (a-1) 可以迅速的拔掉最低位元的1 左移右移 << >> 感覺也很好用 就在想說,能不能利用這種位元運算的高效率特性,來實作 next() 但是 next() 我還沒有實作出來... 不知道是不是真的可行 想說問問看各位大大的看法 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.227.45.150 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Prob_Solve/M.1643023362.A.417.html

01/24 20:05, 2年前 , 1F

01/24 20:05, 2年前 , 2F
#NextBitPermutation
01/24 20:05, 2F

01/25 02:25, 2年前 , 3F
搜尋 Gosper's hack 就有了 Wikipedia 上有解釋
01/25 02:25, 3F

01/25 17:14, 2年前 , 4F
感謝樓上兩位大大!!
01/25 17:14, 4F
文章代碼(AID): #1Xxem2GN (Prob_Solve)
文章代碼(AID): #1Xxem2GN (Prob_Solve)