算法分析与设计
炸鸡和薯条
这个作者很懒,什么都没留下…
展开
-
算法分析与设计——最大子段和(动态规划)
给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时,定义子段和为0。要求算法的时间复杂度为O(n)。输入格式:输入有两行:第一行是n值(1<=n<=10000);第二行是n个整数。输出格式:输出最大子段和。输入样例:在这里给出一组输入。例如:6-2 11 -4 13 -5 -2输出样例:在这里给出相应的输出。例如:...原创 2020-12-29 22:59:14 · 1036 阅读 · 2 评论 -
算法分析与设计——八皇后问题(回溯法)
在国际象棋中,皇后是最厉害的棋子,可以横走、直走,还可以斜走。棋手马克斯·贝瑟尔 1848 年提出著名的八皇后问题:即在 8 × 8 的棋盘上摆放八个皇后,使其不能互相攻击 —— 即任意两个皇后都不能处于同一行、同一列或同一条斜线上。例如: 现在我们把棋盘扩展到n×n的棋盘上摆放n个皇后,请问该怎么摆?请编写程序,输入正整数n,输出全部摆法(棋盘格子空白处显示句点“.”,皇后处显示字母“Q”,每两个字符之间空一格)。输入格式正整数n(n>0)输出...原创 2020-12-19 14:39:11 · 1561 阅读 · 1 评论 -
算法分析与设计——最佳调度问题(回溯法)
假设有n(n<=20)个任务由k(k<=20)个可并行工作的机器完成。完成任务i需要的时间为ti。 试设计一个算法,对任意给定的整数n和k,以及完成任务i 需要的时间为ti ,i=1~n。计算完成这n个任务的最佳调度,使得完成全部任务的时间最早。输入格式:输入数据的第一行有2 个正整数n和k。第2 行的n个正整数是完成n个任务需要的时间。输出格式:将计算出的完成全部任务的最早时间输出到屏幕。输入样例:在这里给出一组输入。例如:7 32 14 4 16 ...原创 2020-12-17 23:33:24 · 2364 阅读 · 0 评论 -
算法分析与设计——递归与尾递归
什么是递归?递归最恰当的比喻,就是查词典。我们使用的词典,本身就是递归,为了解释一个词,需要使用更多的词。当你查一个词,发现这个词的解释中某个词仍然不懂,于是你开始查这第二个词,可惜,第二个词里仍然有不懂的词,于是查第三个词,这样查下去,直到有一个词的解释是你完全能看懂的,那么递归走到了尽头,然后你开始后退,逐个明白之前查过的每一个词,最终,你明白了最开始那个词的意思。接下来,我们从递归的经典示例来理解。斐波那契数列(Fibonacci Sequence):long fibonacci(i原创 2020-11-27 16:28:55 · 260 阅读 · 0 评论 -
算法分析与设计——最大子段和问题(递推法)
最大子段和问题。给定由n个整数组成的序列,求序列中子段的最大和,若所有整数均为负整数时定义最大子段和为0。例如, 当(a1,a2,a3,a4 ,a5,a6)=(-2,11,-4,13,2,-5,-2)时,最大子段和为: a2+a3+a4=20输入格式:第一行输入整数个数n(1≤n≤10000),再依次输入n个整数。输出格式:输出第一行为最大子段和,第二行为子段第一个数和最后一个数在整个序列中的位序。输入样例1: 6-2 11 -4 13 -5 -2输出样例1:2原创 2020-11-16 23:03:21 · 734 阅读 · 0 评论 -
算法分析与设计——排序算法效率的比较
本文主要是比较冒泡排序、选择排序、 希尔排序、快速排序,这四种不同的排序过程的运行时间。为了消除数据之间差异导致排序效果的影响,四种排序均使用相同的数组进行排序。为了使运行时间的结果差异更明显,数组长度设为100000(为了防止数组长度溢出,如果使用数组的话,建议定义全局变量。或者使用堆栈、vector等动态内存分配),数组元素取值范围是在[0, 100000]之间的随机正整数。冒泡排序:void BubbleSort(long int a[],int len){//冒泡排序 for(int原创 2020-11-15 20:08:53 · 624 阅读 · 0 评论