我需要比較二進制字符串,但如果一個是另一個的循環移位,我認爲它們是相同的。例如,我需要滿足以下條件是相同的:將二進制字符串移位爲規範形式
10011, 11100, 01110, 11001
我認爲這將是更容易將它們存儲在一個規範的方法,只是檢查等價。所有要比較的字符串具有相同的長度(可能超過100位),所以我會保持長度不變,並將規範形式定義爲我們可以從循環移位中獲得的最小二進制數。例如,00111
是上面顯示的二進制字符串的規範形式。
我的問題是,給出一個二進制字符串,我怎麼能循環移位它得到最小的二進制數沒有檢查所有可能的班次?
如果其他表示會更好,我很樂意收到建議。
我補充一點,翻轉字符串也無所謂,所以010011
規範形式是001101
(如果如上所述),但是如果翻轉是允許的,規範的形式應該是001011
(我喜歡) 。一個可能的解決方案是計算字符串和翻轉字符串的標準化並選擇較小的字符串。
如果有幫助,我正在MATLAB中使用二進制向量,但不需要代碼,解決方法的解釋就足夠了,謝謝!
謝謝!實際上字符串的長度可能超過100位(我更新了這個問題),但找到連續的0肯定是我正在考慮的 – User
嗯,你總是可以進行最長的0和1秒(在一個循環中,如果它們不是'然後再發生蠻力。 –