算法设计与分析
文章平均质量分 53
wuthering_wind
即使一无所有,依然要脱颖而出
展开
-
打印图像的有关感想
有关打印图像的问题我记得我第一次接触打印图像的问题时,大概就是长方形,三角形,菱形等等。另外很多的复杂一点图像也是用这些基本的图像打印而成,因此这些简单的图形就显得格外重要。下面是我看到一些大佬的博客产生的一些想法。首先时一个引起思考的小程序:for(i=-5;i<=5;i++) { for(j=-5;j<=5;j++) { if(Math.abs(i)+Math.ab原创 2017-11-05 22:33:50 · 200 阅读 · 0 评论 -
子集和问题(回溯法)
1.问题描述:设集合S={x1,x2,…,xn}是一个正整数集合,c是一个正整数,子集和问题判定是否存在S的一个子集S1,使S1中的元素之和为c。试设计一个解子集和问题的回溯法。输入数据第1行有2个正整数n和c,n表示S的大小,c是子集和的目标值。接下来的1行中,有n个正整数,表示集合S中的元素。 是子集和的目标值。接下来的1 行中,有n个正整数,表示集合S中的元素。将子集和问题的解输出。当问题无...原创 2018-05-27 23:02:40 · 14661 阅读 · 3 评论 -
会场安排问题
1.问题描述:会场安排问题:假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的 贪心算法进行安排。(这个问题实际上是著名的图着色问题。若将每一个活动作为图的一个 顶点,不相容活动间用边相连。使相邻顶点着有不同颜色的最小着色数,相应于要找的最小 会场数。) 编程任务: 对于给定的k个待安排的活动,编程计算使用最少会场的时间表。Input 由文件input.t...原创 2018-05-05 22:53:02 · 635 阅读 · 0 评论 -
活动安排问题(贪心算法及证明)
会场安排问题(贪心算法):贪心算法:在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。2.相关代码:#include<stdio.h> #define M 11...原创 2018-05-05 14:47:29 · 30008 阅读 · 3 评论 -
删数问题(贪心算法)
1.问题描述:问题描述:给定n位正整数a,去掉其中任意k<=n个数字后,剩下的数字按原次序排列组成一个新的正整数,对于给定的n位正整数a和正整数k,设计一个算法找出剩下数字组成的新数最小的删数方案。对于给定的正整数a,编程计算删去k个数字后得到的最小数。输入文件示例:1785434输出文件示例:132.相关算法:#include<stdio.h>#define M 6int ...原创 2018-05-10 19:38:26 · 9723 阅读 · 3 评论 -
汽车加油问题(贪心算法)
1.问题描述:一辆汽车加满油后可行驶nkm。旅途中有若干加油站。设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。算法设计:对于给定的n和k个加油站位置,计算最少加油次数。数据输入:n:表示汽车加满油后可行驶nkm k:旅途中有k个加油站 k+1个整数:表示第k个加油站与第k-1个加油站之间的距离。第0个加油站表示出发地,汽车已加满油。第k+1个加...原创 2018-05-10 19:12:16 · 27405 阅读 · 5 评论 -
拦截导弹(动态规划)
导弹拦截问题:问题分析:想要求得最多可以拦截地导弹数量,其实就是求数组地最大递减序列。我们可以使用基于归纳法地递归很容易就可以写出相应地程序。但是在使用递归的过程中,有很多次重复的比较。因此使用动态规划法可以减少操作次数。使用动态规划法:首先建一个额外的数组count[]记录每个导弹到来时该系统的最大拦截数量。每次导弹到来时,b一定,可以比较target[a],target[b],(a<b)...原创 2018-05-01 15:19:55 · 3079 阅读 · 0 评论 -
编辑距离
编辑距离:给定两个字符串AA和BB,对于T我们允许三种操作:(1) 在任意位置添加任意字符(2) 删除存在的任意字符(3) 修改任意字符 问最少操作多少次可以把字符串AA变成BB? 问题分析:建立N[][]数组,N[i][j]代表AA[i]之前和BB[j]之前所有字符的最小编辑距离,问题从后往前依次分析情况可以分为4类: 1. AA或者BB字符 相等,N[i,j]等同于N[i,j] 2. 更改AA...原创 2018-04-30 23:38:59 · 139 阅读 · 0 评论 -
石子合并问题
相关代码:#include<stdio.h>#define M 200int sum (int x,int y,int m[200][200]){int all=0;int i;for (i=x;i<=y;i++) all+= m[i][i]; return all; } void getMax(int n,int m[200][200],int s[20...原创 2018-04-30 22:21:25 · 387 阅读 · 0 评论 -
整数排序问题
问题分析: 在编程时,有非常多类型的排序方法,但是不同的排序方法最终的运行时间也不相同。尤其是当规模趋近无穷大时,所用的时间的差别会变得非常的大。本题是举出堆排序和选择排序的例子,可以通过clock指针对两种排序进行时间的计算。相关代码:#define _CRT_SECURE_NO_DEPRECATE#include <stdio.h>#include <time...原创 2018-04-30 21:44:39 · 781 阅读 · 0 评论 -
输油管道问题
相关代码:#include <stdio.h>#include <stdlib.h>#include<math.h>#include<time.h>#define T 300int partition(int arr[], int low, int high){ int key; key = arr[low]; wh...原创 2018-04-30 21:26:23 · 1548 阅读 · 1 评论 -
c语言之邻接矩阵&最短路径&最小生成树
邻接矩阵&最短路径&最小生成树在对图的操作过程中,会有非常多灵活的操作,并且一个简单的操作会需要定义非常多的基础结构。下面是一个具有若干个主要功能的程序:图的邻接矩阵表示法,图的深度优先遍历,最小生成树的生成,最小路径的生成。此程序以邻接矩阵作为基础结构。下面是相关的程序:#include<stdio.h> #define MAX 20 #define MAXINT 1000typedef e原创 2017-12-20 19:47:49 · 3906 阅读 · 0 评论 -
数据结构之树的新建
数据结构之树的新建树这一章节,最最具有代表性的就是二叉树。当然,和树相关的就有一系列功能的实现。例如,树的新建,数的赋值,数的遍历,数的深度的计算等等。下面只谈一谈数的新建。下面是一段代码:void GreatBiTree(sTree root){ //将树根的引用传进来 int a; printf("请输入该节点的值\n"); scanf("%d",&(root原创 2017-11-23 23:34:35 · 477 阅读 · 0 评论 -
装载问题(回溯法)
1.具体问题:一批集装箱共n个要装上2艘载重量分别为c1和c2的轮船,其中集装箱i的重量为Wi且W1+W2+……+Wn<=c1+c2;试确定一个合理的装载方案使这n个集装箱装上这两艘轮船。2.问题分析: ...原创 2018-05-23 12:58:47 · 10098 阅读 · 1 评论