[問題] dynamic_bitset shift成最大值的bit數

看板C_and_CPP作者時間12年前 (2012/05/05 17:45), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++2010 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) boost::dynamic_bitset 問題(Question): 求得bitset shift成最大值 所移動的bit數 餵入的資料(Input): 1111 1100 0011 11 預期的正確結果(Expected Output): 10 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) void rotate(boost::dynamic_bitset<unsigned char>& b, unsigned int m) { b = b << m | b >> (b.size()-m); } unsigned int max_diset(boost::dynamic_bitset<unsigned char>& b) { unsigned int SHL_bit = 0; if(b.none()) return SHL_bit; boost::dynamic_bitset<unsigned char> max; max.resize(b.size()); unsigned int gg = b.size(); bool k = 1; unsigned int skip_bit = 0; for(size_t i = 0; i < gg ; i++) { if (b[15-i] == k) { k = !k; rotate(b, i); gg = gg - i; if(b > max) { SHL_bit = i + SHL_bit + skip_bit; max = b; skip_bit = 0; } else skip_bit = i + skip_bit; i = 0; } } return SHL_bit; } 補充說明(Supplement): 有試過暴力法 但因為太慢了 所以另外又寫了一個(如上) 雖然我是用來處理16bits 但只要改掉15是可以應用到一般case 請問有更快的方法嗎? 或是我的方法有哪些部分可以加速的? STL的bitset會比較快嗎? 雖然它比較不方便 謝謝看完的大大 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.70.59.136
文章代碼(AID): #1FfFQiFf (C_and_CPP)