2015-06-04 61 views
0

我需要比較二進制字符串,但如果一個是另一個的循環移位,我認爲它們是相同的。例如,我需要滿足以下條件是相同的:將二進制字符串移位爲規範形式

10011, 11100, 01110, 11001 

我認爲這將是更容易將它們存儲在一個規範的方法,只是檢查等價。所有要比較的字符串具有相同的長度(可能超過100位),所以我會保持長度不變,並將規範形式定義爲我們可以從循環移位中獲得的最小二進制數。例如,00111是上面顯示的二進制字符串的規範形式。

我的問題是,給出一個二進制字符串,我怎麼能循環移位它得到最小的二進制數沒有檢查所有可能的班次?

如果其他表示會更好,我很樂意收到建議。

我補充一點,翻轉字符串也無所謂,所以010011規範形式是001101(如果如上所述),但是如果翻轉是允許的,規範的形式應該是001011(我喜歡) 。一個可能的解決方案是計算字符串和翻轉字符串的標準化並選擇較小的字符串。

如果有幫助,我正在MATLAB中使用二進制向量,但不需要代​​碼,解決方法的解釋就足夠了,謝謝!

回答

1

找到0的最長序列,如果> 1移位,直到第一個是msb。

oops邊界情況將是00100,所以如果你有兩個相等的最長的零序列,你會希望唯一可能的1作爲LSB。

找到1秒的最長序列,如果> 1個移,直到最後爲LSB

如果沒有連續的1或0移,直到LSB爲1

也就是說它只有五個轉變等等蠻力的方式,你知道會工作,可以輕鬆地更少的努力...

+0

謝謝!實際上字符串的長度可能超過100位(我更新了這個問題),但找到連續的0肯定是我正在考慮的 – User

+0

嗯,你總是可以進行最長的0和1秒(在一個循環中,如果它們不是'然後再發生蠻力。 –

相關問題