![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
ddhdzt
编程是一种艺术
展开
-
变治法
第六章 变治法书中开头第一句话:生活的秘密在于用一个烦恼代替另一个烦恼。变治法:变,将问题的实例变得更容易求解;治,在对实例进行求解。变治思想主要有3中类型:1,变换为同样问题的一个更简单或者更方便的实例----------我们称之为实例化简2,变换为同样实例的不同表现-------------------我们称之为改变表现3,变换为另一个问题的实例,这种问题的算法是已知的原创 2015-11-02 20:18:20 · 3442 阅读 · 0 评论 -
关节点算法
总结一下关节点算法:主要分为三部分:1.叶子节点一定不是关节点2.根节点是一个关节点当他有多个孩子节点时3.中间节点时一个关节点当它的子树没有回边到它的祖先节点见代码。邻接表表示法建树struct Node{ //边表节点 int adjvex; //改弧所指向的顶点的位置 Node *next; //指向下一条弧的指针原创 2015-11-02 20:02:01 · 1590 阅读 · 0 评论 -
栈--数组存储--Java实现
栈 是一种基于后进先出(LIFO)的数据结构,其他就不介绍了。定义了两个私有变量,数组a和元素个数Nvoid ResizingArrayStack():初始化栈int size(): 返回栈的元素个数boolean isEmpty(): 判断栈是否为空void resize(int):调整栈的大小push(Item):压栈pop():出栈peek():返回栈顶元素原创 2015-12-30 20:46:44 · 594 阅读 · 0 评论 -
汉诺塔问题
汉诺塔问题:1.有三个杆子A,B,C,A杠上有若干碟子2.每次移动一块碟子,小的只能叠在大的上面3.把所有碟子从A杆全部移动到C杆上解题思路:递归思想。当 n = 1时,将碟子直接从A移动到C当n != 1时 1)将n-1个碟子通过C从A移动到B 2)移动第n个碟子从A移动到C 3)将n-1个碟子通过A从B移动到C代码如下:publ原创 2016-01-09 11:35:02 · 354 阅读 · 0 评论 -
大整数乘法---分治
分治法:1 将问题的实例划分成同一个问题的较小的实例,最好拥有同样的规模2 对这些较小的实例求解(一般使用递归方法,但在问题规模足够小的时候,可能会利用另一个算法)3 如果必要的话,合并这些较小问题的解,以得到原问题的解。自己理解看来,首先分治法重点的步骤在于合并,因为小问题求解肯定是很简单的,重点步骤在于合并小问题得到原问题的解。大整数问题计算公式:a = a原创 2016-01-12 21:09:28 · 590 阅读 · 0 评论 -
哈夫曼树---贪婪法
哈夫曼算法第一步:初始化n个单节点的树,并为它们标上字母表中的字符。把每个字符的概率记在树的根中,用来指出树的权重(更一般地来说,树的权重等于树中所有叶子节点的概率之和)第二步:重复下面的步骤,直到只剩一棵单独的树。找到两棵权重最小的树,把它们作为新树中的左右子树,并把其权重之和作为新的权重记录在新树的根中。上面的算法所构造的树称之为哈夫曼树。哈夫曼节点代码:public cl原创 2016-01-12 21:30:41 · 454 阅读 · 0 评论 -
粒子群算法初体验
本文参考别人的文章http://www.cnblogs.com/BreezeDust/p/3354769.html 简介 粒子群优化算法(PSO)是一种进化计算技术(evolutionary computation),1995 年由Eberhart 博士和kennedy 博士提出,源于对鸟群捕食的行为研究 。该算法最初是受到飞鸟集群活动的规律性启发,进而利用群体智能建立原创 2016-02-20 15:32:53 · 723 阅读 · 0 评论 -
运筹学学习
运筹学,Operational Reaserch,简称O.R.定义:运筹学是一门应用于管理有组织系统的科学运筹学为掌管这类系统的人提供决策目标和数量分析的工具运筹学用数学方法研究经济、民政和国防等部门在内外环境的约束条件下合理分配人力、物力、财力等资源,使实际系统有效运行的技术科学,它可以用来预测发展趋势,制定行动规划或优选可行方案基本特征和方法:1.系统的原创 2016-03-15 15:11:23 · 1518 阅读 · 2 评论 -
堆、堆排序和优先队列
堆1.堆排序同样具有空间原址性:任何时候都只需要常熟个额外的元素空间存储临时数据。因此,堆排序是集合了目前已经讨论的两种排序算法优点的一种排序算法2.堆的用途:排序优先队列3堆是一个数组,可以看成是一个近似的完全二叉树,树上的每个节点都对应数组的一个元素。除了最底层外,该树是完全充满的,而且是从左至右填充。 A.length通常给出数组元素的个数 A.heap-si原创 2015-11-17 13:35:48 · 351 阅读 · 0 评论 -
组合问题---递归实现
先写一下自己的思路:写递归函数,一定要确定参数,有以下三个参数:String str 字符串int num 要获取的字符数String temp 已经获取到的字符不多说了,直接见代码:public class Combine { private List listStr = new ArrayList(); pu原创 2015-10-09 00:21:36 · 467 阅读 · 0 评论 -
使用栈来检测回文字符串
/* *@author ddhdzt *通过栈的使用来判断回文字符串*/#include#includeint main(){ char a[101], s[101]; int i, len, mid, next, top; gets(a); len = strlen(a); mid = len / 2 -1; //入栈 top = 0; for(i=0; i原创 2014-08-28 16:11:18 · 653 阅读 · 0 评论 -
分治法Devide-and-Conquer
分治算法一般分为3个步骤:1.划分问题:把问题的实例划分为子问题2.递归求解:递归解决子问题3.合并问题:合并子问题的解得到原问题的解最大连续和问题#includeusing namespace std;int maxsum(int* A, int x, int y){ int i, m, v, L, R, max; if(y-x == 1) return A[原创 2015-10-02 16:08:43 · 449 阅读 · 0 评论 -
冒泡排序
不想多说,直接上代码。*1.外循环,pass,总送len-1 轮*2.内循环,每次将最大的数放在最后*/void bubble_sort(int* A, int len){ int temp = 0; for(int pass = 1; pass < len; pass ++){ for(int i=0; i < len - pass; i++){ if(A[i] >原创 2015-10-20 19:15:07 · 235 阅读 · 0 评论 -
递归--快速排序
写代码的话,首先确定递归的三个参数,分别是数值,左边界,右边界void quick_sort(int*A, int l, int r){ if(r > l){ int mid = A[l]; int i = l, j = r; while(i < j){ while(i = mid){ j--; } if(i < j){ A[i] = A[j];原创 2015-10-06 18:29:46 · 290 阅读 · 0 评论 -
分治法--归并排序
归并排序,简单,直接见代码:void merge_sort(int* A, int l, int r, int* T){ if(r - l > 1){ int m = (l+r) >> 1; merge_sort(A, l, m, T); merge_sort(A, m, r, T); int i = l, j = m, k = l; while(i < m && j <原创 2015-10-06 18:18:38 · 263 阅读 · 0 评论 -
插入排序
插入排序提一下的是减治法中的减常量技术将第n个数插入一个A[n-1]有序的数组中,见代码:#includeusing namespace std;/*算法思想*外层for循环,i = 1 to n-1*内层for循环,j = i - 1;*/void insert_sort(int* A, int len){ int temp = 0; int j=0; for(int原创 2015-10-20 20:20:31 · 216 阅读 · 0 评论 -
B树学习----查询 插入 删除
参考算法导论第三版1.B树的定义任何和关键字相联系的“卫星数据”将于关键字一样存放在同一个节点中。一棵B树T是具有以下性质的有根树(根为T.root):1.每个节点x都有下面属性:a. x.n, 当前存储在节点x中的关键字个数。b. x.n, n个关键字本身x.key1, x.key2, ..., x.keyz, ..., x.keyx.n, 以非降序存放,是的x.ke原创 2015-11-06 19:24:21 · 2353 阅读 · 0 评论 -
排列组合问题(n取m)
首先先写一下自己的感想:代码运行效率快,但是难以理解,且很难写,非递归算法。组合算法思路:1.建立一个新数组,其下标表示1到m个数,数组元素的值为1表示其下标 代表的数被选中,为0则没选中。2.初始化,将数组前n个元素置1,表示第一个组合为前n个数。3.从左到右扫描数组元素值的“10”组合,找到第一个“10”组合后将其变为 “01”组合,同时将其左边的所有“1”全部移动到数原创 2015-10-07 13:04:56 · 978 阅读 · 1 评论 -
解密QQ号——队列
解码规则:删除第一个数,原创 2014-08-24 15:37:14 · 513 阅读 · 0 评论