我有一個位掩碼k,例如01100011. 我有一個索引j,表示我想要保存的最高有效位在01100011 ==> j = 2中取011。 我想通過位操作找到k大於g =((k >>(k.len-1-j))+ 1)< <(k.len-1-j)的最小字典序排列公式,其中k.len是位掩碼的長度(示例中爲8)。k的下一個字典排列,約束'大於或等於g'
例子,
k = 01100011
for j = 2 ==> g = 10000000 because k>>(k.len-1-j) is 011
solution is 10000111
--------------------------------
k = 01100011
for j = 4 ==> g = 01101000 because k>>(k.len-1-j) is 01100
solution is 01101001
--------------------------------
k = 01100011
for j = 7 ==> g = 01100100 because k>>(k.len-1-j) is 01100011
solution is 01100101
我想知道的公式,如果可能的公式是如何構建一個簡單的解釋。
我發現在http://graphics.stanford.edu/~seander/bithacks.html#NextBitPermutation 下一個數字k的詞典排列的公式,我正在尋找類似的東西。
如果只使用位運算符而不使用編譯器/架構相關指令(我使用java),但不是必需的,會很好。
如果您告訴我們g的值,以及您的工作示例中的正確答案,這個問題會更清楚。 – samgak
@samgak謝謝,編輯和更正。 – AndrewBloom