- 博客(47)
- 收藏
- 关注
原创 利用Trie树求多个字符串编辑距离的进一步优化
1.引言 题目的意思应该是:在一个给定的字典中,求与给定的字符串的编辑距离不大于2的所有的单词。原先写过两片关于此问题的文章,那两片篇章文章给出两种解决思路:其一是暴力求解法,这种方法最容易想到。就是将词典中的词一一与给定的字符串计算编辑距离,不大于2的输出,大于2的舍弃,这种方法思路简单但是很费时间。其二根据词典中这些词之间的编辑距离建立一个以单词为节点的Trie树,遍历的
2014-06-27 22:14:37 1970
原创 利用Trie树求多个字符串的最小编辑距离
1.编辑距离、拼写检查与度量空间:一个有趣的数据结构 本小节内容转自:转自http://www.matrix67.com/blog/archives/333 Matrix67原创 除了字符串匹配、查找回文串、查找重复子串等经典问题以外,日常生活中我们还会遇到其它一些怪异的字符串问题。比如,有时我们需要知道给定的两个字符串 “有多像”,换句话说两个字符串的
2014-06-24 16:48:30 4681
原创 基于Trie树的多模匹配算法实现和及优化
1.多模匹配算法简介 多模式匹配在这里指的是在"一个字符串"中寻找"多个模式字符字串"的问题。一般来说,给出一个长字串和很多短模式字符串,如何最快最省的求出哪些模式字符串出现在长字串中是我们需要思考的(因为基本上大多数情况下是在给定的长字串中出现我们给的模式字串的其中几个)该算法的应用领域有很多,例如: (1)关键字过滤 (2)入侵检测 (3)病毒检
2014-06-20 20:47:48 8217
转载 一些代码优化的方法
用谈到优化,很多人都会直接想到汇编。难道优化只能在汇编层次吗?当然不是,C++层次一样可以作代码优化,其中有些常常是意想不到的。在C++层次进行优化,比在汇编层次优化具有更好的移植性,应该是优化中的首选做法。1 确定浮点型变量和表达式是 float 型为了让编译器产生更好的代码(比如说产生3DNow! 或SSE指令的代码),必须确定浮点型变量和表达式是 float 型的。要
2014-06-20 09:55:28 680
转载 Linux 环境下段错误的产生原因及调试方法小结
原文地址:http://www.cnblogs.com/panfeng412/archive/2011/11/06/2237857.html最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多、花费时间最长的问题就是著名的“段错误”(Segmentation Fault)。借此机会系统学习了一下,这里对Linux环
2014-06-16 16:47:16 672
原创 Trie树实现词典查找算法
1.Trie树简介Trie树又称单词查找树,是一是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。
2014-06-13 19:35:47 1939
转载 Python的函数参数传递:传值?引用?
原文地址:http://blog.csdn.net/winterttr/article/details/2590741 我想,这个标题或许是很多初学者的问题。尤其是像我这样的对C/C++比较熟悉,刚刚进入python殿堂的朋友们。C/C++的函数参数的传递方式根深蒂固的影响这我们的思维--引用?传值?究竟是那种呢。 呵呵,语言的特性决定了是使用的方法,那么,现在我们来探究
2014-06-12 22:23:50 590
转载 C函数调用过程
这几天在看GCC Inline Assembly,在C代码中通过asm或__asm__嵌入一些汇编代码,如进行系统调用,使用寄存器以提高性能能,需要对函数调用过程中的堆栈帧(Stack Frame)、CPU寄存器、GCC inlie assembly等了如指掌。现在看看函数调用过程吧。1. Linux 进程虚拟地址空间以32位操作系统为例,下面是Linux进程地址空间布局:
2014-06-12 18:46:05 618
转载 C++文件读写总结
在C++中如何实现文件的读写?作者: infobillows 发表日期: 2007-04-03 21:33 点击数: 465一、ASCII 输出为了使用下面的方法, 你必须包含头文件(译者注:在标准C++中,已经使用取代,所有的C++标准头文件都是无后缀的。)。这是 的一个扩展集, 提供有缓冲的文件输入输出操作. 事实上, 已经被包含了, 所以你不必包含所有这两个文件,
2014-06-12 11:13:41 634
原创 2014-6-12任务完成情况
(1)继续搞清楚,在函数调用时,c++与python各自做了什么?(2)搞清楚为什么传值与传引用的递归深度是一致的;(3)随机生成一个词典,10w左右的词,每个词是10~30的英文字母串,实现词典查找算法,即给定任意一个字符串,去看在词典中是否存在
2014-06-12 09:38:28 457
转载 Segmentation fault 问题浅谈
今天调试程序时遇到了一个问题,当我用GDB调试程序时出现了Segmentation fault,以前没有遇到过,最后查看资料,有点明白了。 出现了Segmentation fault,基本上的原因是,非法的内存访问。例如数组的越界,在循环操作时循环变量的控制问题,也有字符串拷贝时长度溢出,指针指向了非法的空间,还有就是申明一个指针,但却没有对其初始化,就直接引用,或者没有开辟内存空间
2014-06-11 23:56:06 855
原创 2014-6-11任务完成情况
(1)实现传值版与传引用版的递归函数,观察递归深度;(2)将find函数改造为python版;(3)c++ primer阅读一章
2014-06-11 17:21:37 452
转载 C++ 堆和栈的比较
基础知识: 堆 栈是一种简单的数据结构,是一种只允许在其一端进行插入或删除的线性表。允许插入或删除操作的一端称为栈顶,另一端称为栈底,对堆栈的插入和删除操作被称 为入栈和出栈。有一组CPU指令可以实现对进程的内存实现堆栈访问。其中,POP指令实现出栈操作,PUSH指令实现入栈操作。CPU的ESP寄存器(堆 栈指针,Stack Pointer)存放当前线程的栈顶指针,EBP寄存器(基址指针,Ba
2014-06-11 17:19:13 573
原创 KMP算法(Python实现)
BF算法的时间复杂度:在最坏的情况下,BF算法要将目标串的每一个字符同模式串进行比较一遍,假定目标串长度为m,模式串长度为n,总的时间复杂度为O(m*n)。而对于KMP算法,进行比较的时间复杂度为O(m+n),求next数组的时间复杂度为n,总体时间复杂度为O(m+2n)。
2014-06-11 16:33:15 7543 2
原创 2014-6-6任务完成情况
(1)实现字符串的find函数;(2)研究动态规划的证明方法(可以前面几天的问题做实例);(3)c++ primer,继续向前读
2014-06-06 20:21:52 463
原创 KMP算法浅析
1.BF算法 BF算法是普通的模式匹配算法,BF算法的思想就是将目标串s的第一个字符与模式串t的第一个字符进行匹配,若想等,则比较s的第二个字符和t的第二个字符;若不想等,则比较s的第二个字符和t的第一个字符。如此一直比较下去,直到得出最后的匹配结果。 在比较过程中每次匹配失败都要将标记s串当前比较位置的指针i回溯到最初开始比较的位置,然后后移一位,而目标串则要第一个字符开
2014-06-06 16:01:10 1151
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人