
算法
Jason__Zhou
代码是朋友,可以真诚沟通,而且非常忠实。热爱你所写下的代码.
展开
-
python
python list 函数说明class list(object) | list() -> new empty list | list(iterable) -> new list initialized from iterable's items | | Methods defined here: | | __add__(...) | x.__add__(y原创 2016-05-20 21:43:34 · 534 阅读 · 0 评论 -
一个数组中找出连续子向量的最大和 分治算法 扫描算法O(n)
算法设计艺术输入具有n个整数的向量data,输出向量的任意连续子向量的最大和, 当所有输入都是负数时,综合的最大子向量是空向量,总和为0; 例如输入10个数 31,-41,59,26,-53,58,97,-93,-23,84输出 data[2..6]的和 187 59+26+(-53)+58+97其中最高效的是扫描算法O(n) 分治算法O(n*logn) 基本算法是O(n^2)/*d原创 2016-05-15 11:52:51 · 1497 阅读 · 0 评论 -
和为定值的多个数 回溯减枝
/*description:输入两个整数n和sum,从数列1,2,3.......n 中随意取几个数,使其和等于sum,要求将其中所有的可能组合列出来。方法2: 回溯减枝这个问题属于子集和问题(也是背包问题)。本程序采用回溯法+剪枝,其中X数组是解向量,t=∑(1,..,k-1)Wi*Xi, r=∑(k,..,n)Wi,且若t+Wk+W(k+1)<=M,则Xk=true,递归左儿子(X1,X2转载 2016-03-15 10:54:08 · 860 阅读 · 0 评论 -
和为定值的多个数 (n问题转化为n-1问题)
/*description:输入两个整数n和sum,从数列1,2,3.......n 中随意取几个数,使其和等于sum,要求将其中所有的可能组合列出来。方法1:注意到取n,和不取n个区别即可,考虑是否取第n个数的策略,可以转化为一个只和前n-1个数相关的问题。如果取第n个数,那么问题就转化为“取前n-1个数使得它们的和为sum-n”,对应的代码语句就是sumOfkNumber(sum - n转载 2016-03-15 10:13:03 · 2520 阅读 · 0 评论 -
寻找 最小的k个数 线性选择算法 平均时间复杂度 O(n)
/*description:寻找最小的k个数有n个数,请找出最小的k个数要求时间复杂度尽可能低。方法1:全排序 时间复杂度O(n*logn)方法2:部分排序 维护一个容量为k的堆 O(n*logk)方法3:线性选择算法 时间复杂度 O(n) 本算法<<编程之法>>参考:https://github.com/julycoding/The-Art-Of-Programming-By原创 2016-03-13 11:28:50 · 1977 阅读 · 0 评论 -
最长回文子串 Manacher算法 时间复杂度O(N)
/*description:最长回文子串 Manacher算法。时间复杂度O(N) 最坏O(N^2)参考http://blog.163.com/zhaohai_1988/blog/static/2095100852012716105847112/http://articles.leetcode.com/longest-palindromic-substring-part-ii<<编程之转载 2016-03-11 20:35:19 · 650 阅读 · 0 评论 -
回文判断
/*description:回文判断直接处理:时间复杂度 O(n) 空间复杂度O(1)<<编程之法>>author: JasonZhoudate: 2016-03-11*/ #include <iostream>using namespace std;bool IsPalindrome(string str){ if (str.length()==0) {原创 2016-03-11 17:21:06 · 603 阅读 · 0 评论 -
字符串包含 位运算法
/*description: 长字符串s1,和短字符串s2 判断s2是否是s1的子集。 字母都是大写。 是输出true 否输出false使用位运算法,相当于每个位作为一个hash值。author: JasonZhoudate: 2016-03-10*/#include <iostream>using namespace std;bool Str原创 2016-03-10 19:26:24 · 1402 阅读 · 0 评论 -
程序优化例子
//判断是否为奇数bool IsOddNumber(int data){ return (data & 1)==1;}原创 2016-03-21 23:20:30 · 507 阅读 · 0 评论 -
字符串匹配 KMP算法
/*description:字符串匹配 KMP算法<<编程之法>> P134author: JasonZhoudate: 2016-03-29*/#include<iostream>#include <string>using namespace std;void calculate_next(string p,int next[]){ int len=p.length原创 2016-03-30 22:57:41 · 428 阅读 · 0 评论 -
fortran 语言使用
! fortran 统计时间 REAL time_begin,time_end CALL CPU_TIME (time_begin) CALL CPU_TIME (time_end) PRINT *, 'Time of operation was ', time_end - time_begin, ' seconds'fortran openmp使用4、常用到的两个函数:OMP_SET_N原创 2015-08-18 17:41:34 · 1878 阅读 · 0 评论 -
插入排序 优化
/*description:排序参考<<编程珠玑>>author:Jasondate:20160516*/#include<stdio.h>#include<iostream>using namespace std;int show_data(int data[],int len){ for (int i=0;i<len;i++) { cout<<da原创 2016-05-16 10:05:35 · 524 阅读 · 0 评论 -
容器 STL
容器 STL vector listdeque 双端队列stack 栈queue 队列priority_queue 优先级队列 底层默认使用向量实现map 映射 有序,提供一对一的关系,以pair为内部类型multimap 多重映射set 集合 元素唯一,集合中元素唯一.multiset 多重集合 bits原创 2016-05-21 20:13:06 · 533 阅读 · 0 评论 -
插入排序
/*名称:插入排序描述:将长度为length的数组,进行排序.flag=0 从小到大排序flag=非0 从大到小排序时间:15.7.11Jason Zhou 热爱你所写下的程序,他是你的伙伴,而不是工具.*/#include<iostream>using namespace std;int insertion_sort(int arr[],int length,int f原创 2015-07-11 17:14:56 · 486 阅读 · 0 评论 -
冒泡排序
/*函数:冒泡排序 从小到大排序算法复杂度 n^2时间:15.7.12 Jason Zhou 热爱你所写下的程序,他是你的伙伴,而不是工具.*/#include <iostream>using namespace std;int bubble_Sort(int arr[],int len){ for (int i=0;i<len;i++) {原创 2015-07-12 14:52:17 · 417 阅读 · 0 评论 -
快速排序 随机化版本
/*函数:快速排序a[p..q-1] 中的每一个元素小于a[q]a[q+1..r] 中的每个元素均大于a[q]通过产生随机数的方法,保证等概率从候选项中选择主元.时间:15.7.15Jason Zhou 热爱你所写下的程序,他是你的伙伴,而不是工具.*/#include<iostream>#include<stdlib.h>#include <time.h>using na原创 2015-07-15 20:39:47 · 640 阅读 · 0 评论 -
计数排序
/*函数:计数排序 当k=O(n)时,排序时间是O(n)核心思想对于每一个元素,确定小于x的元素个数a.利用这一个信息直接将该元素放到a+1位置上.需要都为正数.时间:15.7.16Jason Zhou 热爱你所写下的程序,他是你的伙伴,而不是工具.*/#includeusing namespace std;int count_sort(int arr[原创 2015-07-16 11:09:31 · 441 阅读 · 0 评论 -
计数排序
/*函数:计数排序 当k=O(n)时,排序时间是O(n)核心思想对于每一个元素,确定小于x的元素个数a.利用这一个信息直接将该元素放到a+1位置上.需要都为正数.时间:15.7.16Jason Zhou 热爱你所写下的程序,他是你的伙伴,而不是工具.*/#include<iostream>using namespace std;int count_sort(int arr原创 2015-07-19 20:58:28 · 412 阅读 · 0 评论 -
桶排序 O(n) 线性时间
桶排序 (Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间(Θ(n))。但桶排序并不是 比较排序,他不受到 O(n log n) 下限的影响。假定:输入是由一个随机过程产生的[0转载 2015-07-19 21:01:18 · 584 阅读 · 0 评论 -
bitmap排序
/*description:bitmap排序https://github.com/julycoding/The-Art-Of-Programming-By-July/blob/master/ebook/zh/06.07.mdauthor: JasonZhoudate: 2016-03-10*/ //定义每个Byte中有8个Bit位 #include<memory.h> #incl转载 2016-03-10 21:41:02 · 493 阅读 · 0 评论 -
字符串的全排列 递归
/*description:字符串的全排列来自<<编程之法>>author: JasonZhoudate: 2016-03-11*/ #include <iostream>using namespace std;static int count=0;//递归方法void CallAllPermutation(char* perm,int from,int to) {转载 2016-03-11 16:36:02 · 525 阅读 · 0 评论 -
快排 快速排序
快排 快速排序/*description:快速排序参考<<编程珠玑>>author:Jasondate:20160517*/#include<stdio.h>#include<iostream>using namespace std;int show_data(int data[],int len){ cout<<"-----------------------"<<en原创 2016-05-17 12:38:45 · 739 阅读 · 0 评论 -
STL bitmap 使用
/*description:STL bitmap的使用author:Jasondate:20160521*/#include<stdio.h>#include <bitset>#include<iostream>using namespace std;int main(){ bitset<100> mybitset; mybitset.set();//将所有位置原创 2016-05-21 17:34:56 · 3544 阅读 · 0 评论 -
最长公共子序列 (LCS,longest common subsequence problem) 动态规划
/*函数:最长公共子序列 (LCS,longest common subsequence problem) 动态规划解决该问题.算法见 算法导论 原书第三版 殷建平 P224一个给定的子序列就是将给定的一个或多个元素去掉之后的结果.最长公共子序列,求x,y长度最长的公共子序列.x={x1,x2...xm} y={y1,y2...yn}分情况:1.当xm=yn时,应该求解x(m-原创 2015-07-24 19:24:57 · 1205 阅读 · 1 评论 -
动态规划 钢条切割问题 两种方法 自底而上 自上而下的方法
/*函数:动态规划 解决钢条切割问题两种方法 自底而上 自上而下的方法 一般自底而上的方法没有递归调用的开销,效率好些长度 1 2 3 4 5 6 7 8 9 10价格 1 5 8 9 10 17 17 20 24 30寻找方法将长度问n的钢管切割,使得价格最高.动态规划的方法保存子问题的结果,不必每次原创 2015-07-23 20:27:09 · 1700 阅读 · 0 评论 -
二叉搜素树 二叉排序树 插入 删除 中序输出
/*函数:二叉搜素树 二叉排序树二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树node.left<node.key<node.right注意:原创 2015-07-21 17:05:57 · 612 阅读 · 0 评论 -
海量数据处理算法—Bit-Map
1. Bit Map算法简介 来自于《编程珠玑》。所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。2、 Bit Map的基本思想 我们先来看一个具体的例子,假设我们要对0-7内的5个元素(4,7,2,5,3)排序转载 2014-11-08 13:51:53 · 499 阅读 · 0 评论 -
海量数据处理算法—Bloom Filter
juthttp://blog.youkuaiyun.com/hguisu/article/details/7866173#转载 2014-11-08 13:17:06 · 771 阅读 · 0 评论 -
KMP 算法 字符串比较
/*KMP algorithmhttp://www.cnblogs.com/dolphin0520/archive/2011/08/24/2151846.html*/#include #include using namespace std; // 普通的字符串比较函数int compare(string s1,string s2){ int i=0,j=0; whi原创 2014-09-01 19:23:08 · 412 阅读 · 0 评论 -
二叉树的深度优先搜索和广度优先搜索
深度优先搜索算法(Depth First Search),是搜索算法的一种。是沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。如右图所示的转载 2014-09-24 13:09:01 · 1443 阅读 · 0 评论 -
排序方法汇总
冒泡排序是非常容易理解和实现,,以从小到大排序举例:设数组长度为N。1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。3.N=N-1,如果N不为0就重复前面二步,否则排序完成。 按照定义很容易写出代码:[cpp]转载 2014-09-07 15:28:28 · 382 阅读 · 0 评论 -
C++ 排序
sort使用// alg_sort.cpp// compile with: /EHsc#include #include //sort必须#include // For greater( )#include // Return whether first element is greater than the secondbool UDgreater ( int e原创 2014-09-07 15:42:39 · 438 阅读 · 0 评论 -
后缀运算符的计算
/*description: 后缀运算符的计算 输入以#结尾 整数运算例如:输入: 12+#输出: 3author: jz Date: 20140818*/#include#include#include#include#include using namespace std;stack OPND;int Operate(int a,char theat,原创 2014-08-18 16:07:17 · 721 阅读 · 0 评论 -
汉诺塔程序
/*description: hanio author: jz email: zjhua678@163.com Date: 20140818*/#includeint count=0;void move(int n,char t1,char t2){ printf("%3d:%d %c-->%c\n",++count,n,t1,t2);}void hanoi(in转载 2014-08-18 15:12:32 · 497 阅读 · 0 评论 -
从头到尾彻底理解KMP
从头到尾彻底理解KMP作者:July时间:最初写于2011年12月,2014年7月21日晚10点 全部删除重写成此文,随后的半个多月不断反复改进。1. 引言 本KMP原文最初写于2年多前的2011年12月,因当时初次接触KMP,思路混乱导致写也写得混乱,如此,留言也是“骂声”一片。所以一直想找机会重新写下KMP,但苦于一转载 2014-08-18 23:55:47 · 495 阅读 · 0 评论 -
二叉树的重建 已知前序 中序 求后序 递归的方法
/*描述:二叉树的重建 已知前序 中序 求后序来源:http://www.cnblogs.com/lovell-liu/archive/2011/09/06/2169170.html日期:20140820*/#include using namespace std;struct NODE{ NODE* pLeft; NODE* pRight; char chValue;};原创 2014-08-20 17:34:11 · 651 阅读 · 0 评论 -
数学之美系列二十二:由电视剧《暗算》所想到的 — 谈谈密码学的数学原理
前一阵子看了电视剧《暗算》,蛮喜欢它的构思和里面的表演。其中有一个故事提到了密码学,故事本身不错,但是有点故弄玄虚。不过有一点是对的,就是当今的密码学是以数学为基础的。(没有看过暗算的读者可以看一下介绍,http://ent.sina.com.cn/v/2005-10-17/ba866985.shtml因为我们后面要多次提到这部电视剧。)密码学的历史大致可以推早到两千年前,相传名将凯撒转载 2014-11-10 23:23:24 · 897 阅读 · 0 评论 -
第一章 算法在计算中的作用
NP完全问题NP完全问题,是世界七大数学难题之一。 NP的英文全称是Non-deterministic Polynomial的问题,即多项式复杂程度的非确定性问题。简单的写法是 NP=P?,问题就在这个问号上,到底是NP等于P,还是NP不等于P。生成问题的一个解通常比验证一个给定的解时间花费要多得多。这是这种一般现象的一个例子.人们发现,所有的完全多项式非确定性问题原创 2015-04-19 19:49:59 · 509 阅读 · 0 评论 -
线性选择算法 .
在期望的线性时间内,可以找到顺序统计量,特别是中位数. 在最坏的情况下,时间依然是线性的.选择问题定义,实际上所有处理均可以推广到集合中包含重复数值的情形。输入:一个包含n个(不同的)数的集合A和一个数i,1<=i<=n。输出:元素x属于A,它恰大于A中其他的i-1个元素。1、最大值最小值针对一个序列取得最大和最小值均需要n-1次比较。这是一个下限,确定最大值或者最小值的算法可以看作各个元素之间转载 2015-07-19 22:06:39 · 1218 阅读 · 0 评论 -
fortran 语言总结
fortran 对大小写不敏感 语句以数字开始,表示语句的标号 fortran长项与数值计算 注意文件的后缀名/=和.ne.都是表示不等于规则: 保留字使用大写,如PROGRAM,READ,WRITE 程序的变量使用小写 fortran.f90 编译 [asc15@mic01 fortan]$ ifort fortran.f90INTERGRE REAL LOGICAL开始原创 2015-07-15 14:44:57 · 11259 阅读 · 3 评论