SlideShare a Scribd company logo
数据结构回顾
(Trie, Heap, Segment Tree)
 Retired Member 洪泽华 / 2012.5.19
堆(优先队列)
Heap(Priority Queue)
什么是堆?
 堆是一棵二叉树


 满足所有节点小于或大于其所有子
节点的树

 用于解决在一堆数中快速查询和维
护最大(或最小)的数的问题
堆的图示
                       12




               7                8




           4       6        5       3




       1
堆的结构定义
   int heap[maxnode], size=0;



   …
   没有了?

   对,堆的结构定义就是这么简单。
堆的插入
堆的插入(代码)
   void up(int pos){
     int I;
     for (i=pos; i>0; i=(i-1)/2){
       if (heap[i] > heap[(i-1)/2]) break;
       else swap(heap[i], heap[(i-1)/2]);
      }
   }

   void push(int x){
     heap[size] = x;
     up(size);
     size++;
   }
堆的删除
堆的删除
堆的删除 (代码)
   void down(int pos) {
     int i, j;
     for(i=pos; i*2+1<size;){
       j=i*2+1;
       if (j+1<size&&heap[j+1]<heap[j]) j++;
       if( heap[i] < heap[j]) break;
       else swap(heap[i], heap[j]);
       i=j;
      }
    }
    void pop(){
      size--;
      heap[0] = heap[size];
      down(0);
    }
堆的应用

   堆排序:
      将N个数一次插入
    堆中,然后做N次删除
    堆顶元素操作,就可
    以获得顺序的排列。

   时间复杂度:
      O(n*log(n))
完成练习
   练习题集地址:
   http://acm.hust.edu.cn:8080/judge/contest/contest/vi
    ew.action?cid=8278#overview

   Problem A CodeForces 140C New Year Snowmen
    Problem B HDU 2680 Choose the best route
字典树
 Trie
字典树 导引问题 (HDOJ-1251)
 Ignatius最近遇到一个难题,老师交
给他很多单词(只有小写字母组
成,不会有重复的单词出现),现在老
师要他统计出以某个字符串为前缀
的单词数量(单词本身也是自己的
前缀).
字典树 导引问题 (HDOJ-1251)
 假设单词表容量为M,需要统计的
前缀数量为N,单词的平均长度为L,
则常规算法的时间复杂度是?

 如果单词表容量很大->查找效率?     -
  >低
 更有效率的方法:字典树
什么是字典树
 字典树:又称为Trie,是一种用于快速
检索的多叉树结构。Trie把要查找的关
键词看作一个字符序列,并根据构成
关键词字符的先后顺序构造用于检索
的树结构;一棵m度的Trie树或者为
空,或者由m棵m度的Trie树构成。

 特别地:和二叉查找树不同,在Trie树
中,每个结点上并非存储一个元素。
字典树的图示
         特点:
          利用串的公共前缀-
           >节约内存
          根结点不包含任何
           字母
          其余结点仅包含一
           个字母(非元素)
          每个结点的子节点
           包含字母不同
字典树的结构定义
   struct dictree
   {
      struct dictree *child[26];
      int n;
   };

   附注解:
   1:child[26]中的26表示字符集大小,也可以是
    10,可以是52,依据具体情况而定。
   2:int n是附加属性,在这个题里用于统计单词出
    现的次数,如果只需要统计某个单词是否出现
    过,其实还可以定义为一个布尔变量,比如bool
    touch;
字典树的建立过程
   void insert (char *source)
   {
       int len,i,j;
       struct dictree *current,*newnode;
       len=strlen(source);
       if(len==0) return;
       current=root;
       for(i=0;i<len;i++)
       {
           if(current->child[source[i]-'a']!=0)
           {
               current=current->child[source[i]-'a'];
               current->n=current->n+1;
           }
           else
           {
               newnode=(struct dictree *)malloc(sizeof(struct dictree));
               for(j=0;j<26;j++)
                   newnode->child[j]=0;
               current->child[source[i]-'a']=newnode;
               current=newnode;
               current->n=1;
           }
       }
   }
字典树的查找(主要操作)
   int find(char *source)
   {
       int i,len;
       struct dictree *current;
       len=strlen(source);
       if(len==0) return 0;
       current=root;
       for(i=0;i<len;i++)
       {
           if(current->child[source[i]-'a']!=0)
               current=current->child[source[i]-'a'];
           else return 0;
       }
       return current->n;
   }
内存申请的小优化
   malloc过程是非常占用时间的,一个题目中字典树需
    要消耗的最大内存通常是可以估计的,因此一个优化
    的办法是,提前申请好内存,比如:
       在程序开始阶段定义一个数组dictree mem[maxnode];
       和一个当前已使用节点数的计数变量size_t mpt=0;
           newnode=(struct dictree *)malloc(sizeof(struct dictree));
           修改为
           Newnode=&mem[mpt++];



   这样可以节省不少建立字典树的时间。
完成练习
   练习题集地址:
   http://acm.hust.edu.cn:8080/judge/contest/contest/vi
    ew.action?cid=8278#overview

   Problem C POJ 2513 Colored Sticks
   Problem D POJ 2503 Babelfish
线段树
Segment Tree
线段树
 请参照罗康琦的课件
完成练习
   练习题集地址:
   http://acm.hust.edu.cn:8080/judge/contest/contest/vi
    ew.action?cid=8278#overview

   Problem E POJ 2528 Mayor's posters
   Problem F POJ 2777 Count Color
   Problem G POJ 3277 City Horizon
   Problem H POJ 1177 Picture
   Problem I POJ 1151 Atlantis
   Problem J POJ 3368 Frequent values
   Problem K POJ 3225 Help with Intervals
Referance
   1、ACM程序设计集训队讲座(二)
                            刘春英
   2、《ACM/ICPC系列讲座》万丈高楼平地起——
    基本算法及应用
                                戎术


             谢谢他们的ppt
             谢谢大家光临!

More Related Content

What's hot

Num py basic(2) - v01
Num py   basic(2) - v01Num py   basic(2) - v01
Num py basic(2) - v01
ssuser5e7722
 
Ch5 教學
Ch5 教學Ch5 教學
Ch5 教學
hungchiayang1
 
Ch7 教學
Ch7 教學Ch7 教學
Ch7 教學
hungchiayang1
 
Ch10 教學
Ch10 教學Ch10 教學
Ch10 教學
hungchiayang1
 
Num py basic(1) - v01
Num py   basic(1) - v01Num py   basic(1) - v01
Num py basic(1) - v01
ssuser5e7722
 
Ch9 範例
Ch9 範例Ch9 範例
Ch9 範例
hungchiayang1
 
Math basic - v01
Math   basic - v01Math   basic - v01
Math basic - v01
ssuser5e7722
 
Ch5 範例
Ch5 範例Ch5 範例
Ch5 範例
hungchiayang1
 
Ch4 教學
Ch4 教學Ch4 教學
Ch4 教學
hungchiayang1
 
Python入門:5大概念初心者必備 2021/11/18
Python入門:5大概念初心者必備 2021/11/18Python入門:5大概念初心者必備 2021/11/18
Python入門:5大概念初心者必備 2021/11/18
Derek Lee
 
Python入門:5大概念初心者必備
Python入門:5大概念初心者必備Python入門:5大概念初心者必備
Python入門:5大概念初心者必備
Derek Lee
 
Ch2 教學
Ch2 教學Ch2 教學
Ch2 教學
hungchiayang1
 
中心教员Java面试题1
中心教员Java面试题1中心教员Java面试题1
中心教员Java面试题1yiditushe
 
Appendix A 教學
Appendix A 教學Appendix A 教學
Appendix A 教學
hungchiayang1
 
Ppt 101-119
Ppt 101-119Ppt 101-119
Ppt 101-119
hungchiayang1
 
Ch6 教學
Ch6 教學Ch6 教學
Ch6 教學
hungchiayang1
 
Ch10 範例
Ch10 範例Ch10 範例
Ch10 範例
hungchiayang1
 
Ppt 51-77
Ppt 51-77Ppt 51-77
Ppt 51-77
hungchiayang1
 

What's hot (20)

Num py basic(2) - v01
Num py   basic(2) - v01Num py   basic(2) - v01
Num py basic(2) - v01
 
Ch5 教學
Ch5 教學Ch5 教學
Ch5 教學
 
Ch7 教學
Ch7 教學Ch7 教學
Ch7 教學
 
Ch10 教學
Ch10 教學Ch10 教學
Ch10 教學
 
Num py basic(1) - v01
Num py   basic(1) - v01Num py   basic(1) - v01
Num py basic(1) - v01
 
Ch9 範例
Ch9 範例Ch9 範例
Ch9 範例
 
Math basic - v01
Math   basic - v01Math   basic - v01
Math basic - v01
 
Ch5 範例
Ch5 範例Ch5 範例
Ch5 範例
 
Ch4 教學
Ch4 教學Ch4 教學
Ch4 教學
 
Python入門:5大概念初心者必備 2021/11/18
Python入門:5大概念初心者必備 2021/11/18Python入門:5大概念初心者必備 2021/11/18
Python入門:5大概念初心者必備 2021/11/18
 
Python入門:5大概念初心者必備
Python入門:5大概念初心者必備Python入門:5大概念初心者必備
Python入門:5大概念初心者必備
 
Ch2 教學
Ch2 教學Ch2 教學
Ch2 教學
 
中心教员Java面试题1
中心教员Java面试题1中心教员Java面试题1
中心教员Java面试题1
 
Ch12
Ch12Ch12
Ch12
 
Appendix A 教學
Appendix A 教學Appendix A 教學
Appendix A 教學
 
Ppt 101-119
Ppt 101-119Ppt 101-119
Ppt 101-119
 
Ch6 教學
Ch6 教學Ch6 教學
Ch6 教學
 
Ch10 範例
Ch10 範例Ch10 範例
Ch10 範例
 
Ch11
Ch11Ch11
Ch11
 
Ppt 51-77
Ppt 51-77Ppt 51-77
Ppt 51-77
 

Viewers also liked

Resumen y sintesis
Resumen y sintesisResumen y sintesis
Resumen y sintesis
Darwin Fernández
 
La obesidad y salud fisica
La obesidad y salud fisicaLa obesidad y salud fisica
La obesidad y salud fisica
akirha
 
An investigation of effectiveness of mesua ferrea l. seed cake as a binder in...
An investigation of effectiveness of mesua ferrea l. seed cake as a binder in...An investigation of effectiveness of mesua ferrea l. seed cake as a binder in...
An investigation of effectiveness of mesua ferrea l. seed cake as a binder in...
Madhurjya Saikia
 
Group pitch
Group pitchGroup pitch
Group pitch
ysabellagrace
 
LéGislation En Hd1999
LéGislation En Hd1999LéGislation En Hd1999
LéGislation En Hd1999drwissem
 
Facilitator Packet - BROTHER OUTSIDER 2 hr
Facilitator Packet - BROTHER OUTSIDER 2 hrFacilitator Packet - BROTHER OUTSIDER 2 hr
Facilitator Packet - BROTHER OUTSIDER 2 hrKelsey Gernert
 
Dynamic DFS in Undirected Graph using Segment Tree
Dynamic DFS in Undirected Graph using Segment TreeDynamic DFS in Undirected Graph using Segment Tree
Dynamic DFS in Undirected Graph using Segment Tree
Siraj Memon
 
K d tree_cpp
K d tree_cppK d tree_cpp
K d tree_cpp
Russell Childs
 
Priority Lands September 25 2008
Priority Lands September 25 2008Priority Lands September 25 2008
Priority Lands September 25 2008ecopatriot80
 
Flujograma .proceso-penal
Flujograma .proceso-penalFlujograma .proceso-penal
Flujograma .proceso-penal
Val Luna
 
Moč dobrih praks in adut sofinanciranja (HRM 3, 2016)
Moč dobrih praks in adut sofinanciranja (HRM 3, 2016)Moč dobrih praks in adut sofinanciranja (HRM 3, 2016)
Moč dobrih praks in adut sofinanciranja (HRM 3, 2016)
Aleš Vidmar
 
Cirugía plástica en colombia
Cirugía plástica en colombiaCirugía plástica en colombia
Cirugía plástica en colombia
akirha
 
0812-7510-9767(Tsel) - Jual Aluminium Anode Batam
0812-7510-9767(Tsel) - Jual Aluminium Anode Batam0812-7510-9767(Tsel) - Jual Aluminium Anode Batam
0812-7510-9767(Tsel) - Jual Aluminium Anode Batam
anodebatam
 
Segment tree
Segment treeSegment tree
Segment tree
Shakil Ahmed
 
Segment tree
Segment treeSegment tree
Segment tree
shohanjh09
 

Viewers also liked (20)

Resumen y sintesis
Resumen y sintesisResumen y sintesis
Resumen y sintesis
 
La obesidad y salud fisica
La obesidad y salud fisicaLa obesidad y salud fisica
La obesidad y salud fisica
 
An investigation of effectiveness of mesua ferrea l. seed cake as a binder in...
An investigation of effectiveness of mesua ferrea l. seed cake as a binder in...An investigation of effectiveness of mesua ferrea l. seed cake as a binder in...
An investigation of effectiveness of mesua ferrea l. seed cake as a binder in...
 
Notas recuperação 2º ano
Notas recuperação 2º anoNotas recuperação 2º ano
Notas recuperação 2º ano
 
Group pitch
Group pitchGroup pitch
Group pitch
 
LéGislation En Hd1999
LéGislation En Hd1999LéGislation En Hd1999
LéGislation En Hd1999
 
RESUME
RESUMERESUME
RESUME
 
Facilitator Packet - BROTHER OUTSIDER 2 hr
Facilitator Packet - BROTHER OUTSIDER 2 hrFacilitator Packet - BROTHER OUTSIDER 2 hr
Facilitator Packet - BROTHER OUTSIDER 2 hr
 
TripleTree eDiscovery
TripleTree  eDiscoveryTripleTree  eDiscovery
TripleTree eDiscovery
 
Dynamic DFS in Undirected Graph using Segment Tree
Dynamic DFS in Undirected Graph using Segment TreeDynamic DFS in Undirected Graph using Segment Tree
Dynamic DFS in Undirected Graph using Segment Tree
 
K d tree_cpp
K d tree_cppK d tree_cpp
K d tree_cpp
 
Priority Lands September 25 2008
Priority Lands September 25 2008Priority Lands September 25 2008
Priority Lands September 25 2008
 
Flujograma .proceso-penal
Flujograma .proceso-penalFlujograma .proceso-penal
Flujograma .proceso-penal
 
Moč dobrih praks in adut sofinanciranja (HRM 3, 2016)
Moč dobrih praks in adut sofinanciranja (HRM 3, 2016)Moč dobrih praks in adut sofinanciranja (HRM 3, 2016)
Moč dobrih praks in adut sofinanciranja (HRM 3, 2016)
 
Chapter 15
Chapter 15Chapter 15
Chapter 15
 
Ch15 Heap
Ch15 HeapCh15 Heap
Ch15 Heap
 
Cirugía plástica en colombia
Cirugía plástica en colombiaCirugía plástica en colombia
Cirugía plástica en colombia
 
0812-7510-9767(Tsel) - Jual Aluminium Anode Batam
0812-7510-9767(Tsel) - Jual Aluminium Anode Batam0812-7510-9767(Tsel) - Jual Aluminium Anode Batam
0812-7510-9767(Tsel) - Jual Aluminium Anode Batam
 
Segment tree
Segment treeSegment tree
Segment tree
 
Segment tree
Segment treeSegment tree
Segment tree
 

Similar to 数据结构回顾

手把手教你 R 語言分析實務
手把手教你 R 語言分析實務手把手教你 R 語言分析實務
手把手教你 R 語言分析實務
Helen Afterglow
 
竞赛中C++语言拾遗
竞赛中C++语言拾遗竞赛中C++语言拾遗
竞赛中C++语言拾遗
乐群 陈
 
dspch01資料結構資料結構資料結構資料結構資料結構資料結構資料結構資料結構.ppt
dspch01資料結構資料結構資料結構資料結構資料結構資料結構資料結構資料結構.pptdspch01資料結構資料結構資料結構資料結構資料結構資料結構資料結構資料結構.ppt
dspch01資料結構資料結構資料結構資料結構資料結構資料結構資料結構資料結構.ppt
LinPhil
 
第01章 绪论(java版)
第01章  绪论(java版)第01章  绪论(java版)
第01章 绪论(java版)Yan Li
 
Java SE 7 技術手冊 - 課後練習解答
Java SE 7 技術手冊 - 課後練習解答Java SE 7 技術手冊 - 課後練習解答
Java SE 7 技術手冊 - 課後練習解答
Justin Lin
 
資料結構-20個經典題型
資料結構-20個經典題型資料結構-20個經典題型
資料結構-20個經典題型
逸 張
 
twMVC#27 | C# 7.0 新功能介紹
twMVC#27 | C# 7.0 新功能介紹twMVC#27 | C# 7.0 新功能介紹
twMVC#27 | C# 7.0 新功能介紹
twMVC
 
正課第10週模擬試題_解答.pdf
正課第10週模擬試題_解答.pdf正課第10週模擬試題_解答.pdf
正課第10週模擬試題_解答.pdf
逸 張
 
第5章数组
第5章数组第5章数组
第5章数组
summerfeng
 
Arrays的Sort算法分析
Arrays的Sort算法分析Arrays的Sort算法分析
Arrays的Sort算法分析
Zianed Hou
 
Practical Data Analysis in R
Practical Data Analysis in RPractical Data Analysis in R
Practical Data Analysis in R
Chun-Ming Chang
 
Practical data analysis in R: from data collection to data insight
Practical data analysis in R: from data collection to data insight Practical data analysis in R: from data collection to data insight
Practical data analysis in R: from data collection to data insight
Chun-Min Chang
 
[系列活動] 手把手教你R語言資料分析實務
[系列活動] 手把手教你R語言資料分析實務[系列活動] 手把手教你R語言資料分析實務
[系列活動] 手把手教你R語言資料分析實務
台灣資料科學年會
 
神州泰岳测试试题(笔试)
神州泰岳测试试题(笔试)神州泰岳测试试题(笔试)
神州泰岳测试试题(笔试)yiditushe
 
Sql Server 高级技巧系列之三整体优化
Sql Server 高级技巧系列之三整体优化Sql Server 高级技巧系列之三整体优化
Sql Server 高级技巧系列之三整体优化向 翔
 
張逸 - 研究所 / 轉學考計算機概論 、公職計算機概要 - 程式語言 - 試閱版
張逸 - 研究所 / 轉學考計算機概論 、公職計算機概要 - 程式語言 - 試閱版張逸 - 研究所 / 轉學考計算機概論 、公職計算機概要 - 程式語言 - 試閱版
張逸 - 研究所 / 轉學考計算機概論 、公職計算機概要 - 程式語言 - 試閱版
逸 張
 
Glider
GliderGlider
Glider
windyrobin
 
C語言結構與串列
C語言結構與串列 C語言結構與串列
C語言結構與串列
吳錫修 (ShyiShiou Wu)
 

Similar to 数据结构回顾 (20)

手把手教你 R 語言分析實務
手把手教你 R 語言分析實務手把手教你 R 語言分析實務
手把手教你 R 語言分析實務
 
竞赛中C++语言拾遗
竞赛中C++语言拾遗竞赛中C++语言拾遗
竞赛中C++语言拾遗
 
dspch01資料結構資料結構資料結構資料結構資料結構資料結構資料結構資料結構.ppt
dspch01資料結構資料結構資料結構資料結構資料結構資料結構資料結構資料結構.pptdspch01資料結構資料結構資料結構資料結構資料結構資料結構資料結構資料結構.ppt
dspch01資料結構資料結構資料結構資料結構資料結構資料結構資料結構資料結構.ppt
 
第01章 绪论(java版)
第01章  绪论(java版)第01章  绪论(java版)
第01章 绪论(java版)
 
Java SE 7 技術手冊 - 課後練習解答
Java SE 7 技術手冊 - 課後練習解答Java SE 7 技術手冊 - 課後練習解答
Java SE 7 技術手冊 - 課後練習解答
 
資料結構-20個經典題型
資料結構-20個經典題型資料結構-20個經典題型
資料結構-20個經典題型
 
twMVC#27 | C# 7.0 新功能介紹
twMVC#27 | C# 7.0 新功能介紹twMVC#27 | C# 7.0 新功能介紹
twMVC#27 | C# 7.0 新功能介紹
 
正課第10週模擬試題_解答.pdf
正課第10週模擬試題_解答.pdf正課第10週模擬試題_解答.pdf
正課第10週模擬試題_解答.pdf
 
第5章数组
第5章数组第5章数组
第5章数组
 
Arrays的Sort算法分析
Arrays的Sort算法分析Arrays的Sort算法分析
Arrays的Sort算法分析
 
Practical Data Analysis in R
Practical Data Analysis in RPractical Data Analysis in R
Practical Data Analysis in R
 
Practical data analysis in R: from data collection to data insight
Practical data analysis in R: from data collection to data insight Practical data analysis in R: from data collection to data insight
Practical data analysis in R: from data collection to data insight
 
[系列活動] 手把手教你R語言資料分析實務
[系列活動] 手把手教你R語言資料分析實務[系列活動] 手把手教你R語言資料分析實務
[系列活動] 手把手教你R語言資料分析實務
 
神州泰岳测试试题(笔试)
神州泰岳测试试题(笔试)神州泰岳测试试题(笔试)
神州泰岳测试试题(笔试)
 
Sql Server 高级技巧系列之三整体优化
Sql Server 高级技巧系列之三整体优化Sql Server 高级技巧系列之三整体优化
Sql Server 高级技巧系列之三整体优化
 
張逸 - 研究所 / 轉學考計算機概論 、公職計算機概要 - 程式語言 - 試閱版
張逸 - 研究所 / 轉學考計算機概論 、公職計算機概要 - 程式語言 - 試閱版張逸 - 研究所 / 轉學考計算機概論 、公職計算機概要 - 程式語言 - 試閱版
張逸 - 研究所 / 轉學考計算機概論 、公職計算機概要 - 程式語言 - 試閱版
 
getPDF.aspx
getPDF.aspxgetPDF.aspx
getPDF.aspx
 
getPDF.aspx
getPDF.aspxgetPDF.aspx
getPDF.aspx
 
Glider
GliderGlider
Glider
 
C語言結構與串列
C語言結構與串列 C語言結構與串列
C語言結構與串列
 

数据结构回顾