随笔分类 -  算法

用C/C++实现一些常见的算法
摘要:智能算法 蚁群算法 1 蚁群算法及其基本思想 蚁群算法是一种智能优化算法,通过蚁群优化求解复杂问题,ACO在离散优化问题方面有比较好的优越性。 基本思想(以旅行商问题为例) 设置多只蚂蚁,分头并行搜索。 每只蚂蚁完成一次周游后,在行进的路上释放信息素,信息素量与解的质量成正比。 蚂蚁路径的选择根据信 阅读全文
posted @ 2016-11-23 17:25 taoliu_alex 阅读(8031) 评论(0) 推荐(0)
摘要:智能算法 粒子群算法 1 粒子群算法是一种群智能算法,那么什么是群智能? 群智能由昆虫群体或其它动物社会行为机制而激发设计出的算法或分布式解决问题的策略。生物学家研究表明:在这些群居生物中虽然每个个体的智能不高,行为简单,也不存在集中的指挥,但由这些单个个体组成的群体,似乎在某种内在规律的作用下,却 阅读全文
posted @ 2016-11-22 09:23 taoliu_alex 阅读(1564) 评论(0) 推荐(0)
摘要:算法15 数论7 一些细节题 1 整除,求余数 算法导论:31.1-12 试写出计算β位整除除以短整数的高效算法,以及计算β位整数除以短整数的余数的高效算法。所给出的算法运行时间应为θ(β^2). 1 //位运算的乘法与除法 2 #include <stdio.h> 3 4 5 6 //位运算的乘法 阅读全文
posted @ 2016-10-11 11:56 taoliu_alex 阅读(386) 评论(0) 推荐(0)
摘要:算法15 数论6 素数,回文素数 分解质因素 阅读全文
posted @ 2016-10-10 17:23 taoliu_alex 阅读(241) 评论(0) 推荐(0)
摘要:算法16 数论5 最大公约数,最小公倍数 有一个难点就是stein算法的证明; 证明方式转自http://blog.csdn.net/ztj111/article/details/1905015 首先引进一个符号:g_c_d是greatest common divisor(最大公约数)的缩写,g_c 阅读全文
posted @ 2016-10-09 10:04 taoliu_alex 阅读(503) 评论(0) 推荐(0)
摘要:算法15 数论4 自守数 如果一个正整数的平方的末尾几位数等于这个数本身,那么这个数便称为自守数。 自守数有如下的一些性质 (1) 以自守数为后几位的两数相乘,结果的后几位仍是自守数; (2) n+1位的自守数出自n为的自守数。 (3) 两个n位子守数的和等于10的n次方加1. 我们给出两种自守数的 阅读全文
posted @ 2016-10-08 11:40 taoliu_alex 阅读(637) 评论(0) 推荐(0)
摘要:算法15 数论3 水仙花数 简单地说。三维正整数在树枝上等于其各位数字的立方之和,称为水仙花数; 同样我们也可以定义一些更高等级的水仙花数,比如4位的,例如1634,1634位1,6,3,4的四次方和。 1 // 2 /* 3 题目:水仙花数 4 author taoliu——alex 2016.1 阅读全文
posted @ 2016-10-07 16:33 taoliu_alex 阅读(326) 评论(0) 推荐(0)
摘要:算法16 数论2 亲密数 如果整数a的因子和等于整数b,整数b的因子和等于整数a,因子包括1但不包括本身,且a不等于b,则称a和b为亲密数对。 阅读全文
posted @ 2016-10-06 10:24 taoliu_alex 阅读(536) 评论(0) 推荐(0)
摘要:算法15 数论1 完全数 完全数是一些特殊的自然整数。完全数等于其所有因子之和。所谓因子是所有的可以整除这个数的数,而不包括这个数本身。 一些完全数的概念 (1)亏数:当一个自然数的所有因子之和小于该自然数,那么该自然数便是亏数; (2)盈数:当一个自然数的所有因子之和大于该自然数,那么该自然数便是 阅读全文
posted @ 2016-10-06 10:02 taoliu_alex 阅读(1212) 评论(0) 推荐(0)
摘要:算法14 B树 更详细的讲解见http://www.xuebuyuan.com/509072.html 一棵m阶的B 树 (m叉树)的特性,如下: (1)树中每个结点含有最多含有个孩子,即m满足:ceil(m/2)-1<=n<=m-1。 (2)除根结点和叶子结点外,其它每个结点至少有[ceil(m 阅读全文
posted @ 2016-10-05 17:33 taoliu_alex 阅读(345) 评论(0) 推荐(0)
摘要:算法13 动态规划矩阵链乘法 矩阵链乘法是动态规划里面使用到的一个例子 1 两个矩阵的计算 那么对于一个矩阵的乘法,首先如果是两个矩阵的乘法,那么如何实现呢? 注意到我们使用二维数组表示矩阵,但是二维数组不能作为函数的返回值。具体实现如下 1 #include <stdio.h> 2 #includ 阅读全文
posted @ 2016-10-05 17:31 taoliu_alex 阅读(2493) 评论(0) 推荐(0)
摘要:算法13 动态规划钢材裁剪 动态规划方法通常用来求解最优化问题。动态规划算法设计步骤: 1.刻画一个最优解的结构特征。 2.递归定义最优解的值。 3.计算最优解的值,通常采用自底向上的方法。 4.利用计算出的信息构造一个最优解。 文中给出了算法的伪代码,下面我们把递归,从顶到底,从底到顶的方法都实现 阅读全文
posted @ 2016-10-01 10:21 taoliu_alex 阅读(1191) 评论(0) 推荐(0)
摘要:算法12 约瑟夫环问题 1 首先我们来解决一个约瑟夫环的问题,再慢慢的深入。 问题描述: 罗马人攻占了桥塔帕克,41个人躲在一个山洞中,逃过了这场浩劫。这41人中,包括历史学家约瑟夫和他的一个朋友。剩余的39人为了表示不想屈服罗马人,决定集体自杀。大家想到了一个自杀方案,这41个人围城一个圆圈,由第 阅读全文
posted @ 2016-09-29 10:56 taoliu_alex 阅读(322) 评论(0) 推荐(0)
摘要:算法11 红黑树的实现 阅读全文
posted @ 2016-09-28 10:24 taoliu_alex 阅读(211) 评论(0) 推荐(0)
摘要:算法11 红黑树不带父结点指针的插入实现 阅读全文
posted @ 2016-09-27 21:45 taoliu_alex 阅读(300) 评论(0) 推荐(0)
摘要:算法10 二叉搜索树之基数树 基数树是用来保存和排列字符串,关于字典序有两条规则: 算法导论中给出这样的图,我们结合图来看 1. 当字符串长度相同时,从左向右逐个字符比较,左边的比右边的小。如011 < 100。 2. 字符串长度不同时,长度长的在字典序中值更大。如100 < 1011。 因此,根结 阅读全文
posted @ 2016-09-27 18:14 taoliu_alex 阅读(689) 评论(0) 推荐(0)
摘要:算法10 二叉搜索树存在重复数据插入的实现 当用TREE-INSERT将n个具有相同关键字的数据项插入到一棵初始为空的二叉查找树中时,该算法的渐近性能如何? 我们可以对TREE-INSERT做一些改进,即在第5行的前面测试key[z] = key[x],在第11行的前面测试key[z] = key[ 阅读全文
posted @ 2016-09-23 18:20 taoliu_alex 阅读(2940) 评论(0) 推荐(0)
摘要:算法10 二叉搜索树 搜索树数据结构支持许多动态集合操作,包括search,minimum,maximum,predecessor,successor,insert和delete等。 概念:二叉搜索树。对于任何节点x,其左子树中的关键字最大不超过x.key,其右子树中的关键字最小不低于x.key。其 阅读全文
posted @ 2016-09-22 20:23 taoliu_alex 阅读(361) 评论(0) 推荐(0)
摘要:二叉树的遍历不用栈和递归 转自:ACM之家 http://www.acmerblog.com/inorder-tree-traversal-without-recursion-and-without-stack-5988.html 我们知道,在深度搜索遍历的过程中,之所以要用递归或者是用非递归的栈方 阅读全文
posted @ 2016-09-21 21:57 taoliu_alex 阅读(1785) 评论(0) 推荐(0)
摘要:在这里我们理一遍二叉树的递归和非递归遍历 一.前序遍历 前序遍历按照“根结点-左孩子-右孩子”的顺序进行访问。 1.递归实现 1 void preOrder1(BinTree *root) //递归前序遍历 2 { 3 if(root!=NULL) 4 { 5 cout<<root->data<<" 阅读全文
posted @ 2016-09-20 22:49 taoliu_alex 阅读(164) 评论(0) 推荐(0)