标签:
1. Fenwich Tree
树状数组提供复杂度为O($lg n$)的连续区域求和查询以及对指定元素的修改操作。
1 #define N 1024 2 #define lowbit(x) (x&(-x)) 3 4 int arr[N]; 5 6 void add(int idx,int delt) 7 { 8 while (idx<N) { 9 arr[idx] += delt; 10 idx += lowbit(idx); 11 } 12 13 int sum(int idx) 14 { 15 int val = 0; 16 while (idx>0) { 17 val += arr[idx]; 18 idx -= lowbit(idx); 19 } 20 return val; 21 }
这里,lowbit是一个有参宏定义,用于提取整型数x的最低非零位。类似的定义方式还有:
# define divAndCeil(x,y) ((x+y-1)/y)
2. Skip List
跳表,一种随机化数据结构,仅依赖于并联的链表,效率可比拟二叉搜索树。
查询、插入、删除的平均时间都是O($lgn$),详见 wikipedia 。
没时间分析算法、编码实现了。真心没时间了。T_T
3. Trie Tree
字典树利用串的公共前缀节约内存,加快检索速度。
根节点无字母;从根节点到某节点的路径上所有字母构成的序列为该节点对应的单词。
树的结构可以用儿子链表(或数组)实现,也可以用 left-child, right-sibling tree 。
标签:
原文地址:http://www.cnblogs.com/DevinZ/p/4653379.html