对回溯法的理解: 回溯法本质就是深搜,对所有可能的结果进行搜索匹配,由于很多情况下结果很多,就需要进行适当的剪枝和分界限制来加快得到解。 回溯法用的最多的就是递归,其实也可用递推,但是递归比较符合人类逻辑 。 回溯法的解题通常是有模板的: Void backtrack() { If(到达边界) {输 ...
分类:
编程语言 时间:
2019-12-18 10:48:44
阅读次数:
87
问题描述 给定带权有向图G =(V,E),其中每条边的权是非负实数。另外,还给定V中的一个顶点,称为源。现在要计算从源到所有其它各顶点的最短路长度。这里路的长度是指路上各边权之和。 策略与数据结构 其基本思想是,设置顶点集合S并不断地作贪心选择来扩充这个集合。一个顶点属于集合S当且仅当从源到该顶点的 ...
分类:
编程语言 时间:
2019-12-14 19:18:21
阅读次数:
195
1. 堆排序 算法核心思想 堆排序利用堆的特点, 最大堆要求节点的元素都要不小于其孩子,最小堆要求节点元素都不大于其左右孩子,那么处于最大堆的根节点的元素一定是这个堆中的最大值,每次把堆顶元素放置在二叉树的尾部,然后重新建堆这样循环处理,最终就能完成排序。 核心算法逻辑如下: 建堆 把堆顶的元素和最 ...
分类:
编程语言 时间:
2019-12-09 21:22:00
阅读次数:
86
/*有几堆水果。每次你把两堆东西移到一起,形成更大的一堆。每个动作消耗的能量是两堆水果的总重量。如何把所有的水果堆在一起,消耗最少的能量?*/ 以上是题目,该题首先要读懂题目,每次移到一起以后都要将数组重新排序再次移动。 1 #include<stdio.h> 2 3 int main(){ 4 5 ...
分类:
编程语言 时间:
2019-12-08 01:04:09
阅读次数:
202
问题描述:给定有向带权图G=(V,E),其中每条边的权是非负实数。此外,给定V中的一个顶点,称为源点。现在要计算从源点到所有其他各顶点的最短路径长度,这里路径长度指路上各边的权之和。 算法设计:这个问题一般采用迪杰斯特拉算法(Dijkstra)算法思想是先求出长度最短的一条路径,再参照该最短路径求出 ...
分类:
编程语言 时间:
2019-12-07 16:00:29
阅读次数:
115
一、算法介绍 Kruskal算法是一种用来查找最小生成树的算法,由Joseph Kruskal在1956年发表。用来解决同样问题的还有Prim算法和Boruvka算法等。三种算法都是贪心算法的应用。和Boruvka算法不同的地方是,Kruskal 算法在图中存在相同权值的边时也有效。最小生成树是一副 ...
分类:
编程语言 时间:
2019-12-02 00:20:12
阅读次数:
159
# 该题的标签为 1.堆 2. 贪心算法 目前还不知道用堆怎么解,本文只介绍贪新算法 1. 使用贪心解法比较简单。但是看了好多解释都说得不是很明白。 2. 本文对其进行个人的解释: 建立两个HashMap: 2.1 numCounts: 用来统计nums数据中出现的个数 2.2 numNeededC ...
分类:
编程语言 时间:
2019-11-24 17:49:46
阅读次数:
91
一.对贪心算法的理解 贪心算法所做的每个选择都是当前状态下最好的选择,可以依赖以往所做的选择,但不依赖将来做的选择,也不依赖子问题的解。它并不从整体最优上加以考虑,故贪心算法并不是总能得到整体最优解,但有些问题相比于动态规划算法,使用贪心算法会更简单且效率更高,比如找零钱问题等。 可以用贪心选择算法 ...
分类:
编程语言 时间:
2019-11-23 18:07:52
阅读次数:
99
贪心算法 基本要素:(1)最优子结构性质 (2)贪心选择性质 贪心算法通过一系列选择来得到问题的解,所做的每个选择都是当前状态下局部最好选择,即贪心选择,但是这种策略并不总能奏效。 在动态规划算法中,每步所做的选择往往依赖于相关子问题的解,因而只有在解出相关子问题后,才能做出选择; 而在贪心算法中, ...
分类:
编程语言 时间:
2019-11-21 12:23:43
阅读次数:
78
贪心算法 定义:在每一步选择中都进行当前状态下的最优解, 从而希望导致结果是最好算法。贪心算法在最优子结构问题中尤为有效。最优子结构的意思是局部最优解能决定全局最优解。举例:最小生成树的算法 (Prim MST、Kruskal MST、Dijkstra’s algorithm) 相比于动态规划 相同 ...
分类:
编程语言 时间:
2019-11-21 12:03:18
阅读次数:
94