算法与数据结构
文章平均质量分 51
洞庭小哥
在IT行业前线努力前行~~
展开
-
【转】算术表达式中缀形式转后缀形式,并基于后缀式和栈进行计算
原文地址:(该文章也得非常好!要原创作者致敬!)http://blog.csdn.net/liuzhanchen1987/article/details/7387480对于一个中缀表达式 a+b*c*(d-e/f) 转换成后缀是这样的形式 abc*def/-+后缀表达式是相当有用处的,转换成后缀表达式后求值会简单很多.那么该如何转换呢? 网上关于这方面的转载 2012-11-27 19:46:30 · 1790 阅读 · 0 评论 -
【学习笔记】字符串编辑距离(字符串相似度)
字符串编辑距离是一个很经典的问题了,以前参加编程比赛、笔试面试的时候经常会碰到,今天看《编程之美》的3.3节中又遇到了该问题,又重新回顾了一边,顺便在这里总结一下。【问题描述】给定一个源字符串和目标字符串,能够对源串进行如下操作: 1.在给定位置上插入一个字符 2.替换任意字符 3.删除任意字符求通过以上操作使得源字符串和目标字符串一致的最小操作步数原创 2013-03-16 09:54:08 · 5466 阅读 · 1 评论 -
【算法题】百度笔试题——求一组线段的最大重叠区域
之前参加百度校招时遇到过一道“求一组线段的最大重叠区域”的算法题,当时没有搞定,汗颜!今天在网上看到了一位高手写的答案,恍然大悟,茅塞顿开!看了高手的解答之后才知道原来真不难,再次汗颜!将题目和代码如下,我在代码中加入了些注释。【题目描述】请编写程序,找出下面“输入数据及格式”中所描述的输入数据文件中最大重叠区间的大小。对一个正整数n,如果n在数据文件中某行的两个正整数(假设为A和B)原创 2013-03-01 15:32:30 · 6217 阅读 · 2 评论 -
【算法题】求数组中唯一重复的元素
在网上看到一个这样的题:一个数组中含有1001个元素,存放了1,2,3...1000和一个重复的数。只有唯一一个数是重复的,其它均只出现一次。要求设计一个算法找出这个重复的数,要求:每个数组元素只能访问一次,不用辅助存储空间。解法一:最简单的方法是,先求出1...1000的和(用公式:n(n+1)/2)sum1,然后求出arr[0]...arr[1000]的和sum2,(sum2-原创 2013-04-27 14:59:11 · 7278 阅读 · 6 评论 -
【算法题】打印二元查找树中元素和等于指定数的所有路径
题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如:输入整数24和如下二元树 10 / \ 6 14 / \ 4 8则打印出两条路径:10, 14 和10, 6, 8。#includ原创 2013-04-19 08:55:47 · 1522 阅读 · 1 评论 -
【转】倒排文件索引(Inverted File Index)的建立
建立索引目前主流的索引技术有三种:倒排文件、后缀数组和签名。后缀数组的方法虽然快,但是其维护困难,代价相当高,不适合做引擎的索引。签名是一种很好的索引方式,但倒排文件的速度和性能已经超过了签名。倒排文件是一种在各大搜索引擎中被主要使用的索引的方式,并且它也是搜索引擎中一个核心的技术。5.2.1 倒排文件索引(Inverted File Index)的建立倒排索引文件是一种转载 2013-01-04 15:00:30 · 2560 阅读 · 0 评论 -
【学习笔记】hash表和hash函数
hash表是一种非常强大的数据结构,应用也非常广泛,在网上可以找到很多介绍的资料,这里不进行赘述。其实hash表的原理很简单,随便找一篇相关的介绍都能看懂,但是如果要应用的话,有一个很重要而且不得不考虑的问题——怎么选择或设计hash函数,hash函数的好坏直接影响了数据存取的效率。网上很多关于hash表介绍的文章都只是介绍了hash表的原理,即便是举的例子也只是用最简单的“直接定址法”,例如原创 2013-03-04 21:11:15 · 1393 阅读 · 0 评论 -
【学习笔记】Bit-map数据结构
实际上Bit-map就是一个hash表,只是该hash表的每一个单元为一个bit,也就是该hash表示一个bit数组,每一条数据(Value)通过hash函数映射到bit数组中的某一位。正因为每一条数据只需一个bit来记录,所以该数据结构的空间效率是非常高的。我的总结:1、Bit-map不保存原始数据,只标记该数据是否出现过;2、关于Bit-map计数:由于Bit-map每一个原创 2013-03-12 22:26:38 · 1688 阅读 · 0 评论 -
【学习笔记】Bloom Filter(布隆过滤器)
布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。Bloom filter的原理可以参考:维基百科【1】、论文【2】、网络文章【3】,还有文章【4】中有简单的程序实现。我的总结:1、Bl原创 2013-03-12 22:28:48 · 1801 阅读 · 0 评论 -
【算法题】数组中找到两个数,使其和等于某个数
From : http://leetcode.com/onlinejudgeTwo SumGiven an array of integers, find two numbers such that they add up to a specific target number.The function twoSum should return indices of the two原创 2013-04-08 21:02:29 · 5460 阅读 · 1 评论 -
【算法题】求数组中子数组的最大乘积
《数学之美》2.13的一道题:给定一个长度为N的整数数组,只允许用乘法,不能用除法,计算任意(N-1)个数的组合乘积中最大的一组,并写出算法的时间复杂度。 方法一: 最容易想到的办法是:把所有可能的(N-1)个数的组合找出来,分别计算它们的乘积,并比较大小。由于总共有N个(N-1)个数的组合,总的时间复杂度为O(N*N),但显然这不是最好的解法。 方法二:原创 2013-04-11 11:42:03 · 2333 阅读 · 0 评论 -
【算法题】二元查找树转换成排序的双向链表
网上看到的笔试题一道:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整指针的指向,如: 10 / \ 6 14 / \ / \ 4 8 12 16 转换原创 2013-04-17 13:39:29 · 1995 阅读 · 0 评论 -
【算法题】写一个递归版本的链表转置程序
链表的转置是一个很常见、很基础的数据结构题了,非递归的算法很简单,用三个临时指针在链表上循环一遍即可,不再赘述。递归算法也是比较简单的,但是如果思路不清晰估计也难一时半会儿写出来把。下面是递归版本的链表转置程序:#include using namespace std;typedef struct Node{ Node(int v, Node *ptr=NULL) : data原创 2013-04-27 13:46:42 · 2525 阅读 · 0 评论 -
Trie原理、扩展及Python实现
关于Trie树的原理这里不做介绍,网上相关的资料非常多,可以参考July的文章:http://blog.csdn.net/v_july_v/article/details/6897097。不过Trie确实是非常的强大,原理不复杂,使用起来也非常的方便。代码实现其实也不难,如果用C++实现的话需要自己定义数据结构(结构体)来构建树,这里我介绍怎样用Python实现,用Python实现起来尤为的方便,原创 2013-08-06 20:01:03 · 7860 阅读 · 1 评论