算法
文章平均质量分 53
Be_Flamingo
这个作者很懒,什么都没留下…
展开
-
读书笔记:《编程之美》
《编程之美》读书笔记我所阅读的《编程之美》是由《编程之美》小组所编写,由电子工业出版社出版,出版时间为2018年11月。此书的由来是有关于微软的面试,后来被用来教授人们一些编程技巧。该书的作者们大多从游戏出发,提出问题,循循善诱,引导读者进行阅读,学习,编程。阅读的过程中不会感到枯燥,而会感到越发有趣,大部分的问题都会在最后配上可以实现的代码来帮助读者学习,简直就是从小白到大神的一条光明大道。本书其中一个题目就是控制CPU的占用率,这本是来自微软面试的一个问题,作者们尽管自有办法,但仍想从面试者那里看看原创 2021-06-07 16:21:13 · 1458 阅读 · 0 评论 -
图的m着色问题
1.问题给定无向连通图G和m种颜色,用这些颜色给图的顶点着色,每个顶点一种颜色。如果要求G的每条边的两个顶点着不同颜色。给出所有可能的着色方案;如果不存在,则回答“NO”。2.解析设G有n个顶点,将顶点编号为1,2…,n,则搜索空间为深度n的m 叉完全树,将颜色编号为1,2,…,m,结点<x1,x2,…,xk>表示顶点1的颜色x1,顶点2的颜色x2,…,顶点k的颜色xk3.设计#include <iostream>using namespace std;int m;//原创 2021-05-31 16:19:20 · 158 阅读 · 0 评论 -
最优前缀编码
1.问题构造最优前缀编码2.解析首先对一组数据进行排序,找出最小的两个数,然后构造出一棵二叉树,新的二叉树的值为两个子树的值的和,在原数据中去掉两个子树的数据并加入新树的数据。重复上诉步骤即可构造出最优前缀编码3.设计#include<iostream>using namespace std;#define N 3typedef struct Tree* TreeN;struct Tree{ double num = NULL; char letter = NULL;原创 2021-05-30 15:42:12 · 289 阅读 · 0 评论 -
装载问题
1.问题在不超过轮船载重量的前提下,将尽可能多的集装箱数目装上轮船2.解析思路:轻者先装,直到再装超过载重量C为止定理:对于任何整数k,轻者先装对k得到最优解。证明:(1)k=1,任何装法都是最优解,因此轻者先装也是最优解。(2)假设算法对于规模为k的输入都能得到最优解当k+1时,N={1,2,…,k,k+1},W={w1,w2,…,wk,wk+1}(w1<w2<…<wk<wk+1)从N中拿掉最轻的1,得到k规模:N’=N-{1}={2,3,…,k+1}W’=W原创 2021-05-17 16:09:50 · 193 阅读 · 0 评论 -
LCS与背包问题
1.问题LCS:背包问题:2.解析LCS:背包问题:3.设计LCS:X=<D, C, B, A>Y=<B, A, C>m=0-4n=0-3算法一:(1)i=1a)j=1 X.D<>Y.B :C[1,1]=max(C[1,0],C[0,1])=max(0,0)=0 删除yb)j=2 X.D<>Y.A :C[1,2]=max(C[1,1],C[0,2])=max(0,0)=0 删除yc)j=3 X.D<>Y.原创 2021-05-10 17:24:01 · 102 阅读 · 0 评论 -
矩阵链乘法
1.问题设 A1,A2,A3…An为 n 个矩阵的序列,其中 Ai为 Pi-1*Pi阶矩阵,这个矩阵链的 输入用向量P=<P1,P2…Pn>给出。给定向量 P,确定一种乘法次序,使得基本运算的总次数达到最小。2.解析3.设计P=<20,30,25,5,15,40>,n=5A1:20×30A2:30×25A3:25×5A4:5×15A5:15×40(1)r=1m[1,1]=0;m[2,2]=0;m[3,3]=0;m[4,4]=0;m[5,5]=0;原创 2021-04-26 18:07:37 · 154 阅读 · 0 评论 -
投资问题
1.问题设 m 万元钱,n 项投资,函数 fi(x)表示将 x 万元投入第 i 项项目所产生的效益,i=1,2,…,n.问:如何分配这 m 元钱,使得投资的总效益最高?2.解析3.设计k=1x=1xk=0~1,f1(0)=0,f1(1)=11,F1(1)=11,x1(1)=1x=2f1(2)=12,F1(2)=12,x1(2)=2x=3f1(3)=13,F1(3)=13,x1(3)=3x=4f1(4)=14,F1(4)=14,x1(4)=4x=5f1(5)=15,F1(5)=原创 2021-04-26 17:59:39 · 196 阅读 · 0 评论 -
寻找第k小个元素:特定分治策略
1.问题求n个数中第k小个数。2.解析3.设计#include<iostream>#include<algorithm>#include<math.h>using namespace std;int tmp(int a, int b) { //排序函数sort的第三个参数,在该题中用于将每一列的五个数从大到小排序 return a > b;}class FindK { //定义类,表示每一列的五个数public: FindK(){}原创 2021-04-20 08:18:31 · 152 阅读 · 0 评论 -
分治算法最近对问题
1.问题求图上的n个点中,距离最近的两个点的距离。2.解析首先将所有点按横坐标从小到大排序,要求整个区间的最近对,将初始坐标和终点坐标分别记为low和high,再找到中位数坐标mid,再分别递归地求[low,mid]和[mid,high]两个区间的最近对。其中,最近对还可能出现在[mid-d,mid+d]之间(d为两个小区间的最小最近对),在这之后要计算改区间的最小值再做比较选出较小值。3.设计#include<iostream>#include<math.h>#inc原创 2021-04-17 19:16:16 · 182 阅读 · 0 评论 -
二分归并排序
1.问题对数组中[1…n]n个数进行二分归并排序。将整个数组分成两个小问题,即对两组n/2个数据分别排序,再将这两组数据归并。通过递归的方式来实现。2.解析首先将整个数组分为[0…n/2]和[n/2+1…n]两部分,递归地继续对每一部分进行二分,直到只剩下1个数,再反递归地对每个子部分进行归并排序,可以采用第三个数组来进行操作,直到最后归并完[0…n/2]和[n/2+1…n]两部分后计算结束。3.设计#include<iostream>using namespace std;#de原创 2021-03-30 17:28:06 · 396 阅读 · 0 评论 -
顺序查找与二分查找
1.问题在一个排好顺序的数组中查找x,如果x在该数组中,则输出其下标,否则输出0。使用顺序查找的二分查找来分别完成2.解析顺序查找是对每一个数进行比较,直到找到该数,或者遍历以后未找到则输出0.二分查找是在数组有序的前提下,通过查找中间数,并与待查数比较以减小区间的方式,来找到该数。3.设计#include<iostream>#include<cstdlib>#include<ctime>using namespace std;#define numb原创 2021-03-22 17:21:14 · 170 阅读 · 0 评论