数据结构与算法
文章平均质量分 73
shiyicode
已弃用! 可以通过shiyi@threebody.xyz联系我
展开
-
Trie树
1. 什么是Trie树 Trie树,也叫字典树,是一种树形结构,常用于统计、排序和保存大量字符串,利用字符串的公共前缀来减少查询时间,以空间换取时间。2. 基本结构 Trie树不同于我们常接触到的二叉树,而是N叉树,例如,如果我们要将许多单词(小写)用Trie树来进行保存,那么此时的Trie树为26叉树,因为总共有26个小写字母。 例如: 我们要储存inn原创 2015-09-11 03:39:32 · 825 阅读 · 0 评论 -
数组实现循环队列(Java)
前言 库函数用的多了,一下自己动手写,还真有些手生。脑中有思路,不如笔下出代码,趁着不瞌睡,改改懒病。 队列这东西没什么可说的,线性表的一种,表头为出口,表尾为入口,先进先出。 普通队列当表头数据弹出后,空间无法再次利用,造成空间的浪费,所以就有了循环队列。 循环队列的实现一般有两种方式,链表实现和数组实现。 链表实现就是通过next指针将入口与出口连起来,实现循环。原创 2015-10-09 02:43:39 · 2867 阅读 · 4 评论 -
树状数组学习(一维)
算法描述 可以对给定序列进行查询和修改 查询:主要用来查询任意两位之间数据和 修改:修改单项数据值 时间复杂度:log(n)算法思想1.数组的构建 定义 数组C A C1 = A1 C2 = A1 + A2 C3 = A3 C4 = A1 + A2 + A3 + A4 C5 = A5 C6 =原创 2015-07-13 12:58:12 · 1022 阅读 · 0 评论 -
哈夫曼编码压缩解压缩实现&不同类型文件压缩比的测试
压缩原理及步骤&&压缩比的计算压缩原理及步骤压缩的第一步: 将一个文件以各个字符出现的次数为权值建立哈夫曼树,这样每个字符可以用从树根到该字符所在到叶子节点的路径来表示。(左为0,右为1)压缩第二步: 哈夫曼编码有一个很重要的特性:每个字符编码不会成为另一个编码的前缀。这个特性保证了即使我们把不同长度的编码存在一起,仍然也可以把它们分离开,不会出现认错人的冲突。 那么我们就可以把所有原创 2015-12-30 01:01:53 · 15606 阅读 · 2 评论 -
KMP的next数组求法详解
近几天学习kmp算法,在next数组求解上受苦颇深,看了不少博客,感觉写得都不够清晰,所以想按照自己理解的过程来尝试写一下,也便于以后温习。原创 2015-10-13 00:51:08 · 12365 阅读 · 10 评论 -
归并排序非递归(想得通不写通还是空,懒病要治)
原理 现在有两个数组a, b,都是有序的,要你将他们合并成一个数组,你会怎么做呢,当然不会直接合并再排序了,而是如下操作1. 设两标志指针分别指向a,b的首元素。2. 比较当前a,b当前首位元素,选择较小的加入临时数组t,相应的标志指针后移。3. 重复2过程,知道a.b任一方已全部加入t,然后到步骤44. 将未完全加入的数组剩余元素全部加入。 这样合并两个数组的时间复杂度是O(len(原创 2016-03-07 16:24:11 · 943 阅读 · 0 评论 -
快慢指针判断单向链表是否有环及找环入口
前言 关于快慢指针找环入口的这个问题,之前巴特跟我聊到过,印象比较深,今晚看学长在做的面试题,里面就出现了这个小知识。 发现有些东西不经意间就会用到,于是便出现此文。以后要努力做到善于总结,乐于总结。概念 快慢指针,所谓的快慢,就是指指针每次移动的步长,通常使快指针每次向前移动两步,慢指针每次向前移动一步。判断链表环及找环入口操作 从链表头节点开始,快慢指针同时开始移动,快指针原创 2016-03-13 02:31:04 · 8270 阅读 · 3 评论