码迷,mamicode.com
首页 > 其他好文 > 详细

Delicate Data Structures

时间:2015-07-18 10:43:45      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:

 

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 。

 

Delicate Data Structures

标签:

原文地址:http://www.cnblogs.com/DevinZ/p/4653379.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!