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

数据结构基础

时间:2017-10-25 16:39:18      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:top   比较   logs   arch   建立   短信   快速排序   优先   公共前缀   

存储结构分为:

1,随机存取,即可随意直接存取任意一个元素,通过下标直接存取出任何一个元素;通过地址直接访问任意一个空间

2,顺序存取,只能从前往后逐个访问。

3,索引存取,为某个关键字建立索引表,从表中取得地址。索引存取多用在数据管理过程中。

4,散列存取。

 

有1千万条重复的短信,以文本形式保存,一行一条,有重复。请在5分钟时间内找出重复出现最多的10条短信?

答:用哈希表的方法。

1)将1千万条短信分成若干组,进行边扫描边建散列表的方法。第一次扫描,取首字节、尾字节、中间任意两个字节作为hash code,插入到Hash table中,并记录其地址、信息长度和重复次数。同Hash code且等长就疑似为相同,比较一下,若相同则加1次Hash table,将重复次数加1。一次扫描后,已经记录了各自的重复次数,进行第2次hash table的处理。用线性时间选择可在O(n)的级别上完成前10条的寻找。分组后每组中的top10必须保证各不相同,可用hash来保证,也可以用hash值来保证。

深度优先遍历(DFS)类似于树的前序遍历。

广度优先遍历(BFS)类似于树的按层次遍历。

哈夫曼编码:abcdabaa,a编码0(1位),b编码10(2位),c编码110(3位),d编码111(3位),总长度:1*4+2*2+3*1+3*1=14

 

http://www.cnblogs.com/huangxincheng/archive/2012/11/25/2788268.html

Trie树,又称为单词查找树、字典树。经常用于搜索引擎系统用于文本词频统计。

技术分享

 

从上面的图中,我们或多或少的可以发现一些好玩的特性。

      第一:根节点不包含字符,除根节点外的每一个子节点都包含一个字符。

      第二:从根节点到某一节点,路径上经过的字符连接起来,就是该节点对应的字符串。

      第三:每个单词的公共前缀作为一个字符节点保存。

 

二:使用范围

     既然学Trie树,我们肯定要知道这玩意是用来干嘛的。

     第一:词频统计。

            可能有人要说了,词频统计简单啊,一个hash或者一个堆就可以打完收工,但问题来了,如果内存有限呢?还能这么

             玩吗?所以这里我们就可以用trie树来压缩下空间,因为公共前缀都是用一个节点保存的。

     第二: 前缀匹配

            就拿上面的图来说吧,如果我想获取所有以"a"开头的字符串,从图中可以很明显的看到是:and,as,at,如果不用trie树,

            你该怎么做呢?很显然朴素的做法时间复杂度为O(N2) ,那么用Trie树就不一样了,它可以做到h,h为你检索单词的长度,

            可以说这是秒杀的效果。

 

快速排序的空间复杂度?

 

数据结构基础

标签:top   比较   logs   arch   建立   短信   快速排序   优先   公共前缀   

原文地址:http://www.cnblogs.com/smuxiaolei/p/7729442.html

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