-
Query 聚类
背景搜索系统优化长尾 query。想了解一下长尾 query 长什么样?大体上都有几类?最好能归类,一类一类处理。Query 数据源:包含“什么”,“怎么”,“如何” 关键词的 Query。K-means聚类概念生活中的聚类例子:班级分组。 一个班级有 40 名学生,班主任分别让小明,小红,小强,小李将班级中学生分成两组。 小明:男生一组,女生一组。 小红:前三排一组,后三排一组。 小强:左三列一组,右三列一组。 小李:住校生一组,走读生一组。为什么造成大家的分组不一...…
-
Size Balanced Tree
平衡性 每棵子树的大小,不小于其兄弟的子树大小。既每棵叔叔树的大小,不小于其任何侄子树的大小。左旋触发条件:cur = 节点 4,cur.right.right.size > cur.left.size。出现右边子树节点数太多。通过左旋,将 cur.right 的结点替换 cur 节点。具体过程如下图# 左旋def left_rotate(self, cur: Node): right_node = cur.right cur.right = right_node.le...…
-
SkipLists
跳表是一个随机化的搜索数据结构跳表的 NB 之处: 思想先进:跳表不再使用硬规则来数据的平衡性,而是使用概率保证。 由于使用概率随机生成数据层,与用户输入的数据无关。跳表时间复杂度评估第 0 层:N 个节点(每个节点必在第 0 层)第 1 层:$\frac{N}{2}$ 个节点第 2 层:$\frac{N}{4}$ 个节点第 3 层:$\frac{N}{8}$ 个节点…第 k 层:$\frac{N}{2^k}$ 个节点类似满二叉树查找数据查找 50 。从 head 的最上层开始查找...…
-
有序表
概述有序表的简单介绍有序表和哈希表的本质区别就是:哈希表的 Key 是通过 Hash 函数散列组织的,而有序表的 Key 是顺序组织的。 有序表在使用层面上可以理解为一种**集合**结构 如果只有 key,没有伴随数据 value,可以使用 TreeSet 结构 如果既有 key,又有伴随数据 value,可以使用 TreeMap 结构 有无伴随数据,是 TreeSet 和 TreeMap 唯一的区别,底层的实际结构是一回事 有序表和哈希表的区别是,有序表把 key 按照顺序组织...…