
算法
hehainan_86
这个作者很懒,什么都没留下…
展开
-
KMP字符串匹配算法
1、KMP算法是一种线性时间复杂的字符串匹配算法,它是对BF算法(Brute-Force,最基本的字符串匹配算法的)改进。 对于给的的原始串S和模式串P,需要从字符串S中找到字符串P出现的位置的索引。 BF算法的时间复杂度O(strlen(S) * strlen(T)),空间复杂度O(1)。 KMP算法的时间复杂度O(strlen(S) + strlen(T)原创 2013-10-08 16:36:53 · 599 阅读 · 0 评论 -
STL系列之全排列
全排列在笔试面试中很热门,因为它难度适中,既可以考察递归实现,又能进一步考察非递归的实现,便于区分出考生的水平。所以在百度和迅雷的校园招聘以及程序员和软件设计师的考试中都考到了,因此本文对全排列作下总结帮助大家更好的学习和理解。对本文有任何补充之处,欢迎大家指出。首先来看看题目是如何要求的(百度迅雷校招笔试题)。用C++写一个函数, 如 Foo(const char *str),转载 2014-06-23 21:16:08 · 534 阅读 · 0 评论 -
Algorithm Gossip: 老鼠走迷官(一)
说明:老鼠走迷宫是递归求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁,使用1来表示老鼠的行走路径,试以程式求出由入口至出口的路径。解法:老鼠的走法有上、左、下、右四个方向,在每前进一格之后就选一个方向前进,无法前进时退回选择下一个可前进方向,如此在阵列中依序测试四个方向,直到走到出口为止,这是递回的基本题,请直接看程序应就可以理解。#include "stdio.h"转载 2014-04-02 17:34:16 · 834 阅读 · 0 评论 -
Algorithm Gossip: 老鼠走迷官(二)
说明:由于迷宫的设计,老鼠走迷宫的入口至出口路径可能不只一条,如何求出所有的路径呢?解法:求所有路径看起来复杂但其实更简单,只要在老鼠走至出口时显示经过的路径,然后退回上一格重新选择下一个位置继续递回就可以了,比求出单一路径还简单,我们的程序只要作一点修改就可以了。#include "stdio.h"#include "stdlib.h"void visi转载 2014-04-02 19:51:17 · 542 阅读 · 0 评论 -
巴斯卡三角形(Pascal)
北宋人贾宪约1050年首先使用"贾宪三角"进行高次开方运算。杨辉,字谦光,南宋时期杭州人。在他1261年所著的《详解九章算法》一书中,辑录了如上所示的三角形数表,称之为"开方作法本源"图,并说明此表引自11世纪前半贾宪的《释锁算术》,并绘画了"古法七乘方图"。故此,杨辉三角又被称为"贾宪三角"。元朝数学家朱世杰在《四元玉鉴》(1303年)扩充了"贾宪三角"成"古法七乘方图"。原创 2014-03-28 16:14:07 · 1744 阅读 · 0 评论 -
算法之斐波那契数列(Fabonacci)
Algorithm Gossip: 费式数列说明:Fibonacci为1200年代的欧洲数学家,在他的着作中曾经提到:「若有一只免子每个月生一只小免子,一个月后小免子也开始生产。起初只有一只免子,一个月后就有两只免子,二个月后有三只免子,三个月后有五只免子(小免子投入生产)......。如果不太理解这个例子的话,举个图就知道了,注意新生的小免子需一个月成长期才会投入原创 2014-03-28 14:31:53 · 1192 阅读 · 0 评论 -
算法之汉诺塔问题
1.AlgorithmGossip:河内之塔 说明:河内之塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的,河内为越战时北越的首都,即现在的胡志明市;1883年法国数学家Edouard Lucas曾提及这个故事,据说创世纪时Benares有一座波罗教塔,是由三支钻石棒(Pag)所支撑,开始时神在第一根棒原创 2014-03-28 11:57:15 · 673 阅读 · 0 评论 -
输出一个序列的全排列
#include void swap(int &a,int &b){ int t; t = a; a = b; b = t;}void cal(int* arr,int low,int high){ int i; if(low==high) { for(i =0; i <= high; i++) printf("%d\t",arr[i]); } else原创 2013-11-22 15:22:46 · 1329 阅读 · 0 评论 -
不借助任何库函数写平方根函数sqrt
#include "stdio.h"#define le 1e-6 //精度是可以修改的double sqrt(double n){ double x1,x0; x0=1; while(1) { x1=0.5*(x0+n/x0); if((x1-x0>-le)&&(x1-x0<le)) break;//收敛时,退出循环 x0= x1; }原创 2013-10-28 12:30:49 · 1144 阅读 · 0 评论 -
atoi
表头文件是#include 定义函数为int atoi( const char *array)函数说明该函数会扫描字符串array,并且前面的空格字符,直到遇到正负号或者数字才开始转换。而再遇到非数字或者字符串结束('\0')时,才结束转换,并将结果返回。#include "stdio.h"#include #define MAX_INT 0x7FFFFFFF#原创 2013-10-28 11:43:23 · 597 阅读 · 0 评论 -
library sort (图书馆排序)
特色:Library sort优于传统的插入排序(时间复杂度为O(n^2)),它的时间复杂度为O(nlogn),采用了空间换时间的策略。思想:一个图书管理员需要按照字母顺序放置书本,当在书本之间留有一定空隙时,一本新书上架将无需移动随后的书本,可以直接插空隙。Library sort的思想就源于此。实现:有n个元素待排序,这些元素被插入到拥有(1+e)n个元素的数组中。每次插入2^(i转载 2013-10-27 22:40:09 · 1143 阅读 · 0 评论 -
利用随机数编写的一个数独
#include #include #include int a[9],b[9]={1,2,3,4,5,6,7,8,9};int c[9];//设计思想是从t位置开始,重新设计数组,t~9保存在一个数组的前面部分,1~t-1保存在后面部分,这样来构成一个序列,并且只要首元素不重复,这个序列的每一位就不会跟上面的序列重复。t有两种来源,一种是因为刚好当前行数%3 == 0时v原创 2013-10-14 10:11:36 · 798 阅读 · 0 评论 -
分枝定界法
定义编辑分支定界法(branch and bound)是一种求解整数规划问题的最常用算法。这种方法不但可以求解纯整数规划,还可以求解混合整数规划问题。2基本思路设最大化的整数规划问题为A, 相应的不含整数约束的线性规划为B, 若B 的最优解不符合A 的整数条件, 那么B 的最优目标函数值必为A 的最优目标函数值Z* 的一个上界, 记作Z; 而A 的任意可行解的目标函数值将是转载 2014-07-14 15:24:40 · 2290 阅读 · 0 评论