算法设计与分析
目前我是大学本科生,这个专栏用于记录一些在算法设计与分析课中的代码
从日至臻
湖南大学计算机系学生
展开
-
贪心算法-Djkstra求解无向图单源最短路径
Djkstra求解无向图单源最短路径图论中有很多很经典的问题和算法思想,如最小生成树,DFS,BFS,Powell染色问题等等。最短路径问题也是其中的经典问题之一,在地图导航等领域非常常用。求解最短路径的常用算法有Dijkstra算法、Floyd算法等等。前者只能求解单源最短路径,后者可以求解任意源到任一点的最短路径,后者的复杂度要比前者高。在这里具体阐述一下Dijkstra算法求解单源最短路径的基本算法思想:首先需要做的是创建一个空集S,表示已经遍历过的节点的集合。选定好源点O之后,便要把源点O放原创 2020-05-25 09:07:59 · 1770 阅读 · 0 评论 -
最优批处理问题-动态规划
题目介绍题目摘选自《计算机算法设计与分析(第5版)》,作者是王晓东,题目如下分析这道题也可以运用动态规划的算法解决,乍一看好像看不出来有什么最优子结构的性质,这道题目我们不能把它看作是最长升序子序列那样,一个一个元素拿出来分解成若干个含有重复的子问题,这种拆分的办法这个问题不适用。这道题我们需要以分组为单位进行拆分,比如说题目给的例子{1,2}{3}{4,5},这是原问题的最优解,我们把...原创 2020-04-23 15:39:09 · 1891 阅读 · 2 评论 -
最长单调递增子序列——动态规划算法
题目简介最长单调递增子序列是一个很经典的问题,他所需要的就是要在整个序列中(序列一般来讲应该是无序的)寻找出一个最长的升序子序列,这个子序列中的所有元素都必须来自这个原序列,它们可以在原序列中是不相邻的,但是它们之间的相对位置是不可以改动的。比如一个序列:(1, 7, 3, 5, 9, 4, 8)它有一些上升子序列,如(1, 7), (3, 4, 8)等等。在这些子序列中,长度最长的子序列...原创 2020-04-23 15:32:41 · 10343 阅读 · 5 评论 -
利用分治法实现归并排序
归并排序#归并排序是一个非常常见的排序方式,它是一种稳定的排序方式,时间复杂度为O(nlogn),易于理解,在学习数据结构或者算法的时候大家应该都学习过归并排序。那么我现在以int类型的数组为例,给出一个利用分治法实现的归并排序,也是递归实现归并排序的算法。#include <iostream>using namespace std;void merge (int* src, ...原创 2020-04-13 10:50:05 · 1059 阅读 · 0 评论 -
分治法实现寻找数组最大最小值
分治法实现寻找数组最大最小值大致思路我们拿到一个长度为K的一维数组,想要在短时间内进行最大最小值的查找,第一种想法就是现将数组进行排序,这样首末的元素分别是最小和最大的元素。排序算法中,快速排序、归并排序、堆排序等排序算法的时间复杂度都是O(nlogn),第二种想法就是建立堆,但是需要分别建立最小值堆和最大值堆,我们可以采取第三种做法,将整个数组进行一次次的二分,直到二分后的结果只有两个元素,...原创 2020-04-10 09:52:56 · 2446 阅读 · 2 评论