randomLevel明显是有问题的哈,会导致中间层数的索引数量明显多于低层与高层,自己去测试吧。应该修改为:
for(int i = 0; random.nextInt()%2 == 1 && i < MAX_LEVEL; i++){
level++;
}
这样才能更好的保持索引数量逐层递减,16层索引大概在 10W 级别能够较好的保持 O(longN)的复杂度。另外如果不对细节进行思考,那么学习算法将毫无意义
跳表(skip list)我们知道二叉搜索算法能够高效的查询数据,但是需要一块连续的内存,而且增删改效率很低。跳表,是基于链表实现的一种类似“二分”的算法。它可以快速的实现增,删,改,查操作。我们先来...