- 博客(30)
- 收藏
- 关注
转载 编辑距离(levenshtein)算法
1)定义编辑距离(Minimum Edit Distance,MED),又称Levenshtein距离,是指两个字符串之间,由一个转成另一个所需要的最少编辑操作次数。允许的编辑操作包括:将一个字符替换成另一个字符(substitution,s),插入一个字符(insert,i)或者删除一个字符(delete,d),如下图所示:在大学算法设计相关课程上,想必大家都已经学习过使用动态规划算
2014-02-14 16:29:55
4797
原创 Linux 下char转换为wchar_t
LInux下使用mbstowcs函数可以将char转化为wchar_t函数含义:convert a multibyte string to a wide char string说明: The behaviour of mbstowcs depends on the LC_CTYPE category of the current locale返回值: The mbst
2014-02-11 13:52:27
9927
转载 使用gdb调试运行时的程序小技巧
原文链接地址:使用gdb调试运行时的程序小技巧下面介绍我调试时经常遇到的三种问题,如果大家也有类似的问题交流一下解决方法:情景1:在不中止程序服务的情况下,怎么调试正在运行时的程序情景2:需要同时看几个变量的值或者批量查看多个core文件的堆栈信息怎么办情景3:遇到需要查看、队列、链表、树、堆等数据结构里的变量怎么办1. 情景1:在不中止程序服务的情况下,怎么调试正在运
2012-12-07 09:58:13
1073
转载 kernel对于SO_REUSEADDR的处理——避免滥用引发Bug
看到很好就转载了:本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。作者:gfree.wind@gmail.com博客:linuxfocus.blog.chinaunix.net 今天有一个客户问题,问题的现象的大致情形如下:有两个
2012-10-01 09:17:11
1164
原创 unix/linux下线程私有数据实现原理及使用方法
复习以前做过的爬虫系统,在做防止死链时用到了线程的私有数据,那时候仅仅是会用,至于底层是怎么实现的以及为什么一个键可以对应不同线程的指还一知半解,今天又详细的看了下相关的资料,以做总结。 在维护每个线程的私有数据的时候,我们可能会想到分配一个保存线程数据的数组,用线程的ID作为数组的索引来实现访问,但是有一个问题是系统生成的线程ID不能保证是一个小而连续的整数,并且用数组实现的时候由
2012-08-23 20:30:00
9255
原创 STL hash_map 底层初探
hash_map 底层是采用hashtable实现的,在讲解hash_map之前,先看一下hash_table的原理。(1)hashtable数据结构hash table表格内的元素称为桶(bucket),而由桶所链接的元素称为节点(node),其中存入桶元素的容器为stl本身很重要的一种序列式容器——vector容器。之所以选择vector为存放桶元素的基础容器,主要是因为vector容
2012-08-17 14:48:38
5740
原创 函数栈详解以及堆区与栈区的区别
在讲解函数栈之前,先看下内存空间布局:(关于内存布局更多介绍:http://blog.youkuaiyun.com/caigen1988/article/details/7737153)用上面布局来看,栈空间在使用的时候应该是从高地址到底地址扩充。堆空间在使用的时候是从地地址到高地址扩充。栈用来传递参数,存储返回地址信息,保存寄存器等。 为单个函数(过程)分配的那部分栈称为栈帧。每个函
2012-08-14 11:07:28
5787
原创 HTTP协议杂乱记录
1. HTTP协议定义了客户端(浏览器,爬虫等)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传给客户端。它是万维网上能够可靠地交换文件(包括文本,声音,图像等各种多媒体文件)的重要基础。HTTP使用了面向连接的TCP作为运输层协议。保证了数据的可靠传输。但是HTTP协议本身是无连接的,这就是说虽然HTTP使用了TCP连接,但通信双方在交换HTTP报文之前不需要建立连接。2.
2012-08-13 08:23:58
967
原创 归并排序&&数组中逆序对问题
题目:在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。例如在数组{7,5,6,4}中,一共存在5个逆序对,分别是{7,5}、{7,6}、{7,4}、{5,4}、{6,4} 解析:我们可以利用归并排序的过程中统计出逆序对的个数,算法时间复杂度为O(nlogn) 归并排序实现代码:#include usi
2012-08-09 15:30:16
728
原创 利用位图方法求字符串的组合(类似于位运算模拟加法)
题目:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。 解析:我们可以通过位数组来实现打印所有组合,这类似于用字符串模拟加法操作一样。不过用字符串模拟加法操作是逢10进1,用位模拟是逢2进1。 以abc为例:初始化位bitset 模拟每次加1它的变化为为 000 ---001 ---010 -- 011 ---
2012-08-02 10:13:45
1652
转载 MurmurHash PK CityHash
转自:http://blog.youkuaiyun.com/yfkiss/article/details/73373821. 概述murmurhash是 Austin Appleby于2008年创立的一种非加密hash算法,适用于基于hash进行查找的场景。murmurhash最新版本是MurMurHash3,支持32位、64位及128位值的产生。murmurhash标准使用c++实现,但是也
2012-07-28 18:51:02
1918
原创 用模拟加法打印1到n最大的n位数
1. 题目注意的陷阱:没有告诉n的大小。所以要考虑大数问题2.还要注意的问题,就是字符串ASCII 与整数类型的转换! 两个正数的加法运算与下面代码类似,只需要稍微修改即可// 打印从1到最的的n位数#include #include #includeusing std::string; using std::cout; using std:
2012-07-24 10:26:17
2218
原创 二进制问题解题思路
注:部分内容直接来自:MoreWindows博客:http://blog.youkuaiyun.com/MoreWindows,另外还有根据《剑指offer》添加的内容一:基础知识基本的位操作符有与、或、异或、取反、左移、右移这6种,它们的运算规则如下所示:符号 描述 运算规则 by MoreWind
2012-07-22 10:50:14
3338
转载 全排列问题
全排列在笔试面试中很热门,因为它难度适中,既可以考察递归实现,又能进一步考察非递归的实现,便于区分出考生的水平。所以在百度和迅雷的校园招聘以及程序员和软件设计师的考试中都考到了,因此本文对全排列作下总结帮助大家更好的学习和理解。对本文有任何补充之处,欢迎大家指出。首先来看看题目是如何要求的(百度迅雷校招笔试题)。用C++写一个函数, 如 Foo(const char *str), 打印出
2012-07-18 17:37:19
13107
1
原创 进程、线程、文件共享--操作系统概念--unix环境高级编程
进程: 操作系统通过进程控制块(PCB)表示进程,每一个进程均有一个PCB,在创建进程时,建立PCB,伴随进程运行的全过程,直到进程撤消而撤消。通常一个PCB中包含以下几项:进程标识符程序计数器:该计数器指明了该进程要执行的下一条指令的地址CPU寄存器:包括累加器、变址寄存器、栈指针、通用寄存器、以及条件信息等。在中断发生时必须要保存这些状态信息,便于后来进程继续正确执
2012-07-11 18:36:21
2737
原创 段错误与栈溢出
“段”(Segment)是指二进制文件内的区域,所有某种特定类型信息被保存在这里。可以用size程序得到可执行文件中各个段的大小。C程序布局中分为代码段、初始化数据段、非初始化数据段、栈段和堆段。栈段空间的大小和操作系统有关。在Linux中,由系统命令ulimit指定,例如ulimit -a显示当前栈大小,而ulimit -s 32768将把栈大小指定为32MB。但在Windows中,栈大
2012-07-11 17:33:25
3103
原创 C/C++程序的内存布局---来自unix环境高级编程
1,正文段。这是由C P U执行的机器指令部分。通常,正文段是可共享的,所以即使执行的程序(如文本编辑程序、C编译程序、s h e l l等)在存储器中也只需有一个副本,另外,正文段常常是只读的,以防止程序由于意外事故而修改其自身的指令。 2,初始化数据段(data段).通常将此段称为数据段,它包含了程序中需赋初值的变量。例如, C程序中任何函数之外的说明:int maxcount = 99
2012-07-11 16:52:51
1579
原创 虚函数机制理解
再次翻阅深度探索C++对象模型,算是对虚函数机制又多了一层理解了。以例子说明class ZooAnimal { public: ZooAnimal(); virtual ~ZooAnimal(); virtual void animate(); virtual void draw(); //
2012-07-05 10:46:29
773
原创 倒排索引构建算法SPIMI(已实现,修订版)
信息检索导论中提到的倒排索引构建方法: 内存式单遍扫描索引构建方法(SPIMI : Single-pass in-memeory indexing): 思想:将一个文档集分割成几个大小相等的部分,参考标准就是分成的每个块可以一次性的装入内存 将处理每个块产生的词典写入磁盘,对于下一个块则重
2012-07-04 15:05:42
15353
1
转载 一致性哈希算法(用于解决服务器均衡问题)
tencent2012 笔试题附加题 问题描述: 例如手机朋友网有n个服务器,为了方便用户的访问会在服务器上缓存数据,因此用户每次访问的时候最好能保持同一台服务器。已有的做法是根据ServerIPIndex[QQNUM%n]得到请求的服务器,这种方法很方便将用户分到不同的服务器上去。但是如果一台服务器死掉了,那么n就变为了n-1,那么ServerIPIndex[QQNUM%n]与S
2012-07-02 15:35:11
29615
原创 随机数生成问题分类以及题目汇总
最近在看关于随机数的生成问题。计算机程序设计艺术(第二卷第三章)以及编程珠玑(第12章)上都有讨论。就结合这两本书总结下。这里主要讲三个算法分别是1.选择抽样算法2.水库抽样算法3.洗牌算法1. 选择抽样算法:问题描述:从含有N个记录的一个文件中等概率的随机选取n个记录。思路:如第一个记录以n/N的概率被选中,果我们已经在前t个记录中选择了m个项目,则对第t+1个记
2012-06-28 19:36:50
2170
原创 链表问题及解题思路
常见问题如下:1.求链表中倒数第K个节点2.判断链表是否存在环3.判断存在环的链表中环的长度4.找到存在环的链表中环的入口5.判断两个链表是否相交6.如果两个链表相交,返回相交的第一个节点7.链表指针反转8. 求无环链表的中间结点下面将对这些问题一一解答。 问题1:求链表中倒数第K个节点解题思路:定义两个指针p1,p2,开始都指向链表头位
2012-06-25 16:31:00
1122
1
原创 深度探索C++对象模型之:理解虚函数机制
说明:关于虚函数的基本语法知识就不再叙述,直接讲其内部原理。(1)单继承下内存布局举例:类Point:class Point { public: virtual ~Point(); virtual Point& mult( float ) = 0; float x() const { return _x; } //非虚函数,不作存储 v
2012-05-16 16:33:57
872
原创 深度探索C++对象模型之第三章:data语义学中对象布局
说明: 看到 http://www.roading.org/?p=545 已经整理的很好了,所以前部分大部分引用原文,感谢原作者@~@,后半部分主要引用自书本类对象占用的内存空间可能比我们想象的要大,有如下原因:(1) 由编译器自动加上额外的data memebers,用以支持某些语言特性(主要是各种virtual特性)(2)因为边界调整(alignment)的需要(详细请看:内存对
2012-05-15 16:36:21
765
原创 深度探索C++对象模型系列笔记之第二章:构造函数语义学
一.默认构造函数通常很多C++程序员存在两种误解:没有定义默认构造函数的类都会被编译器生成一个默认构造函数。 编译器生成的默认构造函数会明确初始化类中每一个数据成员。 比如我们下面一个例子: class Foo { public: int val; Foo *pnext; };
2012-05-10 10:04:42
677
原创 深度探索C++对象模型系列笔记之第一章:关于对象
前言:C++在布局以及存取时间上的额外负担是由Virtual引起,包括:(1)Virtual function 机制 用以支持一个有效率的执行期绑定"runtime bingding"(2)Virtual base class 用以实现“多次出现在继承体系中的baseclass,有一个单一而被共享的实体”1. 比较常用的一个C++对象模型一种C++的设计模式如下
2012-05-09 16:31:07
932
原创 笔试面试中C/C++重要知识点整理(不定期更新)
1. C和C++语言中的优先级规则C语言中语言声明的优先级规则如下(以后分析的基础):A 声明从它的第一个名字开始读取,然后按照优先级顺序依次读取B 优先级从高到低依次是 B. 1 声明中被括号括起来的那部分 B. 2 后缀操作符: 括号()表示这是一个函数
2012-05-03 21:38:36
3660
原创 堆与优先队列详解
说明: 1 . 根据看STL源码剖析与张铭的数据结构而总结。 2. 本人比较懒,图有的是自己画的有的是来自上面资源,算法实现直接copy的张铭数据结构中代码 堆是一个满足如下性质的完全二叉树:树中任意一个非叶结点的关键码均不大于(或者不小于)其左右孩子(若存在)结点的关键码。堆和二叉搜索树的区别是堆不像二叉搜索树一样实现了关键码的完全排序(中序周游二叉搜索
2012-05-01 17:14:58
2093
原创 红黑树插入操作超详解
说明:1. 下述图片多参照网上资源(July红黑树)或者电子书资源(STL源码剖析)等 2. 个人感觉STL中思路以及实现方式比其他版本都易懂,建议大家好好琢磨参考: 1.STL源码剖析 2. http://www.cnblogs.com/abatei/archive/2008/12/17/1356565.html
2012-04-30 18:35:08
5592
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人