[問題] dynamic_bitset shift成最大值的bit數
開發平台(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