随笔分类 - Algo
算法相关
摘要:找一个数据流中丢失的一个数字。该数据流中一直是0--------100000000(比较大)的数,求被丢失的数字。@modified昨天很同学讨论的时候,题目需要加一个限制性的条件——N为四的倍数,即通过三个数,找出丢失的数字。#include <stdio.h>#include <stdlib.h>#define max_size 10000void swap(int *x,int *y){ int tmp; tmp = *x; *x = *y; *y = tmp;}int main(int argc,char *argv[]){ int array[max_size
阅读全文
摘要:分治策略设一组数R={r1,r2,r3....rn}为要进行全排列的n个元素,Ri=R-{ri}。将集合X中元素的全排列记为perm(X)。(ri)prem(X)表示在全排列perm(X)的每一个排列前面前面加上前缀ri得到的排列R的全排列可以归纳为: 当n=1时,perm(R)=(r),其中r是集合R中唯一元素。 当n>1时,perm(R)由(r1)perm(R1),(r2)perm(R2),....,(rn)perm(Rn) 构成。由归纳可已看出本题可以用递归分治的算法将问题分成一个一个得小模块进行求解。EG: R={1,2,3,4}ps:这里圆括号里面的顺序是不能变动的。有上数据可
阅读全文
摘要:依照KMP实现的算法,附带测试用例。#include <algorithm>#include<iostream>#include<iterator>#include <string>#include <vector>#include <cassert>#include <cstring>using namespace std;/**计算next***/void kmp_next(char *pattern,int *next){ int i = 0 ; int j = next[0] = -1; while(p
阅读全文
摘要:KMP算法引用最多的是Matrix67的大作KMP算法详解 该文对KMP算法有个详细的介绍,从宏观上了解下吧。还有其提到 "由于KMP算法只预处理B串,因此这种算法很适合这样的问题:给定一个B串和一群不同的A串,问B是哪些A串的子串。"。其姊妹文章KMP算法与一个经典概率问题未看——有时间再关注将KMP作为自动机KMP算法深度解析KMP算法并非凭空而来,而是基于有线自动机的。该文的图形引用得比较多。从自动机(NFA to DFA)角度去理解KMP和Shift-And/Shift-or算法文中提到了本《Flexible Pattern Matching inStrings》的
阅读全文
摘要:转载自文章
http://www.cppblog.com/acronix/archive/2010/09/24/127536.aspx
阅读全文
posted @ 2011-05-01 22:03
westfly
摘要:参考http://www.cnitblog.com/schkui/archive/2007/07/02/29320.html若干经典的字符串哈希函数http://blog.csdn.net/Java2King/archive/2009/10/25/4725280.aspx某些hash函数的实现http://www.byvoid.com/blog/string-hash-compare/字符串hash效率的比较
阅读全文
摘要:以下分析文字转载自《程序员面试题精选100题(36)-在字符串中删除特定的字符》题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。分析:这是一道微软面试题。在微软的常见面试题中,与字符串相关的题目占了很大的一部分,因为写程序操作字符串能很好的反映我们的编程基本功。要编程完成这道题要求的功能可能并不难。毕竟,这道题的基本思路就是在第一个字符串中拿到一个字符,在第二个字符串中查找一下,看它是不是在第二个字符串中。如果在的话,就从第一个字符串中删除。但如何能
阅读全文
摘要:题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。分析:如果我们不考虑时间复杂度,最简单想法的莫过去先在数组中固定一个数字,再依次判断数组中剩下的n-1个数字与它的和是不是等于输入的数字。可惜这种思路需要的时间复杂度是O(n2)。但是上述策略并没有考虑到数组是有序的特性。此处是不是可以在有序的基础上作工作呢?思路如下:找到数组的第一个数字和最后一个数字。当两个数字的和大于输入的数
阅读全文
摘要:上篇分析了hashtable实现的相关接口与用法,本篇将深入到代码中,分析其代码原理。其源码有hash_function.h ——实现hash函数hash_table.h ——hashtable的实现list.h ——hashtable的开链法用到了链表test_hashtable.c ——测试结构定义用于链接节点的hash_entrystruct hash_entry { struct list_head list; unsigned char *key; unsigned int keylen;};用于全局结构的hash_tablestruct hash_table { struct ha
阅读全文
摘要:阅读代码上瘾了么?又看到一份代码,觉得很符合自己的风格,就贴上来。/* implementation of a simple hash table * -- thread safe functions as *_safe() * -- resolve collisions by chaining * Direct comments, concerns, questions, bugs to: * kulesh [squiggly] isis.poly.edu */该实现考虑到了线程安排,与STL的hashtable思想一致,都是基于resolve collisions by chaining(
阅读全文
摘要:list链表是双链表,在libnet中的实现同样简单,其借用了linux中list的实现思路,将指针域与数据域分离。要用list也是跟list中一样的。如下是指针域的实现代码——为了方便阅读,我用linux下的风格将语句分开了。/* Linked list code, inspired by Links, but written from scratch. */struct list_head { void *next; void *prev;};#define init_list(L) \ do { \ L.next = L.prev = &L; \ } while (0) #def
阅读全文
摘要:libnet 是一个小型的接口函数库,主要用C语言写成,提供了低层网络数据报的构造、处理和发送功能(百度百科上有很详细的介绍哦)。貌似我下载的版本与网上教程说的不太一致。我在sf上下载的最新版,但是却是0.10.11版——网上有说1.0版的,我到底该信谁的呢!今天无意中看到该库的循环队列的实现,感觉真是简洁啊!有木有啊!!!/* Queues. */#define QUEUE_SIZE 2048struct queue { unsigned char data[QUEUE_SIZE]; int head, tail;};#define queue_wrap(x) ((x) & (QUE
阅读全文
摘要:本文转载自《Josephus问题》本文转自: http://blog.csdn.net/firetoucher/archive/2006/03/22/632838.aspxJosephus问题是建立在历史学家Josephus的一个报告的基础之上,该报告讲述了他和40个士兵在公元67年被罗马军队包围期间签定的一个自杀协定,Josephus建议每个人杀死他的邻居,他很聪明的使自己成为这些人中的最后一个,因此获得生还。注意:本文中所用定义并非标准,只为叙述方便。第一类Josephus数假设n 个竞赛者排成一个环形,依次顺序编号1,2,…,n。从某个指定的第1 号开始,沿环计数,每数到第2个人就让其出
阅读全文
摘要:题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。分析此题的文章很多(能够讲解清楚是种能力),给出参考性代码,用代码说话#include <stdio.h>#include <memory.h>/***********************************************************************************36输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,
阅读全文
摘要:近来开始重视算法的学习,所以从现在开始尝试写写算法的方面的文章。做了两道题后,发现了问题,测试是个问题。为了测试,由于每个算法函数有相关的初始化数据,在加上测试数据,所以在main里面有太多注释,对今后的整理非常不利。所以考虑用个测试的框架,在经过不多的思考后,我选择了以前关注的gTest。gTest是Google的开源C++单元测试框架Google Test的简称,cnblogs上有详细的中文教程。我一直是Google的粉丝,笃信Google出品,必属精品。呵呵!加上有详细的图文教程(虽然教程是基于Win32平台的),上手也很方便,以前也摆弄过。从gtest的官方网站http://code.
阅读全文

浙公网安备 33010602011771号