java基础知识总结--bitset 和 kmp算法

前言

  set的特质是无序,不重复,所以bitset可以用来去重。bit是把每一个数据都映射到一个位上显然利于压缩存储。

  kmp算法是对之前字符串比较算法的改进,之前都是让大字符串中的每一位都循环一次和小字符串的每一位比较,浪费时间的是比如大字符串是ABCDA ,要比较的小字符串是ABE,当C和E不相同的时候,其实明显BCDA和ABE是没有必要比较的,比较过的部分匹配字符串怎么记录下来,怎么减少这些没有必要的比较呢?

bitset(位集)

这里写图片描述
  bitset中维护了一个long数组,long实至名归,因为long是整数里最长的,占8个字节就是64位,每次读都是64位,减少了读的次数,减少了时间消耗。

  其次,如果要找的数是0,只要long中有一个不是0则可以一下跳过64位。(自己理解,可能不准确)

kmp算法

这里写图片描述

  kmp的算法的秘密就是能算出一张部分匹配表。算出部分匹配值。

  并且有一个公式可以指导直接向前跳过几位。

小结

  上一篇的bitmap,bloom filter和bitset在处理大数据压缩,查询的时候都用到了映射。至于数据是怎么映射到一个位上的,这个还不太清楚,需要继续研究。

  字符串比较的算法遇到的机会挺大的,kmp算法是一个进阶,有兴趣可以了解了解。

猜你喜欢

转载自blog.csdn.net/boniesunshine/article/details/80511754