算法和数据结构
利用好算法和数据结构可以显著提升程序的性能
AlferWei
一个奋斗在编程路上的程序员。
展开
-
Java用数组实现队列
数组实现队列,实际是通过维护队首和队尾变量来实现一个循环数组,从而实现复杂度为1的FIFO队列。interface Queue<T> { boolean add(T t) throws Exception; T take();}public class ArrayQueue<T> implements Queue<T> { ...原创 2019-03-12 15:15:55 · 735 阅读 · 0 评论 -
谈谈分词
语言模型与词中文分词方法的演变查字典最少词数分词法最大词数分词法优缺点基于统计语言模型的分词如何衡量分词的结果分词的一致性词的颗粒度和层次原理和实现参考语言模型与词语言模型是建立在词的基础上的,而词是表达语意的最小单元。中文分词方法的演变查字典实际就是把一个句子从左到右扫描一遍,遇到字典里有的词就标识出来,遇到复合词(比如“上海大学”)就找最长的词匹配,遇到不认识的字串就分割原创 2017-08-02 00:07:12 · 1048 阅读 · 0 评论 -
哈希表
哈希表(Hash Table)我们知道,通过对数组进行直接寻址(Direct Addressing),可以在 O(1) 时间内访问数组中的任意元素。所以,如果存储空间允许,可以提供一个数组,为每个可能的关键字保留一个位置,就可以应用直接寻址技术。哈希表(Hash Table)是普通数组概念的推广。当实际存储的的关键字数比可能的关键字总数较小时,这时采用哈希表就会比使用直接数组寻址更为有效。原创 2017-03-08 17:55:00 · 632 阅读 · 0 评论 -
十道海量数据处理面试题与十个方法大总结
第一部分、十道海量数据处理面试题1、海量日志数据,提取出某日访问百度次数最多的那个IP。 首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用hash_map进行频率统计,然后再找出频率转载 2017-03-05 23:54:17 · 506 阅读 · 0 评论 -
Hash表算法及TopN问题
什么是Hash Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数转载 2017-03-05 23:42:30 · 1227 阅读 · 0 评论 -
快速排序及Java实现
算法概念快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。算法思想通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。实现思路①以第一个关键字原创 2017-03-02 12:51:13 · 423 阅读 · 0 评论 -
LeetCode 刷题有感
行话说:“程序=数据结构 + 算法”,在程序员界摸爬滚打了这些年,越来越意识到这就话的正确性。一个合适的数据结构可以简化很多不必要的麻烦,一个好的算法可以降低时间复杂度几个数量级啊!在 LeetCode 上刷算法题有段时间了,和前辈们学习了很多的优秀的算法,对于非科班出身的我来说,提高是全方位的。后续我将整理和更新我在 LeetCode 上刷题的一些具体收获,希望更多的同行们在 LeetCode 上原创 2016-12-16 16:42:18 · 712 阅读 · 0 评论 -
字符串匹配
最近研究算法,才发现字符串匹配竟然有这么多的算法可以选择,并且对字符串查找的效率也有提升,在这里对几个典型的算法做一个总结。各种算法的原理在所有算法书籍或者Google都能找到,这里就不再重复,只将自己实现的java版代码贴下。简单匹配/** * 原始字符串匹配 * * @param target * @param pattern * @return原创 2016-12-09 17:25:28 · 495 阅读 · 0 评论 -
数据结构 - 树 - B树、B+树
前言动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced Binary Search Tree),红黑树(Red-Black Tree ),B-tree/B+-tree/ B*-tree (B~Tree)。前三者是典型的二叉查找树结构,其查找的时间复杂度O(log2N)与树的深度相关,那么降低树的深度自然会提高查找效率。但是咱们有面对这样一...原创 2018-12-05 17:09:13 · 255 阅读 · 0 评论 -
数据结构 - 树 - Trie树
Trie树定义Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树。Trie树可以利用字符串的公共前缀来节约存储空间。如下图所示,该trie树用10个节点保存了6个字符串tea,ten,to,in,inn,int:在该trie树中,字符串in,inn和int的公共前缀是“in”,因此可以只存...原创 2018-12-05 11:58:12 · 329 阅读 · 0 评论 -
数据结构 - 树 - 堆
堆的定义堆的定义如下:堆树是一颗完全二叉树; 堆树中某个节点的值总是不大于或不小于其孩子节点的值; 堆树中每个节点的子树都是堆树.当父节点的键值总是大于或等于任何一个子节点的键值时为最大堆.当父节点的键值总是小于或等于任何一个子节点的键值时为最小堆.如下图,左边为最大堆,右边为最小堆. 堆树的操作以最大堆为例,最小堆同理.构造最大堆原始数据为a[] = ...原创 2018-12-05 11:28:56 · 245 阅读 · 0 评论