![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 66
dashan1990
河北大学……09届……计算机专业学生
展开
-
纠结的poj1573.。。
这个题写出来没用太多时间。。但是不知道怎么回事。。总是出现错误。。希望有时间的朋友们帮忙看看。。题目大意以及思路我写的很清楚。。http://acm.pku.edu.cn/JudgeOnline/problem?id=1573原题。。 C语言: Codee#12514//北京大学ACM poj1573//2010年8月3日//题目大意:一个机器人在一个格子中行走。。可能有两种情况:机器人行走N个指令出去。。情况2:先行走N个指令。。然后在行走M个指令,,也就是转圈//并且不会停下来了。。问题:输出的是哪一原创 2010-08-03 15:07:00 · 193 阅读 · 0 评论 -
以期望的线性时间做选择---求最小最大元素
<br />以线性时间求最小最大元素的选择问题的时间是线性的。下边的这个方法我们用到的是二分制的方法,它和前边我提到的快速排序的思想是差不多的,但是不同的是,此算法的思想虽然也是递归,但是我们只处理一半。。从而减少了我们所需要的时间。。关于代码,我还是直接贴出来了,希望可以深入体会。。C语言: Codee#12936//题目:寻找第几小元素 <br />//by 笨牛dashan<br />//完成时间: 2010.8待修改已完成。 <br />#include <stdio.h><br />#define原创 2010-08-18 17:46:00 · 773 阅读 · 1 评论 -
堆的排序
<br />关于堆的排序,主要是建堆与堆的保持的关系,对于建堆,我们是从下向上依次建立,而对于堆的保持则是从上向下进行,实现的关键仍然是递归,而对于最后的排序过程,只是将堆的最后一个元素取出,然后在进行保持,直至我们所需要的堆的元素只剩下一个的时候,程序结束,对于堆的排序仍然是可以最大也可以按小依次,而最小的我们将在后边的优先级队列中用到,下边还是代码,自己照着伪代码敲出来的,与我以前写的不一样,但是整体思想还是没有发生任何的变化,希望仔细体会。。。C语言: Codee#12905#include <std原创 2010-08-17 17:30:00 · 160 阅读 · 0 评论 -
最长公共子序列
<br />前段时间我写过最长递增子序列,我们用到的是动态规划的思想,今天谈的最长公共子序列仍然是动态规划的一个十分重要的一部分。结合算法导论的讲解,谈谈我自己的理解。求解的关键是描述的过程,先引进一个定理:<br />(lcs最优子结构)设x=(x1,x2,……,xm)和y=(y1,y2,……,yn)为两个序列,并设z=(z1,z2……,zk)为x和y的任意一个lcs.<br />1)如果xm=yn,那么zk=xm=yn而且zk-1是xm-1和yn-1的一个lcs;<br />2)如果xm!=yn,那么z原创 2010-08-22 10:19:00 · 252 阅读 · 0 评论 -
动态规划随记1
<br />动态规划和分治法一样,通过组合子问题的解,而解决整个问题的解。。<br /><br />动态规划重复求解公共的子问题。<br /><br />动态规划对每个子问题之求解一次,将其结果保存在一张表中,从而避免每次遇到各个问题时<br />重新计算答案。<br /><br />动该规划的算法:<br />1,描述最优解结构<br />2,递归定义最优解的值<br />3,按自底向上的方式计算最优解的值<br />4,由构造出的结果构造一个最优解<br />步骤一,最优子结构:<br />一个问题的最原创 2010-08-21 20:29:00 · 220 阅读 · 0 评论 -
贪心随记
<br />动态规划是解决贪心算法的基础,而贪心算法更好的减少了运行的时间。<br />开发贪心算法的步骤:<br />1)解决问题的最优子结构<br />2)设计出一个递归解<br />3)证明在递归的任一个阶段,最优选择总是贪心选择。那么做贪心选择总是安全的。<br />4)证明通过贪心选择,所有子问题(除一个以外)都是空。<br />5)设计出一个实现贪心策略的递归算法<br />6)将递归算法转换成迭代的算法<br /><br />而实际过程中我们经常简化这个步骤。通常直接做出贪心选择来构造子结构,原创 2010-08-23 21:25:00 · 240 阅读 · 0 评论 -
算法之----二项堆
<br />二项堆是依赖于二项树而实现的,对于二项树,算法导论上讲解的很清楚,在此不再一一说明,首先还是说几个比较重要的概念。<br />什么是度:<br /><br />注意。结点的度取决于T是有根树还是自由树。自由树中结点的度跟无向图一样,是相邻定点的个数<br />。而在有根树中,度指结点孩子的个数,结点的双亲不包括在内。。<br /> <br />有根树:一颗自由树,它有一个与其他不同的结点。这个特殊的顶点称为树的根,我们通常称<br />有根树的定点为结点。<br /> <br />根是树中唯一没原创 2010-09-04 16:24:00 · 530 阅读 · 0 评论 -
单纯型算法
<br />作为解决线性规划的一个十分有效的算法,单纯型算法是最古老的一种方法,但是也是比较实用的一种方法,运行时间最高可能达到指数级。关于单纯型算法,我觉得注意的其中一点就是要将线性规划转换成松弛型的增广矩阵的形式,做好基本的准备后,那么注意的就是主元换取的问题了,而主元换取我们强调的也是一个比较容易混淆的就是系数的问题,我们要想使最后的解达到我们所需要的,我们将不断的换取主元,不断的改变系数,直至目标函数中的基本变量的系数全部为负数的时候,那么程序也就运行结束,那么可能你就会问了,此时的最优解是多少呢,原创 2010-10-09 20:19:00 · 1174 阅读 · 0 评论 -
大数相乘
关于大数相乘同样在5月份的时候写过相关的代码,今天拿出来重新晒晒,大数相乘问题注意的一点就是进位的问题,还有我们需要的是不断的模拟,在纸上画画小的时候我们是怎么来算两个数相乘的,然后根据自己的思路就可以写出自己想要实现的部分了,好了,我还是直接写相关的代码吧,事先声明,本人的代码可能运算的时间效率比较低,我看过别人用傅里叶来做的,我明天再进行相关的更新,因为那些我还没有看,先奉上今天的代码。C语言: Codee#14295#include #include #include usingnamespacest原创 2010-10-11 22:09:00 · 369 阅读 · 0 评论 -
计数排序
<br />计数排序的基本思想史对每个输入x,确定出小于x的元素的个数。有了这一信息我们就可以把x直接放在他的最终输出的数组上,关于这个算法,我们定义了3个数组,一个是原数组,一个是存储数组,一个则是临时数组,计数排序没有什么深奥的,重要的是理解,现将代码贴出来,欢迎各路大牛拍砖。。C语言: Codee#12914#include <stdio.h><br />#include <string.h><br />#define MAX 100<br />int n;<br />voidcounting_sor原创 2010-08-17 21:55:00 · 229 阅读 · 0 评论 -
桶排序
<br />关于桶排序,我们书上提到的是用线性表来做,对于这个算法,可以很好的提高算法的运行时间,使其能达到线性时间。对于代码的实现部分,依然用到了计数排序的方法,定义一个结构体数组用于存储分类的数组。好了,我还是直接把实现的代码贴出来吧,代码有点问题,我会在这几天尽量改正,但思路肯定是没有问题的,看这个代码请尽量注重看思路。。<br /> C语言: Codee#12929//题目:桶排序 <br />//by 笨牛dashan<br />//完成时间: 2010.8<br />//完成状况:待修改。 <b原创 2010-08-18 16:31:00 · 261 阅读 · 0 评论 -
lp---对偶问题
关于对偶问题,在以前学过的网络流体现的比较清晰。我们求网络流的最大问题,我们可以求图的分割的最小容量。这就是一个十分明显的对偶问题,求最大转化为求割得最小,而对于lp问题,我们幸运的发现,所有的lp问题都可以转化为求对偶问题,而只是涉及相关的转化。针对对偶问题,我想说的是,对偶问题的最小解则是原问题的最大解,所有一定要记住这个关系,而对偶问题力求使我们所要解答的解最简化。。下面的是我在网上找到的一些相关的资料,讲解的很有道理,并且附有图解。。1.1 对偶问题的提出在第一章中我们研究过一个生产计划问题,其数学原创 2010-08-16 09:44:00 · 3569 阅读 · 1 评论 -
排序-----二分治
<br />关于二分治的排序,我们用到的是递归思想,直至数组只含有一个元素的时候,再利用合并的思想,根据预先设计好的排列方式进行代码的优化过程。对于合并的过程,首先应该计算数组被分开两端的分别长度,然后再定义两个数组,分别用于存储前后两个部分的元素,对于元素的进入,要进行所谓的正确方法,书上定义了一个末值标记点,但是我认为这是没有必要的,因为我们只需找到最后一个元素即可,然后将剩余的直接拿下来。。总之二分制的思想无非就是分和合,什么时候分,以及怎样去分这是关键,闲话少说,还是直接上代码吧;C语言: Code原创 2010-08-17 16:29:00 · 297 阅读 · 0 评论 -
堆的排序
<br />关于堆的排序,主要是建堆与堆的保持的关系,对于建堆,我们是从下向上依次建立,而对于堆的保持则是从上向下进行,实现的关键仍然是递归,而对于最后的排序过程,只是将堆的最后一个元素取出,然后在进行保持,直至我们所需要的堆的元素只剩下一个的时候,程序结束,对于堆的排序仍然是可以最大也可以按小依次,而最小的我们将在后边的优先级队列中用到,下边还是代码,自己照着伪代码敲出来的,与我以前写的不一样,但是整体思想还是没有发生任何的变化,希望仔细体会。。。C语言: Codee#12905#include <std原创 2010-08-17 17:33:00 · 195 阅读 · 0 评论 -
快速排序
<br />关于快速排序同样用到了我前边提到的那个二分法,我理解的快速排序的关键是将一个数组分为3部分,我们标记的元素作为单独的数组,里边只有一个元素,大于或者等于这个元素的数组作为另一部分,而小于这个元素的部分作为剩下的一部分,那么实现的关键就是不断的二分,直至只剩下1个元素的时候终止,然后回溯,利用递归,从而找到我们需要的部分,那么实现的关键是什么,当然是数组的如何划分部分,如何将数组化为3部分,这个则是快速排序的精华部分,同样,还是直接代码。。。C语言: Codee#12906#include <st原创 2010-08-17 19:06:00 · 234 阅读 · 0 评论 -
快速排序
关于快速排序同样用到了我前边提到的那个二分法,我理解的快速排序的关键是将一个数组分为3部分,我们标记的元素作为单独的数组,里边只有一个元素,大于或者等于这个元素的数组作为另一部分,而小于这个元素的部分作为剩下的一部分,那么实现的关键就是不断的二分,直至只剩下1个元素的时候终止,然后回溯,利用递归,从而找到我们需要的部分,那么实现的关键是什么,当然是数组的如何划分部分,如何将数组化为3部分,这个则是快速排序的精华部分,同样,还是直接代码。。。C语言: Codee#12906#include intpartit原创 2010-08-17 19:07:00 · 218 阅读 · 0 评论 -
stooage排序
<br />对于这个排序的算法。我真的解释不清楚,看着伪代码将代码敲出来了。并且能很好的实现排序过程,仔细想想自己好像明白是怎么回事,但是不知道怎么来表达出来,我还是先把我写的代码贴出来,争取大家一起理解理解,我也在看看这个代码。。争取过段时间有个满意的答复。。C语言: Codee#12907#include <stdio.h ><br />#include<stdlib.h><br />voidstooge_sort(int*a,inti,intj)<br />{<br /> inttemp;<br原创 2010-08-17 20:08:00 · 246 阅读 · 0 评论 -
堆的排序
<br />关于堆的排序,主要是建堆与堆的保持的关系,对于建堆,我们是从下向上依次建立,而对于堆的保持则是从上向下进行,实现的关键仍然是递归,而对于最后的排序过程,只是将堆的最后一个元素取出,然后在进行保持,直至我们所需要的堆的元素只剩下一个的时候,程序结束,对于堆的排序仍然是可以最大也可以按小依次,而最小的我们将在后边的优先级队列中用到,下边还是代码,自己照着伪代码敲出来的,与我以前写的不一样,但是整体思想还是没有发生任何的变化,希望仔细体会。。。C语言: Codee#12905#include <std原创 2010-08-17 17:32:00 · 207 阅读 · 0 评论 -
基数排序
<br />本来应该是上午应该更新的。。但是我们的csdn太忙,登录半天就是登录不上,所以,直到现在才更新。。闲话少说,还是正事为主。。<br />基数排序是古老打表的一种,是桶排序的特殊情况,在基数排序中,我们用到了计数排序的相关的知识,那么还是先说一下基数排序的大体思路,按我的理解,就是排序就是从个位数依次至最高位,根据各个位数上的大小不同分别排序,直至根据最高位上的各个数字的不同排序后,就是我们所得到的排序好的顺序,算法的重要性是按位排序要稳定,关于按位排序我们可以利用字符串的二维数组,或者采用我下边原创 2010-08-18 15:08:00 · 252 阅读 · 0 评论 -
大数相加的问题
<br /> <br />大数相加的问题我是今年的5月份的时候曾经写过相关的代码,但是今天用到的时候却编译怎么也通不过去,后来发现在初始化的时候发现了错误,不过整体而言,大数相加是大数运算中应该是最简单的一种了吧。只需注意进位即可,还有就是用字符串来处理(估计是废话,因为谁都知道),那么我们需要注意的又是什么呢,当然,注意的就是细节问题,首先我们应该对输入的字符进行倒置,为什么这样做,想想小学时你是怎么运算的就应该知道了,还有就是进位,这两个应该是关键的两点,剩下的就是输出,想想输出应该怎么输出,需要注意下原创 2010-10-11 21:03:00 · 397 阅读 · 0 评论