
算法学习
文章平均质量分 69
时空霹雳
这个作者很懒,什么都没留下…
展开
-
为什么快速排序比堆排序要快?
今天作算法排序实验,发现相同的数据规模,快速排序比堆排序的效率高很多,并且随着数据规模的扩大,二者的差距不断扩大,快速排序的优势越来越明显。快速排序的时间复杂度近似线性增长,堆排序则要大很多。究其原因,应该有以下几个方面: 在堆排序(小根堆)的时候,每次总是将最小的元素移除,然后将最后的元素放到堆顶,再让其自我调整。这样一来,有很多比较将是被浪费的,因为被拿到堆顶的那个元素几原创 2014-05-30 17:59:16 · 6168 阅读 · 2 评论 -
Python实现求两个字符串的最长公共子序列的算法
前几天用C++实现了求两个字符串的最长公共子序列的算法原创 2014-06-09 17:53:58 · 4159 阅读 · 1 评论 -
求两个字符串的最短编辑距离
1.理解最小编辑距离的概念; 编辑距离是一种字符串之间相似程度的计算方法。按照Damerau给出的定义,即两个字符串之间的编辑距离等于使一个字符串变成另外一个字符串而进行如下操作的最少次数。用edit来表示编辑距离。共四种操作,分别是:a插入,b删除,c替换,d相邻字符交换位置。 比如:edit("happy", "hpapy") == 1(需要交换两个相邻字符"a"和"p"的原创 2014-06-05 18:27:19 · 4452 阅读 · 0 评论 -
Trie树求多个字符串最短编辑距离的空间优化
1.前言 为了充分利用CPU的高速缓存机制,原创 2014-06-24 17:05:38 · 1735 阅读 · 0 评论 -
基于Trie树的多模匹配算法实现和及优化
1.多模匹配算法简介 多模式匹配在这里指的是在"一个字符串"中寻找"多个模式字符字串"的问题。一般来说,给出一个长字串和很多短模式字符串,如何最快最省的求出哪些模式字符串出现在长字串中是我们需要思考的(因为基本上大多数情况下是在给定的长字串中出现我们给的模式字串的其中几个)该算法的应用领域有很多,例如: (1)关键字过滤 (2)入侵检测 (3)病毒检原创 2014-06-20 20:47:48 · 8440 阅读 · 0 评论 -
用二叉树实现Trie树
关于Trie树的简介,有点这里就不再罗嗦了,清原创 2014-06-16 23:48:47 · 1418 阅读 · 0 评论 -
求两个字符串最长公共子序列的算法优化(C++实现)
前几天写的的一篇文章原创 2014-06-10 22:47:48 · 5492 阅读 · 0 评论 -
Trie树实现多模匹配算法的进一步优化
之前写过一篇关于Trie树实现多模匹配算法的文章原创 2014-06-20 23:45:53 · 2186 阅读 · 0 评论 -
将string转换成char*
原文地址http://blog.sina.com.cn/s/blog_786ce14d01014lpr.html转载 2014-07-16 21:13:06 · 546 阅读 · 0 评论 -
一些代码优化的方法
用谈到优化,很多人都会直接想到汇编。难道优化只能在汇编层次吗?当然不是,C++层次一样可以作代码优化,其中有些常常是意想不到的。在C++层次进行优化,比在汇编层次优化具有更好的移植性,应该是优化中的首选做法。1 确定浮点型变量和表达式是 float 型为了让编译器产生更好的代码(比如说产生3DNow! 或SSE指令的代码),必须确定浮点型变量和表达式是 float 型的。要转载 2014-06-20 09:55:28 · 697 阅读 · 0 评论 -
Python实现求两个字符串的最短编辑距离
前几天用C++实现了秋来你哥哥原创 2014-06-10 21:31:00 · 2901 阅读 · 1 评论 -
Trie树实现词典查找算法
1.Trie树简介Trie树又称单词查找树,是一是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。原创 2014-06-13 19:35:47 · 2002 阅读 · 0 评论 -
用调整法和插入法建堆的Python实现,不同建堆方式对堆排序性能的影响
插入法建堆是将数组1中的元素逐个插入到数组2中建立一个堆。每插入一个关键字就与其父节点的关键字比较大小,如果父节点的关键字较小则交换,然后依次自低地向上调整使之符合大(小)顶堆的特性。插入法建堆与调整法建堆可能结果不一样。调整法建堆是自底向上依次调整,一棵子树中最大的节点值与根节点交换,最小的那个节点位置在本次调整中不作改变。而插入法建堆结果与插入的顺序和值大小有关。以大顶堆为例,原创 2014-05-26 21:55:38 · 1770 阅读 · 0 评论 -
C语言文件操作函数小结
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl转载 2015-04-23 11:38:41 · 1641 阅读 · 0 评论 -
md/mdd/ml/mld/mt/mtd
转自:http://www.cnblogs.com/whiteyun/archive/2011/07/07/2099912.html1、VC编译选项多线程(/MT)多线程调试(/MTd)多线程 DLL (/MD)多线程调试 DLL (/MDd) 2、C 运行时库转载 2015-04-21 10:07:59 · 751 阅读 · 0 评论 -
GBK编码详细解析(附GBK码位分布图)
1.GBK码位分布图2.GBK码位说明 GBK 亦采用双字节表示,总体编码范围为 8140-FEFE,首字节在 81-FE 之间,尾字节在 40-FE 之间,剔除 xx7F 一条线。总计 23940 个码位,共收入 21886 个汉字和图形符号,其中汉字(包括部首和构件)21003 个,图形符号 883 个。全部编码分为三大部分:原创 2015-07-07 17:30:35 · 8385 阅读 · 1 评论 -
铺设地板问题--动态规划
有一条长度为N*1米的路,需要铺设地板,地板的规格为1*1米,1*2米,1*3米,各种地板的数量不限。各种规格的地板可以随意组合,试问:一共有多少种铺法?Python代码如下:def get_N(N): list_1 = [0] * N list_2 = [0] * N list_3 = [0] * N list_1[0] = 1 list_2[0] = 0 list_3原创 2018-01-08 09:43:16 · 1446 阅读 · 0 评论 -
Python的函数参数传递:传值?引用?
原文地址:http://blog.youkuaiyun.com/winterttr/article/details/2590741 我想,这个标题或许是很多初学者的问题。尤其是像我这样的对C/C++比较熟悉,刚刚进入python殿堂的朋友们。C/C++的函数参数的传递方式根深蒂固的影响这我们的思维--引用?传值?究竟是那种呢。 呵呵,语言的特性决定了是使用的方法,那么,现在我们来探究转载 2014-06-12 22:23:50 · 619 阅读 · 0 评论 -
动态规划思想的几个问题
1.最优子结构的概念,并从反面举例“哪些case不具备最优子结构”; 动态规划只能应用于有最优子结构的问题。最优子结构的意思是局部最优解能决定全局最优解(对有些问题这个要求并不能完全满足,故有时需要引入一定的近似)。简单地说,问题能够分解成子问题来解决。 最优子结构性质。如果问题的最优解所包含的子问题的解也是最优的,我们就称该问题具有最优子结构性质(即满足最优化原创 2014-06-04 22:03:04 · 2015 阅读 · 0 评论 -
求两字符串最长公共子序列——动态规划
1.“两字符串最长公共子序列”的概念; 一个字符串的子序列,是指从该字符串中去掉任意多个字符后剩下的字符在不改变顺序的情况下组成的新字符串。这个子序列是可以不连续的。最长公共子序列,是指多个字符串可具有的长度最大的公共的子序列。举个例子,如:有两条随机序列,如 1 3 4 5 5 and 2 4 5 5 7 6,则它们的最长公共子序列便是:4 5 5。注意最长公共子串和最长公共子原创 2014-06-03 21:30:00 · 6940 阅读 · 0 评论 -
KMP算法浅析
1.BF算法 BF算法是普通的模式匹配算法,BF算法的思想就是将目标串s的第一个字符与模式串t的第一个字符进行匹配,若想等,则比较s的第二个字符和t的第二个字符;若不想等,则比较s的第二个字符和t的第一个字符。如此一直比较下去,直到得出最后的匹配结果。 在比较过程中每次匹配失败都要将标记s串当前比较位置的指针i回溯到最初开始比较的位置,然后后移一位,而目标串则要第一个字符开原创 2014-06-06 16:01:10 · 1181 阅读 · 0 评论 -
不同的参数传递方式对递归函数递归深度的影响
传值版与传引用版的递归函数,观察递归深度原创 2014-06-11 18:02:57 · 3168 阅读 · 0 评论 -
C函数调用过程
这几天在看GCC Inline Assembly,在C代码中通过asm或__asm__嵌入一些汇编代码,如进行系统调用,使用寄存器以提高性能能,需要对函数调用过程中的堆栈帧(Stack Frame)、CPU寄存器、GCC inlie assembly等了如指掌。现在看看函数调用过程吧。1. Linux 进程虚拟地址空间以32位操作系统为例,下面是Linux进程地址空间布局:转载 2014-06-12 18:46:05 · 640 阅读 · 0 评论 -
词典查找算法
这个程序的功能过呢原创 2014-06-12 19:19:16 · 3652 阅读 · 0 评论 -
KMP算法(Python实现)
BF算法的时间复杂度:在最坏的情况下,BF算法要将目标串的每一个字符同模式串进行比较一遍,假定目标串长度为m,模式串长度为n,总的时间复杂度为O(m*n)。而对于KMP算法,进行比较的时间复杂度为O(m+n),求next数组的时间复杂度为n,总体时间复杂度为O(m+2n)。原创 2014-06-11 16:33:15 · 7590 阅读 · 2 评论 -
快速排序中枢轴元素从首、尾、中间三元素取中间值函数的探究
这几天作快速排序时,原创 2014-06-03 09:43:14 · 6121 阅读 · 1 评论 -
C++ 堆和栈的比较
基础知识: 堆 栈是一种简单的数据结构,是一种只允许在其一端进行插入或删除的线性表。允许插入或删除操作的一端称为栈顶,另一端称为栈底,对堆栈的插入和删除操作被称 为入栈和出栈。有一组CPU指令可以实现对进程的内存实现堆栈访问。其中,POP指令实现出栈操作,PUSH指令实现入栈操作。CPU的ESP寄存器(堆 栈指针,Stack Pointer)存放当前线程的栈顶指针,EBP寄存器(基址指针,Ba转载 2014-06-11 17:19:13 · 604 阅读 · 0 评论 -
用于不相交集合的数据操作——并查集
假定有一组词汇,构成一个集合原创 2014-06-28 22:38:56 · 767 阅读 · 0 评论 -
利用Trie树求多个字符串编辑距离的进一步优化
1.引言 题目的意思应该是:在一个给定的字典中,求与给定的字符串的编辑距离不大于2的所有的单词。原先写过两片关于此问题的文章,那两片篇章文章给出两种解决思路:其一是暴力求解法,这种方法最容易想到。就是将词典中的词一一与给定的字符串计算编辑距离,不大于2的输出,大于2的舍弃,这种方法思路简单但是很费时间。其二根据词典中这些词之间的编辑距离建立一个以单词为节点的Trie树,遍历的原创 2014-06-27 22:14:37 · 2079 阅读 · 0 评论 -
构造指定长度的英文词典
说明:构造变长度的英语单词词典单词随机产生,长度在原创 2014-06-24 17:11:49 · 732 阅读 · 0 评论 -
利用Trie树求多个字符串的最小编辑距离
1.编辑距离、拼写检查与度量空间:一个有趣的数据结构 本小节内容转自:转自http://www.matrix67.com/blog/archives/333 Matrix67原创 除了字符串匹配、查找回文串、查找重复子串等经典问题以外,日常生活中我们还会遇到其它一些怪异的字符串问题。比如,有时我们需要知道给定的两个字符串 “有多像”,换句话说两个字符串的原创 2014-06-24 16:48:30 · 4770 阅读 · 0 评论 -
C++文件读写总结
在C++中如何实现文件的读写?作者: infobillows 发表日期: 2007-04-03 21:33 点击数: 465一、ASCII 输出为了使用下面的方法, 你必须包含头文件(译者注:在标准C++中,已经使用取代,所有的C++标准头文件都是无后缀的。)。这是 的一个扩展集, 提供有缓冲的文件输入输出操作. 事实上, 已经被包含了, 所以你不必包含所有这两个文件,转载 2014-06-12 11:13:41 · 654 阅读 · 0 评论 -
快速排序过程的优化
快速排序的优化原创 2014-05-30 15:23:27 · 870 阅读 · 0 评论 -
数据规模对数组的读取效率的影响——顺序读取和随机读取
这篇文章要说明的是虽然数组可以做到随机读取,一般情况下原创 2014-05-30 17:32:51 · 2412 阅读 · 0 评论 -
调整法建堆过程的优化
#include #include #include #include #include using namespace std;#define MAX 10000000void readNum(int a[]){ string filename; ifstream infile("data_1000w.txt", ios::in); string textline =原创 2014-05-30 17:42:37 · 1146 阅读 · 0 评论 -
快速排序过程的优化(续)
(1)在对数组元素进行排序前,选择一种随机化算法堆数组的元素进行随机化处理。尽量选择能够在线性时间复杂度上对数组进行随机化的方法。这样就可以在虽大程度上避免排序算法的性能出现最差的情况。(2)选择枢轴元素的时候采用随机的方法。(3)选择枢轴的时候采用首、尾、中三数取中的方法。(4)当需要排序的序列大小降低到一定程度的时候,使用其他简单排序的算法,以避免不断的递归创建爱女函数栈等开销。原创 2014-05-31 19:10:57 · 1061 阅读 · 0 评论 -
逐段输出多项式的计算结果
给定一个简单的四则运算的多项式,如果把多项式看作一个字符串,试编写程序,自左向右依次输出每个子字符串所对应的多项式的计算结果。例如给定多项式为:1+23*2+3*3,程序输出结果为:1 3 24 47 50 56key_list = [str(i) for i in range(1, 10)]def func(str_in): if len(str_in) == 0:原创 2018-01-09 22:16:35 · 373 阅读 · 0 评论