
算法设计与分析
ai_yue
这个作者很懒,什么都没留下…
展开
-
欧几里得算法(辗转相除法)求最大公约数代码
求解最大公约数依据如下定理:gcd(a,b) = gcd(b,a mod b) (不妨设a>b 且r=a mod b ,r不为0);两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数。代码:非递归算法:int gcd(int a,int b) { int c; while(b>0) { c=a%b;//...原创 2018-11-13 15:16:44 · 1502 阅读 · 1 评论 -
汉诺塔问题
问题描述: 相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。...原创 2018-11-13 15:47:55 · 260 阅读 · 0 评论 -
矩阵相乘问题(分治法求解)
采用蛮力+分治进行求解:矩阵相乘公式:代码:public class Matrix { //初始化一个随机nxn阶矩阵 public static int[][] initializationMatrix(int n){ int[][] result = new int[n][n]; for(int i = 0...转载 2018-11-21 20:29:36 · 5522 阅读 · 0 评论 -
字符串匹配问题(BF算法、KMP算法)
问题:给定两个字符串S和T,在主串S中查找子串T的过程称为串匹配,T称为模式。BF算法(朴素模式匹配):BF算法思想: 就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。代码实现:int BF(char S[],ch...原创 2018-11-17 10:18:42 · 4087 阅读 · 0 评论 -
排序问题(蛮力法,分治法)
蛮力法:选择排序法:算法思想:在剩余序列中选出最小(或最大)的关键字,和剩余序列的第一个关键字交换位置,依次选择下去(每次扫描结束找出最小的一个元素依次放在前面的位置),直至使整个序列有序。代码实习:#include<iostream>using namespace std;void print(int a[], int n){ for(int j...原创 2018-11-17 10:41:21 · 2691 阅读 · 0 评论 -
0/1背包问题(蛮力法)
问题描述:给定n个重量为{w1,w2,w3,....,wn}、价值为{v1,v2,v3,...,vn}的物品和一个容量为C的背包,0/1背包问题是求解这些物品中的一个最有价值的子集,并且要能够装到背包中。蛮力法:算法描述:使用蛮力法解决0/1背包问题,就是将所有的物品装入背包的可能全部列举出来(背包问题的蛮力解法是穷举这些物品的所有子集,找出能够装到背包中的所有子集,并在这些子集中...转载 2018-11-17 11:21:46 · 8983 阅读 · 1 评论 -
任务分配问题
问题描述:假设有n个任务需要分配给n个人执行,每个人只执行一个任务,每个任务只由一个人执行。第i个人执行第j个任务的成本是Cij(1<=i,j<=n), 求解初最小成本的分配方案。蛮力法:算法描述:用矩阵表示任务分配问题,矩阵元素Cij(1<=i,j<=n)表示人员i执行任务j的成本。任务分配问题转化为,在矩阵中的每一行选取一个元素,这些元素分别属于不同的列。用...转载 2018-11-17 11:46:25 · 11092 阅读 · 0 评论 -
最近点对问题(分治法)
问题:平面最近点对问题是指:在给出的同一个平面内的所有点的坐标,然后找出这些点中最近的两个点的距离.代码:#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using n...原创 2018-11-27 20:22:13 · 1530 阅读 · 0 评论