算法设计与分析
MR. Dong
凡是决心取得胜利的人,是从来不说"不可能"的。
展开
-
作业调度
如果在单处理器上,有 n 个运⾏时间分别为 t ,t ,t , …, t 的已知作业,请考虑它们的调度问题。这些作业可以按任意顺序执⾏,⼀次只能执⾏⼀个作业。#include"stdio.h"#include"stdlib.h"typedef struct PCB //定义进程控制块{ char name[10]; //进程名 char state; //运行状态 int ArriveTime; //到达时间 int StartTime; //原创 2020-12-30 14:00:10 · 949 阅读 · 1 评论 -
谣言传播
有n个⼈,每个⼈都拥有不同的谣⾔。通过发电⼦信息,他们想互相共享所有的谣言。假定发送者会在信息中包含他已知的所有谣言,⽽且一个信息只有一个收信⼈。设计一个贪婪算法,保证在每个⼈都能获得所有谣言的条件假设共有3个联系人,联系人1传递信息给联系人2和3所有的时间分别为4和5;联系人2传送信息给联系人1和3所有的时间分别为2和6;联系人3传送信息给联系人1和2所有的时间均为2,则选择联系人3作为第一个传送谣言的人,可以使谣言传遍所有的人时间最短,为2#include <iostream>us原创 2020-12-30 13:59:40 · 1510 阅读 · 0 评论 -
斯坦纳树
Steiner树(斯坦纳树):4个村庄坐落在欧⼏⾥得平⾯上⼀个单位正⽅形的4个顶点上。要求⽤最短的公路⽹把它们连接起来,使得每对村庄之间都有⼀条连通的路径。求这样⼀个⽹络。提示:可以先考虑三个村庄的情况,然后扩展⾄四个村庄。#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std;#define N 15const int I原创 2020-12-30 13:59:02 · 1026 阅读 · 1 评论 -
二分搜索技术
给定已按升序排好序的 n 个元素 a[0:n-1],现要在这 n 个元素中找出一特定元素 x。输入:输入包括若干个用例,第一行为一个正整数 n 表示用例个数,接下来每个用例占两行,第一行为一个正整数 k 和 x,表示 k 个元素,要求查找 x,第二行为 k 个已排序正整数,输出:每个用例用一行输出找出的元素的位置和比较次数,用一个空格隔开,如果不存在,则位置用 0 表示。样例输入:45 31 2 3 4 56 72 3 4 6 8 1010 401 5 9 10 20 25 33原创 2020-12-30 13:58:26 · 830 阅读 · 0 评论 -
交替放置的碟子
首先把问题转化一下,用1表示黑碟子,0表示白碟子,那么目前的顺序是:1010…1010结果要求1都放在右边,0都放在左边。这个题目看起来很眼熟。看关键字:交换相邻的碟子,排好顺序。嗯,就是经常出现在面试中的冒泡排序了。为便于观察,假设目前有6个碟子:101010。使用冒泡排序,第一次迭代,碟子序列变为:010101,交换3次。在进行第二次迭代之前,观察一下。现在,不仅第一个碟子就位,最后一个也是了,因此第二次迭代只需要对第2到第5个进行排序,巧合的是,碟子[2->5]仍然是10交替出现,不过比原创 2020-12-30 13:57:50 · 1954 阅读 · 0 评论 -
最短路径数量
国际象棋中的车可以水平或竖直移到棋盘中同行或同列的任何一格。将车从棋盘的一角移到 另一对角,有多少条最短路径?路径的长度由车锁经过的方格数(包括第一格和最后一格)来度 量。使用下列两种方法求解该问题。#include<cstdio>#include<algorithm>#define maxn 50#define len 10000000000using std::swap;struct tnode{long long d1,d2;}f[maxn+10][maxn+10原创 2020-12-30 13:57:12 · 1196 阅读 · 0 评论 -
模式计算
在给定的数字列表中最经常出现的一个数值称为模式(mode)。例如,对于5,1,5,7,6,5,7来说,其模式是5。注意:如果若干个不同的值都是最经常出现的,它们中的任何一个都可以看作模式)#include<stdio.h>#define NR 100 int PresortMode(int *a,int n){ int i=0,maxlen=0,maxvalue,curvalue,curlen; while(i<n) { curlen=原创 2020-12-30 13:56:26 · 1357 阅读 · 2 评论 -
数字搜索问题
假设需要在一个 n x n 的矩阵中搜索一个给定数字,该矩阵每行每列 都按升序排列。int main(){ // 由于数组的定义时的下表不能为变量,所以牛客网中,若要求必须要求输入下表时,可用scanf输入, //也可直接在定义数组时,赋予初始常量值,系统会自动进行替换鉴别 //但其它地方要用到下表值,可在定义变量并给初始化值,也可手动直接给值,例如这道题 int n=5,i,j,k,temp; scanf("%d",&k); //scanf("%d",&n);//这句可省略原创 2020-12-30 13:55:29 · 1315 阅读 · 2 评论