算法
文章平均质量分 56
用于大四期末复习
羊驼今天打代码了吗
NUIL
展开
-
算法期末复习总结 || 分治、蛮力、回溯、分支限界、贪心、动态规划算法分析和比较
文章目录一、回溯法1. 原理2. 解空间3. 算法框架1. 子集树2. 排列树二、分支限界法1. 原理2. 队列式与优先队列式3. 限界函数设计三、贪心算法1. 原理2. 求解问题应具有的性质3. 贪心准则4. 哈夫曼树四、算法比较1. 回溯法与蛮力法的区别2. 分支限界法与回溯法的区别3. 贪心法与回溯法区别4. 贪心法与分枝限界法区别一、回溯法1. 原理回溯法实际上一个类似穷举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”(即回退),尝试别的路径。回溯原创 2022-01-08 19:49:48 · 5891 阅读 · 1 评论 -
算法期末复习总结 || 分支限界(0/1背包)队列和优先队列
队列式struct NodeType{ int no; int i; int w; int v; int x[MAXN]; double ub;};void bound(NodeType &e){ int i=e.i+1; int sumw=w[i]; double sumv=v[i]; while((sumw+w[i]<=W)&&i<=n) { suw+=w[i]; sumv+=v[i]; i++; } if(i<原创 2022-01-08 08:46:01 · 219 阅读 · 0 评论 -
【分治 || 排序问题、查找问题、最大子序列和问题】
分治法、选择排序、冒泡排序、快速排序、二路归并、查找最大和次大元素、折半查找、查找第K小元素、寻找两个等长有序序列的中位数、求最大连续子序列和原创 2022-01-03 20:38:41 · 509 阅读 · 0 评论 -
分支限界法 || 队列式FIFIO求解0/1背包问题
分支限界法队列式FIFIO求解0/1背包问题代码#include<iostream>#include<queue>using namespace std;#define MAXN 105//问题表示int n = 3, W = 30;int w[] = { 0,16,15,15 };int v[] = { 0,45,25,25 };//结果表示int maxv = -9999;int bestx[MAXN]; //存放最优解int total = 1;//原创 2021-12-23 11:40:05 · 457 阅读 · 0 评论 -
算法期末复习总结 || 回溯法(0/1背包、装载、n皇后)
回溯法文章目录回溯法1. 回溯法的基本原理、解空间的概念以及算法框架(子集树、排列树)【基本原理】【解空间】【算法框架】1. 子集树2. 排列树2. 剪枝函数如何设计?回溯法相较于蛮力法的优势?3. 0/1背包问题4. 装载问题5. n皇后问题1. 回溯法的基本原理、解空间的概念以及算法框架(子集树、排列树)【基本原理】回溯法实际上一个类似穷举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”(即回退),尝试别的路径。回溯法搜索解空间时,通常采用两种策略【剪原创 2021-12-21 12:47:21 · 932 阅读 · 0 评论 -
算法期末复习总结 ||蛮力法(幂级空间、排列空间、图的深度优先、广度优先、时间复杂度分析)
蛮力法文章目录蛮力法1. 蛮力法的原理及特点2. 蛮力法的基本应用示例,掌握幂级空间和排列空间的构造【基本应用示例】1. 字符串匹配问题2. 最大子序列和【幂级空间】1. 求解幂级问题3. 图的深度优先和广度优先遍历算法4. 对蛮力法的时间/空间复杂度分析1. 蛮力法的原理及特点蛮力法是一种简单直接地解决问题的方法,通常直接基于问题的描述和所涉及的概念定义,找出所有可能的解。然后选择其中的一种或多种解,若该解不可行则试探下一种可能的解。蛮力法通常用于:搜索所有解空间:问题的解存在于规模不大的解空原创 2021-12-16 18:16:16 · 2068 阅读 · 0 评论 -
算法 || 蛮力法【求解最大子序列和】#05
求解最大子序列和【问题描述】给定一个有n个整数的序列,要求求出其中最大子序列的和【问题求解】如果扫描遇到负数,当前子序列和 thisSum 将会减小,若 thisSum 为负数,表明前面已经扫描的那个子序列可以抛弃了,重新开始下一个子序列的分析,并置thisSum为0。若这个子序列和thisSum不断增加,那么最大子序列和maxSum也不断增加。【代码】//求解最大子序列和//给定一个有n个整数的序列,要求求出其中最大子序列的和#include<iostream>using原创 2021-12-15 16:46:41 · 1110 阅读 · 0 评论 -
算法 || 蛮力法【字符串匹配问题】#04
字符串匹配问题【问题描述】对于字符串s和t,若t是s的子串,返回t在s中的位置(t的首字符在s中对应的下标),否则返回-1【问题求解】采用暴力法穷举求解,从s的每一个字符开始查找,看t是否会出现。当比较的两个字符不相同时,回退 i,j,重新查找。【代码】//字符串匹配//对于字符串s和t,若t是s的子串,返回t在s中的位置(t的首字符在s中对应的下标),否则返回-1#include<iostream>#include<string> using namespace原创 2021-12-15 15:45:20 · 747 阅读 · 0 评论 -
算法 || 分治法【寻找两个等长有序序列的中位数】#03
寻找两个等长有序序列的中位数目录寻找两个等长有序序列的中位数【问题描述】【算法讲解】【完整代码】【运行结果】【问题描述】对于一个长度为n的有序序列(假设均为升序序列)a[0…n-1],处于中间位置的元素称为a的中位数。设计一个算法求给定的两个有序序列的中位数。例如,若序列a=(11,13,15,17,19),其中位数是15,若b=(2,4,6,8,20),其中位数为6。两个等长有序序列的中位数是含它们所有元素的有序序列的中位数。例如a、b两个有序序列的中位数为11。 a=(11,13,15,17原创 2021-12-12 16:42:05 · 2949 阅读 · 3 评论 -
算法 || 分治法【寻找一个序列中第k小元素】#02
寻找一个序列中第k小元素目录寻找一个序列中第k小元素【问题描述】【算法详解】【Partition算法】【完整代码】【运行结果】【问题描述】对于给定的含有n元素的无序序列,求这个序列中第k(1≤k≤n)小的元素。【算法详解】利用分治法求解,类似于快速排序。将数据存放在数组a[0…n-1]中,递增排序,第k小的元素为 a[k-1] 。按照快速排序思想,利用 Partition 算法进行划分分解,递归地求解a[s…i-1]和a[i+1…t]两个子问题。情形1:如果数组中只有一个元素且为所求第k小元素原创 2021-12-12 15:35:54 · 8692 阅读 · 5 评论 -
算法 || 分治法【查找最大元素和次大元素)】 #01
分治法求解【查找第一大数和第二大数问题】目录分治法求解【查找第一大数和第二大数问题】【问题描述】【算法分析】分解:合并【代码】【问题描述】对于给定的含有n元素的无序序列,求这个序列中最大和次大的两个不同的元素。例如:(2, 5, 1, 4, 6, 3),最大元素为6,次大元素为5。【在无序数组a[low…high]中找到第一大和第二大的数。两数不同。】【算法分析】采用折半的方式,采用分治法求解。分解:情况1,如果数组a[low…high]只有一个数据,那么最大的数max1为a[low]。情原创 2021-12-12 11:21:12 · 5154 阅读 · 0 评论