常见算法
文章平均质量分 76
yy_qlxm
这个作者很懒,什么都没留下…
展开
-
不用除法和取余做十进制到二进制十六进制的转换
一、基本理论1、移位:当一个数左移时,高位舍弃,低位补0;右移时,若最高位为1,则补1,否则补0。二、十进制数转为二进制1、思想:给定一个十进制数,我们可以通过移位来得到其对应的二进制数。 例如:对于long类型的十进制数1024,在32位计算机上,其二进制表示为 (00000000 | 00000000| 00000100|00000000)原创 2015-07-07 21:15:56 · 1771 阅读 · 0 评论 -
C++小练习—Dijkstra
1、问题描述给定一个有向带权图 G=(V,E),其中每条边的权是一个非负实数。另外,给定V中的一个顶点,称为源点。计算从源点到所有其它各个顶点的最短路径长度,这里的路径长度是指路径上经过的所有边上的权值之和。2、算法设计1)算法思想按各个顶点与源点之间路径长度的递增次序,生成源点到各个顶点的最短路径的方法,即先求出长度最短的一条路径,再参照它求出长度次短的一条路径原创 2015-01-23 17:17:52 · 301 阅读 · 0 评论 -
背包问题总结
摘自Tianyi Cui童鞋的《背包问题九讲》,稍作修改,方便理解。01背包问题描述已知:有一个容量为V的背包和N件物品,第i件物品的重量是weight[i],收益是cost[i]。限制:每种物品只有一件,可以选择放或者不放问题:在不超过背包容量的情况下,最多能获得多少价值或收益相似问题:在恰好装满背包的情况下,最多能获得多少价值或收益这里,我们先讨论在不超过背包容量的情况原创 2015-01-19 19:18:16 · 617 阅读 · 0 评论 -
C++小练习—找零钱问题
采用贪心算法解决找零钱问题,如果需要找零57.8元,零钱数分别为(10元、5元、1元、5角、2角、1角)1、采用元为单位编写程序如下所示:得到的输出结果为:正如红色标记所标示的地方出现错误。2、错误的原因单步调试程序发现当输入57.8时,计算机实际存储的是57.799999,以致最后剩下的0.1元变成0.099999,0.099999/0.1=0。原创 2015-01-15 17:19:57 · 5452 阅读 · 1 评论 -
C++小练习—会场安排
1、问题描述设有n个会议,需要使用同一个资源(如会议室),同一时间内该会议室只能被一个会议占用。每个会议i都有要求使用该资源的起始时间s和结束时间e,且s<e。如果选择了会议i使用会议室,则它在半开区间[si,ei)内占用该资源。如果[si,ei)与[sj , ej)不相交,则称会议i与会议j是相容的。会场安排问题要求在所给的会议集合中选出最大的相容活动子集,也就是可以尽原创 2015-01-21 19:27:08 · 1794 阅读 · 0 评论 -
约瑟夫环方法小结
题目:0,1,……,n-1这n个数排成一个圈,从数字0开始每次从这个圈里删除第m个数字。求这个圈里剩下的最后一个数。解一:从题意可以看出这是一个循环链表的题目,我们可以建立一个循环链表,然后从头开始遍历,遍历到第m-1个节点时,删除其后一个节点,直到只含有一个节点,输出该节点的值即可。代码:typedef struct node//建立链表{ node *next;原创 2015-08-25 22:14:17 · 421 阅读 · 0 评论 -
排序算法总结
一、直接插入排序1、基本思想:对于数组a[1...n],初始时,a[1]为一个有序区间,a[2...n]为无序区间,然后依次将a[2],a[3].....a[n]插入到有序区间内。2、代码/*直接插入排序*/void InsertSort(int arr[], int length){ for (int i = 1; i < length; i++) { int temp原创 2015-07-06 17:07:48 · 370 阅读 · 0 评论 -
奇数幻方构造
题目:给定一个奇数n,比如n=3,生成1到n平方的数,如1到9,填入九宫格,使得横竖斜的和都相等。思想: n奇数幻方口诀:1. 数字1放在第一行中间2. 依次放在上一个数的右上角2.1如果右边出去了就回到左边(3,4)2.2 如果上面出去了就放下面(1,2)2.3 如果右上角有了就放在这个数的下面(参考5,6) 例如:n=38 1 63原创 2015-09-10 17:28:17 · 761 阅读 · 0 评论