
算法设计与分析
文章平均质量分 57
算法设计与分析
努力努力在努力(奋斗版)
非常感谢大家的认可与喜欢,又是励志成为最受广大学生热爱的博主的一天,谢谢大家的关注与支持!期待大家的投稿,让我们一起努力!
展开
-
C++ 算法设计与分析 地图着色问题(中国+美国)
地图着色问题(Graph Coloring Problem, GCP) 又称着色问题,是最著名的NP-完全问题之一。给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色。是否有一种着色法使G中每条边的2个顶点着不同颜色。若一个图最少需要m种颜色才能使图中每条边连接的2个顶点着不同颜色,则称这个数m为该图的色数。回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就原创 2022-06-27 15:00:00 · 5642 阅读 · 0 评论 -
算法-基于比较的排序算法的实现和性能比较
常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。原创 2022-06-16 22:08:52 · 597 阅读 · 1 评论 -
N皇后问题——递归与非递归
输入一个N,找出所有在N行N列的棋盘摆放N个皇后的方法。原创 2022-05-09 23:16:12 · 1021 阅读 · 0 评论 -
TSP问题的回溯法【旅行商问题】
了解回溯法回溯法,又叫试探法,是一种寻找最优解的暴力搜寻法。但是,由于暴力,回溯法的时间复杂度较高,因此在比较一些数字较大的问题时,比如上次我们提到的最短路径问题等,运行时间一般比较长。在回溯法中,深度优先搜索是一种很重要的工具。我们知道,回溯法基本思想是:(1)针对具体问题,定义问题的解空间;(2)确定易于搜索的解空间结构(数据结构的选择)。(3)一般以DFS的方式搜索解空间。(4)在搜索过程中,可以使用剪枝函数等来优化算法。(剪枝函数:用约束函数和限界函数剪去得不到最优解的子树,统称为剪原创 2022-06-16 22:25:27 · 5855 阅读 · 0 评论 -
0-1背包问题——回溯与分支限界
回溯法的求解目标是找出解空间中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。先进先出(FIFO)队列式:在先进先出的分支限界法中,用队列作为组织活结点表的数据结构,并按照队列先进先出的原则选择结点作为扩展结点。回溯法以深度优先的方式搜索解空间,而分支限界法则以广度优先或以最小耗费优先的方式搜索解空间。由于求解目标不同,导致分支限界法与回溯法对解空间的搜索方式也不相同。常见的两种分支限界法。..原创 2022-05-09 21:52:29 · 2283 阅读 · 1 评论 -
多机调度问题【贪心算法】
多机调度问题思路1.把作业按加工所用的时间从大到小排序2、如果作业数目比机器的数目少或相等,则直接把作业分配下去3、 如果作业数目比机器的数目多,则每台机器上先分配一个作业,如下的作业分配时,是选那个表头上 s 最小的链表加入新作业可以考虑以下的贪心策略:(1)最长处理时间作业优先的贪心选择策略。(2)最短处理时间作业优先的贪心选择策略。(3)作业到达时间优先的贪心选择策略。*贪⼼策略:优先处理花费时间长的任务,这样可以减少短任务的等待时间.问题描述形式:有n个任务,m台机器,n&g原创 2022-04-30 21:42:58 · 7019 阅读 · 0 评论 -
Prim算法、优先队列【贪心算法】
Prim算法、优先队列【贪心算法】贪心算法的本质是:一个问题的局部最优解,也是该问题的全局最优解。最小生成树的最优子结构性质:假设一个无向图包含两部分A,B,其中A为最小生成树部分,B为剩余部分,则存在以下性质:该无向图中一个顶点在A部分,另一个顶点在B部分的边中,权值最小的边一定属于整个无向图的最小生成树,即部分最小权值是整个最小生成树的局部最有解,该性质符合贪心算法的特点。Prim算法基于最小生成树的该性质,使用prim算法来求解最小生成树。贪心算法属性:一个局部全优解,也是全局全优解思想:原创 2022-04-30 21:15:25 · 2693 阅读 · 0 评论 -
部分背包问题和最优装载问题【贪心算法】
部分背包问题和最优装载问题 部分背包问题部分背包问题介绍首先介绍下0-1背包问题。假设一共有N件物品,第 i 件物品的价值为 Vi ,重量为Wi,一个小偷有一个最多只能装下重量为W的背包,他希望带走的物品越有价值越好,请问:他应该选择哪些物品?0-1背包问题的特点是:对于某件(更适合的说法是:某类)物品,要么被带走(选择了它),要么不被带走(没有选择它),不存在只带走一部分的情况。部分背包问题代码实现【Java】package day1.java;import java.util.原创 2022-04-29 22:16:06 · 2249 阅读 · 0 评论 -
哈夫曼树【贪心算法】
哈夫曼树【贪心算法】介绍具体的节点和树的算法的构造:一棵树有N个节点,所以节点和树的关系是:多对一的关系。class Node{/节点属性/weight;parent;lchild;rchild;value;/构造函数初始化/public Node(){weight=0;parent=-1;lchild=-1;rchild=-1;value=0;}/节点赋值/public Node(weight,parent,lchild,rchild,value){this.w原创 2022-04-29 21:15:47 · 1166 阅读 · 0 评论 -
活动选择问题和带权活动选择问题【贪心算法】
活动选择问题和带权活动选择问题【贪心算法】贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。 活动安排问题问题描述: 设有n个活动的集合E = {1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si < fi 。如果选择了活动i,则它在半开时间区间[si, fi)内占用资源。若区间[si, fi)与原创 2022-04-29 21:03:39 · 2180 阅读 · 0 评论 -
最长公共子序列【动态规划】
最长公共子序列【动态规划】 最长公共子序列(LCS)是一个在一个序列集合中(通常为两个序列)用来查找所有序列中最长子序列的问题。一个数列 ,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则称为已知序列的最长公共子序列。动态规划:采用二维数组flag来记录下标i和j的走向。数字"1"表示,斜向下;数字"2"表示,水平向右;数字"3"表示,竖直向下问题描述:设有字符串a[0…n],b[0…m],下面就是递推公式。字符串a对应的是二维数组num的行,字符串b对应的是二维原创 2022-04-25 23:46:38 · 457 阅读 · 0 评论 -
矩阵链乘法 【动态规划】 算法
矩阵链乘法【动态规划】问题描述:给定n个矩阵的链<A1,A2,…,An>,矩阵Ai的规模为p(i-1)×p(i) (1<=i<=n),求完全括号化方案,使得计算乘积A1A2…An所需标量乘法次数最少。动态规划的第一步是寻找最优子结构,然后就可以利用这种子结构从子问题的最优解构造出原问题的最优解。在矩阵链乘法问题中,我们假设A(i)A(i+1)…A(j)的最优括号方案的分割点在A(k)和A(k+1)之间。那么,继续对“前缀”子链A(i)A(i+1)…A(k)进行括号化时,我们应原创 2022-04-25 23:32:04 · 903 阅读 · 0 评论 -
最大子数组 【动态规划】算法
最大子数组所谓最大子数组就是连续的若干数组元素,如果其和是最大的,那么这个子数组就称为该数组的最大子数组。例题题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。 1.求最大的子数组的和代码【C++】#include <iostre原创 2022-04-25 23:18:45 · 1237 阅读 · 0 评论 -
0-1背包问题 【动态规划】
0-1背包问题 求解方法0-1背包问题解决方法有:蛮力解法;动态规划算法;贪心算法;回溯解法。本节主要为动态规划基本思想:令表示在前个物品中能够装入容量为的背包中的物品的最大值,则可以得到如下动态函数:例题例如,有5个物品,其重量分别是{2,2.6,5,4},价值分别为{6,3,5,4,6},背包的容量为10,动态规划法求解0/1背包问题的过程如图所示,具体过程如下。代码展示【C++】#include <iostream>#include<cstdio&原创 2022-04-25 23:06:18 · 5696 阅读 · 1 评论 -
用java实现0-1背包问题
0-1背包问题引言 0-1背包问题是指给定n个物品,每个物品均有自己的价值vi和重量wi(i=1,2,…, n),再给定一个背包,其容量为W。要求从n个物品中选出一部分物品装入背包,这部分物品的重量之和不超过背包的容量,且价值之和最大。单个物品要么装入,要么不装入。很多问题都可以抽象成该问题模型,如配载问题、物资调运[1]问题等,因此研究该问题具有较高的实际应用价值。目前,解决0-1背包问题的方法有很多,主要有动态规划法、回溯法、分支限界法、遗传算法、粒子群算法、人工鱼群算法、蚁群算法、模拟退火算法、原创 2022-04-25 22:51:45 · 2201 阅读 · 0 评论