算法
文章平均质量分 76
PegasusWang_
知乎 Python 后端工程师:
https://www.zhihu.com/people/pegasus-wang/activities
Python web 入坑指南作者:http://python-web-guide.readthedocs.io/zh/latest/
展开
-
算法之递推及其应用(递推关系的建立及在信息学竞赛中的应用 安徽 高寒蕊)
定义:给定一个数的序列H0,H1,…,Hn,…若存在整数n0,使当nn0时,可以用等号(或大于号、小于号)将Hn与其前面的某些项Hn(0i递推关系中存在着三大基本问题:如何建立递推关系,已给的递推关系有何性质,以及如何求解递推关系。五种基本的递推关系:Ⅰ.Fibonacci数列 在所有的递推关系中,Fibonacci数列应该是最为大家所熟悉的。在最基础的程序设计语言Logo语言中,原创 2013-06-19 19:25:39 · 2845 阅读 · 0 评论 -
漫谈二分查找-Binary Search (转)
漫谈二分查找,为什么写出一个完全正确的二分查找如此困难?原创 2014-01-17 11:03:09 · 1629 阅读 · 0 评论 -
如何测试洗牌程序(酷壳)
我希望本文有助于你了解测试软件是一件很重要也是一件不简单的事。我们有一个程序,叫ShuffleArray(),是用来洗牌的,我见过N多千变万化的ShuffleArray(),但是似乎从来没人去想过怎么去测试这个算法。所以,我在面试中我经常会问应聘者如何测试ShuffleArray(),没想到这个问题居然难倒了很多有多年编程经验的人。对于这类的问题,其实,测试程序可能比算法更难写,代码更多。转载 2014-01-18 12:06:28 · 1654 阅读 · 0 评论 -
C++ 归并排序实现(算法导论)
算法导论上的下标是从1开始的,但是为了和c++ STL的设计思想一致,所有函数的实现统一用左闭右开区间.中间修改了很多次,因为下标修改不是很容易就改掉的,需要始终维持循环不变式,稍微一个步骤出错就会使结果有些错误。#include #include #include #include using namespace std;void merge(int *A, int p, int原创 2014-03-04 19:28:38 · 1483 阅读 · 0 评论 -
C++最大堆实现priority_queue优先级队列(算法导论)
max_heapify与build_max_heap过程与heapsort一样#include #include #include #include using namespace std;const int INT_MIN = -(1 << 31);inline void swap(int &a, int &b) { int t = a; a = b; b = t; }inl原创 2014-03-11 22:26:45 · 2030 阅读 · 0 评论 -
c++堆排序实现(heapsort) (算法导论)
利用最大堆实现。最大堆:最大堆性质是除了根结点意外的所有结点 i 都要满足A[parent[i]] >= A[i]需要利用到的一个性质:当用数组表示存储n个元素的堆时,叶结点的下标分别是n/2, n/2+1, n/2 + 2, ......,n - 1. (下标从0开始)需要用到的函数有:void max_heapify(int *a, int i) //通过让a[i]的值原创 2014-03-07 13:14:20 · 5735 阅读 · 1 评论 -
第三届蓝桥杯预赛真题解答
一、 微生物增殖假设有两种微生物 X 和 YX出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍)。 一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y。现在已知有新出生的 X=10, Y=89,求60分钟后Y的数目。如果X=10,Y=90 呢?本题的要求就是写出这两种初始条件下,60分钟后Y的数目。原创 2014-03-13 19:01:20 · 1582 阅读 · 0 评论 -
蓝桥杯 十六进制转八进制 十六进制转十进制 十进制转十六进制
#include #include #include #include using namespace std;map hex_to_bin;map bin_to_oct;map hex_to_oct;void init() { hex_to_bin['0'] = "0000"; hex_to_bin['1'] = "0001"; hex_to_bin['2'] =原创 2014-03-16 10:02:13 · 1388 阅读 · 0 评论 -
用两个栈实现一个队列
面试题:用两个栈实现一个队列原创 2014-04-30 12:36:45 · 1049 阅读 · 0 评论 -
2013第四届蓝桥杯 C/C++本科A组 部分解答
2013第四届蓝桥杯 C/C++本科A组 部分解答原创 2014-03-14 21:03:47 · 1565 阅读 · 0 评论 -
C++快速排序实现(quicksort) (算法导论)
quicksort:分治思想。分解:数组A[p, r)被划分成两个子数组A[p..q) 和 A[q+1, r),使得A[p..q)中的每个元素小于等于A[q], A[q]也小于A[q+1..r)中的每个元素。q是划分过程要返回的结果。解决:递归调用quicksort,对子数组A[p..q) 和 A[q+1, r)进行排序。合并:因为子数组都是原址排序的,所以不需要合并操作:A[p..r原创 2014-03-05 11:52:46 · 2067 阅读 · 0 评论 -
腾讯面试题:A.txt和B.txt两个文件,A有1亿个qq号,B有100万个,用代码实现交、并、差
腾讯面试题:A.txt和B.txt两个文件,A有1亿个qq号,B有100万个,用代码实现交、并、差原创 2014-05-07 13:53:26 · 3581 阅读 · 0 评论 -
给定一个函数rand()能产生0到n-1之间的等概率随机数,问如何产生0到m-1之间等概率的随机数?
给定一个函数rand5(),使函数rand7()可以随机等概率的生成1-7的整数转载 2014-05-07 18:03:02 · 4063 阅读 · 2 评论 -
面试题:循环数组查找数(二分查找的扩展应用)
二分查找可以解决排序数组的查找问题:只要数组中包含T(即要查找的值),那么通过不断缩小包含T的范围,最终就可以找到它。一开始,范围覆盖整个数组。将数组的中间项与T进行比较,可以排除一半元素,范围缩小一半。就这样反复比较,反复缩小范围,最终就会在数组中找到T,或者确定原以为T所在的范围实际为空。对于包含N个元素的表,整个查找过程大约要经过logN次比较。 二分搜索需要注意开闭区间的问题,限转载 2014-05-08 17:06:59 · 2830 阅读 · 0 评论 -
一些有意思的算法代码
Keith Schwarz是一个斯坦福大学计算机科学系的讲师。他对编程充满了热情。他的主页上他自己正在实现各种各样的有意思的算法和数据结构,http://www.keithschwarz.com/interesting/, 目前这个网页上有88个(见下面的列表),但这位大哥要干135个,你可以看看他的To-Do List。从这个列表上,我们可以看到,他从去年7月份就在自己实现这些东西了转载 2014-05-08 17:21:50 · 1584 阅读 · 0 评论 -
Trie—单词查找树
Trie—单词查找树Trie,又称单词查找树、前缀树,是一种哈希树的变种。应用于字符串的统计与排序,经常被搜索引擎系统用于文本词频统计。性质:1.根节点不包含字符,除根节点外的每一个节点都只包含一个字符。2.从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。3.每个节点的所有子节点包含的字符都不相同。优点:1.查询快。对于长度为m的键值,最转载 2014-05-08 17:05:09 · 865 阅读 · 0 评论 -
面试题:求全排列和组合
面试题:求全排列和组合原创 2014-05-07 19:26:15 · 1027 阅读 · 0 评论 -
binary search中计算mid=(beg+end)/2与mid=beg+(end-beg)/2的区别
binary search中计算mid=(beg+end)/2与mid=beg+(end-beg)/2的区别原创 2014-01-08 23:41:33 · 2345 阅读 · 0 评论 -
c++ 大数模板 acm
#include #include #include #include using namespace std; #define MAXN 9999#define MAXSIZE 10#define DLEN 4class BigNum{ private: int a[500]; //可以控制大数的位数 int len; //大数长度public原创 2013-08-28 16:00:43 · 1610 阅读 · 0 评论 -
动态规划之数字三角形(三种解法:递归,递推,记忆化搜索)
Description 如图所示,有一个群岛,共分为若干层,第1层有一个岛屿,第2层有2个岛屿,......,第n层有n个岛屿。每个岛上都有一块宝,其价值是一个正整数(图中圆圈中的整数)。寻宝者只允许从第一层的岛屿进入,从第n层的岛屿退出,不能后退,他能收集他所经过的所有岛屿上的宝贝。但是,从第i层的岛屿进入第i+1层的岛屿时,有且仅有有2条路径。你的任务是:对于给定的群岛和岛上宝贝的原创 2013-06-19 19:25:43 · 1365 阅读 · 0 评论 -
传球游戏(递推)
描述 n个同学站成一个圆圈,其中的一个同学手里拿着一个球,吹哨子时开始传球,每个同学可以把球传给自己左右的两个同学中的一个(左右任意),再次吹哨子时,传球停止,此时,拿着球没传出去的那个同学就是败者,要给大家表演一个节目。问题:有多少种不同的传球方法可以使得从该同学手里开始传的球,传了m次以后,又回到该同学手里。两种传球的方法被视作不同的方法,当且仅当这两种方法中,接到球的同学按接球顺序组原创 2013-06-19 19:25:48 · 1157 阅读 · 0 评论 -
0-1背包(及初始化问题)
你的背包 背到现在还没烂却成为我身体另一半千金不换 它已熟悉我的汗它是我肩膀上的指环......刚学的背包入门问题:0-1背包问题:有n种物品,每种只有一个,第i种物品的体积V[i],重量W[i]。选一些物品撞到一个容量为C的背包,使得背包内物体在总体积不超过C的前提下重量尽量大。用s[i][j]表示把前i个物品撞到容量为j的背包中的最大总重量,容易得出状态转移方程.1、假如不放入原创 2013-06-19 19:25:55 · 898 阅读 · 0 评论 -
求圆周率π一万位程序分析
先贴一段维基百科的内容:计算机时代计算π上万位以上的小数位值通常利用高斯-勒让德算法或波温算法;另外以往亦曾使用于1976年发现的萨拉明-布伦特算法。第一个π和1/π的小数点后首一百万位利用了古腾堡计划。最新纪录是2002年9月得出的1,241,100,000,000个小数位,由拥有1TB主内存的64-node日立超级计算机,以每秒200亿运算速度得出,比旧纪录多算出一倍(206亿小数原创 2013-06-19 19:26:19 · 6489 阅读 · 0 评论 -
浅谈全排列与组合的生成
例:输出从1,2......m,中任取k个数的所有组合。m=5,k=3时有543,542,541,532,531,521,432,431,421,321有C(m,k)个。法一:枚举方法 1 #include 2 #include 3 using namespace std; 4 int main() 5 { 6 int n; 7 cin >>原创 2013-06-19 19:26:29 · 1217 阅读 · 0 评论 -
漫谈二分查找-Binary Search (转)
http://duanple.blog.163.com/blog/static/709717672009049528185/ (用vim把程序缩进了一下,方便看)历史上,Knuth在其>一书的第6.2.1节指出:尽管第一个二分搜索算法于1946年就出现,然而第一个完全正确的二分搜索算法直到1962年才出现。而不经仔细斟酌而写出的一个二分查找经常遭遇off by one或者无限循原创 2013-06-19 19:28:28 · 1024 阅读 · 0 评论 -
最长上升子序列(LIS)nlogn算法(转)
这题目是经典的DP题目,也可叫作LIS(Longest Increasing Subsequence)最长上升子序列 或者 最长不下降子序列。很基础的题目,有两种算法,复杂度分别为O(n*logn)和O(n^2) 。A.O(n^2)算法分析如下: (a[1]...a[n] 存的都是输入的数) 1、对于a[n]来说,由于它是最后一个数,所以当从a[n]开始查找时,只存在长度为1的不下降子序列原创 2013-06-19 19:28:35 · 1046 阅读 · 0 评论 -
一些与算法有关的网站
//转自:http://www.cnblogs.com/a180285/archive/2012/01/15/2290290.html//---------------------------------------------------------------------------------------------------------------------------------原创 2013-06-19 19:28:49 · 1553 阅读 · 0 评论 -
AC自动机(Aho-Corasick automation)(转)
AC自动机:Aho-Corasick automation,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法。解决的问题:给出n个单词,再给出一段包含m个字符的文章,让你找出有多少个单词在文章里出现过。(也是解决web开发中关键字链接的常用算法:n个关键字,1篇文章,找出关键字在文章出现的位置)思路:在一棵trie树上面做Kmp,每个节点都有个像Kmp一样匹配失败时的指针(失败指针),匹配原创 2013-06-19 19:28:55 · 1028 阅读 · 0 评论 -
字符串:KMP Eentend-Kmp 自动机 trie图 trie树 后缀树 后缀数组(转)
涉及到字符串的问题,无外乎这样一些算法和数据结构:自动机 KMP算法 Extend-KMP 后缀树 后缀数组 trie树 trie图及其应用。当然这些都是比较高级的数据结构和算法,而这里面最常用和最熟悉的大概是kmp,即使如此还是有相当一部分人也不理解kmp,更别说其他的了。当然一般的字符串问题中,我们只要用简单的暴力算法就可以解决了,然后如果暴力效率太低,就用个hash。当然hash也是一个面试原创 2013-06-19 19:28:58 · 1255 阅读 · 0 评论 -
字符串循环同构的最小表示法(转)
循环字符串的最小表示法的问题可以这样描述:对于一个字符串S,求S的循环的同构字符串S’中字典序最小的一个。由于语言能力有限,还是用实际例子来解释比较容易:设S=bcad,且S’是S的循环同构的串。S’可以是bcad或者cadb,adbc,dbca。而且最小表示的S’是adbc。对于字符串循环同构的最小表示法,其问题实质是求S串的一个位置,从这个位置开始循环输出S,得到的S’字典序最小。一种原创 2013-06-19 19:29:00 · 1128 阅读 · 0 评论 -
算法好书推荐
算法好书推荐原创 2013-07-24 13:42:52 · 3307 阅读 · 0 评论 -
由二叉树的先序中序推出后序(转)
各大公司招聘每次笔试都碰到这种题,今天来把它说清楚.三序中知道其中两个就可以推出第三个,但前提是我们必须知道中序.因为:先序和后序给我们提供的信息是一样的--告诉我们谁是根节点中序则告诉我们左右子树在哪儿例:已知先序为eacbdgf,中序为abcdefg,求后序由先序我们知道e为根节点,我们在中序中把左右子树括起来 --(abcd)e(fg)同样对左子树ab原创 2013-08-22 08:42:51 · 1573 阅读 · 0 评论 -
拓扑排序原理及实现
原文链接:http://blog.csdn.net/dm_vincent/article/details/7714519本文将从以下几个方面介绍拓扑排序:拓扑排序的定义和前置条件和离散数学中偏序/全序概念的联系典型实现算法Kahn算法基于DFS的算法解的唯一性问题实际例子取材自以下材料:http://en.wikipe转载 2013-08-23 11:32:39 · 1570 阅读 · 0 评论 -
ural 1022. Genealogical Tree 拓扑排序
链接:http://acm.timus.ru/problem.aspx?space=1&num=1022描述:火星人的总谱图很乱,导致发言时难以确定顺序。为了不引起scandal,规定所有后代必须在祖先之后发言。输入N,1 输出任意一个满足的顺序。思路:直接将给定的图拓扑排序即可。一篇介绍拓扑排序的好文章:http://blog.csdn.net/pegasuswang原创 2013-08-23 16:31:06 · 1349 阅读 · 0 评论 -
算法导论之插入排序,选择排序,归并排序,冒泡排序,希尔排序,堆排序,快速排序的c语言实现
另外还有基数排序,计数排序,桶排序等,暂时没有时间看。先把上面这些的c语言代码写一下,并且简略提一下原理。插入排序:对于未排序的数据,在已排序数据中从后向前扫描,找到相应位置插入.(第一个元素当做已排序)扫描过程中需要反复把已排序的元素逐步向后移动,为新元素提供插入空间。 1 void insertion_sort(int *a, int len) //调用inserti原创 2013-06-19 11:28:33 · 1121 阅读 · 0 评论 -
python 版 quicksort 快排
python版quicksort原创 2014-05-16 14:16:52 · 2205 阅读 · 0 评论