演算法之哨兵和表驅動

2021-09-11 07:43:43 字數 767 閱讀 1307

看到他人有如下**片段,可以使用哨兵和表驅動進行優化

uint32_t pbint64size(int64_t value)  else if ((value & (0xffffffffffffffffl << 14)) == 0)  else if ((value & (0xffffffffffffffffl << 21)) == 0)  else if ((value & (0xffffffffffffffffl << 28)) == 0)  else if ((value & (0xffffffffffffffffl << 35)) == 0)  else if ((value & (0xffffffffffffffffl << 42)) == 0)  else if ((value & (0xffffffffffffffffl << 49)) == 0)  else if ((value & (0xffffffffffffffffl << 56)) == 0)  else if ((value & (0xffffffffffffffffl << 63)) == 0) 

return 10;

}

優化後**如下,可以去除繁瑣的if判斷,同時優化效能:

使用mask表來替換縮寫的各處mask

在mask表最後一位新增哨兵

int bytemask = ; // 最後的0是哨兵

int i = 0

while ((value & bytemask[i]))

return i;

演算法 資料結構 鍊錶和哨兵節點

鍊錶是一種基礎的資料結構,但對於一些初學者來說,實現乙個鍊錶還是比較困難的,許多操作作用在頭部或尾部時需要特殊處理。比如下面這段 template typename t void linkedlist remove linkedlistnode node 上述 進行了兩次的空值判斷,有可能會更新煉表...

MySQL 驅動表和被驅動表

先了解在join連線時哪個表是驅動表,哪個表是被驅動表 1.當使用left join時,左表是驅動表,右表是被驅動表 2.當使用right join時,右表時驅動表,左表是驅動表 3.當使用join時,mysql會選擇資料量比較小的表作為驅動表,大表作為被驅動表 join查詢如何選擇驅動表與被驅動表...

linux 驅動之 nand flash和emmc

nand flash試一塊儲存介質,需要外接乙個nand flash控制器來驅動nand flash,nand flash控制器一般整合在soc中。控制器整合了nand flash讀寫協議 時序 ecc等,使用前需要先配置好控制器,然後通過控制器開驅動nand flah。emmc中包含了nand f...