![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
algorithm
文章平均质量分 73
strollerV
hoho
展开
-
[算法] 求最大公约数的算法
1、欧几里德算法和扩展欧几里德算法 欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理: 定理:gcd(a,b) = gcd(b,a mod b) 证明:a可以表示成a = kb + r,则r = a mod b 假设d是a,b的一个公约数,则有 d|a, d|b,而r = a - kb,因此d|r 因此d是(b,原创 2007-01-21 21:36:00 · 1239 阅读 · 0 评论 -
100个著名初等数学问题
第01题 阿基米德分牛问题Archimedes Problema Bovinum 太阳神有一牛群,由白、黑、花、棕四种颜色的公、母牛组成. 在公牛中,白牛数多于棕牛数,多出之数相当于黑牛数的1/2+1/3;黑牛数多于棕牛数,多出之数相当于花牛数的1/4+1/5;花牛数多于棕牛数,多出之数相当于白牛数的1/6+1/7. 在母牛中,白牛数是全体黑牛数的1/3+1/4转载 2007-09-19 23:11:00 · 1414 阅读 · 0 评论 -
链表逆序
题目出处:http://blog.rainbud.net/article/entry20050928-014721给定一单链表的表头指针和指向其中一个节点的指针,要求以该指针为头将原链表逆序排列,例如:1. N1->N2->N3->N4->N5->NULL pHEAD = N1,pSTART = N3,返回N3->N2->N1->N5->N4->NULL2. N1->N2->N3->N4->N5原创 2007-09-19 22:24:00 · 1001 阅读 · 0 评论 -
[回溯剪枝] pku1011 解题报告
Sticks Time Limit:1000MS Memory Limit:10000K Total Submit:24457 Accepted:5494 DescriptionGeorge took sticks of the same length and cut them randomly until all parts became at most 50 units long. No原创 2007-06-19 21:16:00 · 4044 阅读 · 2 评论 -
pku1631 Bridging signal 解题报告
题目描述: 给出S={1,2,…,n }到它自身的一个映射(一一对应),求出最长不下降子序列的长度,即LIS问题。基本思想: 1. dp 设m[i]表示映射到{1,2,...,i}的最长不下降序列的长度,则有 当 0data[j] 时, m[i] = max(m[j]) + 1; 算法复杂度O(n^2)原创 2007-06-09 11:03:00 · 891 阅读 · 0 评论 -
堆排序(Heap Sort)
堆排序1、 堆排序定义 n个关键字序列Kl,K2,…,Kn称为堆,当且仅当该序列满足如下性质(简称为堆性质): (1) ki≤K2i且ki≤K2i+1 或(2)Ki≥K2i且ki≥K2i+1(1≤i≤ ) 若将此序列所存储的向量R[1..n]看做是一棵完全二叉树的存储结构,则堆实质上是满足如下性质的完全二叉树:树中任一非叶结点的关键字均不大于(或不小于)其左右孩子(若存在转载 2007-06-06 19:11:00 · 2305 阅读 · 0 评论 -
[算法之回溯法] 子集树与排列树
当所给问题是从n个元素的集合S中找出满足某种性质的子集时,解空间为子集树。 当所给问题是从n个元素的集合S中找出满足某种性质的排列时,解空间为排列树。 回溯法搜索子集树算法描述为: void backtrack(int t) { if(t>n) output(x); else for(int i=0; i原创 2007-05-22 19:49:00 · 3019 阅读 · 1 评论 -
c++ primer 之 generic algorithm
标准库为容器类型定义的操作很少,并没有为每个容器实现更多的操作。因为这部分操作可以抽象出来为所有的容器工作,那就是泛型算法。所谓“泛 型”是指这些算法可以应用于多种容器类型上,而容器内的元素类型也可以多样化。标准库提供了100多个泛型算法,主要定义于头文件中,还有一组泛化的算术算法定义于头文件中。 大多数泛型算法是工作于容器的一对迭代器所标识的范围,并完全通过迭代器来实现其功能。这段原创 2007-03-27 21:39:00 · 977 阅读 · 0 评论 -
[算法之递归] 整数划分问题
题目:将整数n表示成一系列正整数之和,n=n1+n2+...+nk ,其中n1>=n2>=...>=nk, k>=1. 要求n的不同的划分个数,用p(n)表示[思路] 在n的所有不同划分中,将最大加数n1不大于m的划分个数记为q(n, m). 可建立如下的递归关系。 (1) q(n,1)=1, n>=1; (2) q(n,n)=1+q(n, n-1);原创 2007-03-20 23:47:00 · 808 阅读 · 0 评论 -
[算法之分治法应用] 循环赛日程表
问题描述: 设有n(n = 2^k)位选手参加网球循环赛,循环赛共进行n-1天,每位选手要与其他n-1位选手比赛一场,且每位选手每天必须比赛一场,不能轮空。试按此要求为比赛安排日程: (1) 每个选手必须与其他n-1个选手各赛一场; (2) 每个选手一天只能赛一场; (3) 循环赛一共进行n-1天。 编程思想: 假设n位选手被顺序编号为1,2,...,n,比赛的日程表是一个n行n-1列原创 2007-03-20 23:43:00 · 3486 阅读 · 2 评论 -
[算法之分治法] 快速排序法
基本思想: 对输入的子数组list[p:r],找到一个基准数list[q],将数组list[p:r]分成三部分:list [p:q-1]、list[q] 和 list[q+1:r]。list[p:q-1]中所有元素均小于等于list[q],list[q+1:r]中所有元素均大于等于list[q]。然后 对list[p:q-1] 和 list[q+1:r] 进行递归运算即可。/原创 2007-03-20 23:38:00 · 1170 阅读 · 0 评论 -
[算法之动态规划] 基本思想
经常会遇到复杂问题不能简单地分解成几个子问题,而会分解出一系列的子问题。简单地采用把大问题分解成子问题,并综合子问题的解导出大问题的解的方法,问 题求解耗时会按问题规模呈幂级数增加。为了节约重复求相同子问题的时间,引入一个数组,不管它们是否对最终解有用,把所有子问题的解存于该数组中,这就是 动态规划法所采用的基本方法。 动态规划的实质是分治思想和解决冗余,因此,动态规划是一种将问题实例分解为更原创 2007-03-20 23:36:00 · 3480 阅读 · 0 评论 -
关于NP问题
数学上著名的NP问题,完整的叫法是NP完全问题,也即“NP COMPLETE”问题,简单的写法,是 NP=P?的问题。问题就在这个问号上,到底是NP等於P,还是NP不等於P。 NP里面的N,不是Non-Polynomial的N,是Non-Deterministic,P代表Polynomial倒是对的。NP就是Non-deterministic Polynomial的问题,也即是多项式复杂程度原创 2007-03-20 23:33:00 · 953 阅读 · 0 评论 -
[算法之动态规划] Dynamic Programming Algorithm for Edit-Distance
The words `computer and `commuter are very similar, and a change of just one letter, p->m will change the first word into the second. The word `sport can be changed into `spot by the deletion of原创 2007-03-20 23:32:00 · 1134 阅读 · 0 评论 -
[算法之归并排序] MergeSort
// 将a[p...r] 和a[r+1...q] 合并到 b[0...q-p]void Merge2Sort(int *a, int *b, int p, int r, int q){ int i = p, j = r+1, k = 0; while(ir && jq){ if(a[i] a[j]) b[k++] = a[i++]; else b[k++] = a[j++]原创 2007-09-21 21:42:00 · 847 阅读 · 0 评论