算法笔记
星河滚烫兮
这个作者很懒,什么都没留下…
展开
-
>算法笔记-动态规划-最短路径迪杰斯特拉算法
算法笔记-动态规划-最短路径迪杰斯特拉算法作者:星河滚烫兮前言 图的最短路径问题在现实生活中有很广阔的应用,最短路径又分为单源最短路径与多源最短路径,前者求出固定起点到其他节点的最短路径,后者求出可变起点到其他节点的最短路径。同时,又有多种思想来求解,比如贪心算法与动态规划求解最短路径,前者求得局部最优解,时间复杂度与空间复杂度低代价小,被广泛应用;后者求得全局最优解,但时间复杂度与空间复杂度相对高,本文迪杰斯特拉算法便是动态规划思想。 迪杰斯特拉算法设置动态规划数组dp,根据最优化策略进行状原创 2021-09-02 23:31:09 · 1378 阅读 · 0 评论 -
算法笔记-动态规划求解0/1背包问题
算法笔记-动态规划求解0/1背包问题作者:星河滚烫兮前言 动态规划作为一种重要思想,被应用于方方面面,其最重要的是动态规划数组(dp数组)和状态转移方程。其实本质上是一种存储过去与当前的状态,同时在状态转移过程中进行最优化,得到全局最优解。以下是解决0/1背包问题的代码,问题描述与求解过程都放在注释里,大家结合代码和注释学习。C版本/* 问题描述:已知有背包最大容量为11,现有4个物品: wi = {2, 3, 4, 6}原创 2021-09-02 22:28:39 · 347 阅读 · 0 评论 -
算法笔记-堆排序(C版本)
算法笔记-堆排序作者:星河滚烫兮前言 本文重点关注堆排序代码的实现,因为注释写的比较详细,大家可以结合代码与注释学习。堆排序其实就是利用二叉堆这种数据结构的特性进行排序,二叉堆又分为最大堆(大根堆)和最小堆(小根堆),本质上是完全二叉树,以最小堆为例,要遵循父节点小于左右子节点的原则。下图是最小堆示例:代码(C版本)/* 这是一个堆排序程序*/#include<stdio.h>#include<stdlib.h>#define MAXSIZE 1原创 2021-09-02 21:26:50 · 63 阅读 · 0 评论 -
算法笔记-快速排序(C版本与Python版本)
算法笔记-快速排序作者:星河滚烫兮前言 本文主要聚焦于算法的代码实现,原理不做详细说明,可参考代码注释。代码分为C语言版本和python版本,其中C语言版本对于基准元素是选择首元素的,这样对于最坏情况时间复杂度会很高;python版本则是随机选择基准元素,可以有效避免特殊情况(比如数组初始时由大到小排列即倒序排列)。本文的快速排序都采用分治法加双指针,大家结合代码与注释学习。一、C版本#include<stdio.h>#include<stdlib.h>#def原创 2021-09-02 20:59:28 · 94 阅读 · 0 评论