首页 > 代码库 > Rolling Hash(Rabin-Karp 算法)
Rolling Hash(Rabin-Karp 算法)
// 闲言少许,直奔主题,我是宋鹏举。
import java.io.PrintStream;public class RollingHash{ private static final int R = 31; private int _hash; private int _rK; private CharSequence _c; private int _k; private int _offset; public RollingHash(int k) { if (k <= 0) { throw new IllegalArgumentException("k must be positive"); } this._k = k; this._rK = 1; for (int i = 1; i < k; i++) { this._rK *= 31; } } public void init(CharSequence c) { if (this._k > c.length()) { throw new IllegalArgumentException("k is greater then lenght of content"); } this._c = c; this._offset = 0; this._hash = 0; for (int i = 0; i < this._k; i++) { this._hash = (this._hash * 31 + this._c.charAt(i)); } } public boolean hasNext() { if (this._offset + this._k >= this._c.length()) { return false; } return true; } public int next() { if (this._offset + this._k >= this._c.length()) { throw new IllegalStateException("Past the end of content."); } int currentHash = this._hash; this._hash = ((this._hash - this._rK * this._c.charAt(this._offset)) * 31 + this._c.charAt(this._offset + this._k)); this._offset += 1; return currentHash; } public static void main(String[] args) { String text = "01234567890123456789012345678901234567890123456789testesteskdjfgdkfjghdkfjghdkfjghdkjgh"; int k = 20; RollingHash rh = new RollingHash(k); rh.init(text); for (int i = 0; rh.hasNext(); i++) { System.out.println("Hash " + i + ": " + rh.next()); } }}
Rolling Hash(Rabin-Karp 算法)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。