算法
文章平均质量分 59
TpTang_
这个作者很懒,什么都没留下…
展开
-
图论 : 最短路径实现(通用) - Dijkstra 、Bellman-Ford 、Floyd- Java
最短路径文章目录最短路径Dijkstra算法实现算法实现过程代码实现最短路径是指两点之间权值之和最小的路径之和,广泛应用于路径规划问题,有向图、无向图均适用,但不能有负权环:上图C - D - F之间构成了负权环,A 到 F之间的最短路径A -> C -> D -> F -> C -> D -> F…可以无限缩短,即不存在最短路径。单源最短路径最经典的实现有Dijkstra、Bellman-Ford两种算法。Dijkstra算法实现使用前提:不能有负权边以原创 2021-04-27 00:08:46 · 324 阅读 · 0 评论 -
Bellman-Ford算法代码实现
原文链接代码:package edu.stu.tptang;import java.util.Comparator;import java.util.HashMap;import java.util.HashSet;import java.util.Iterator;import java.util.LinkedList;import java.util.List;import java.util.Map;import java.util.Map.Entry;import java.原创 2021-04-26 16:11:36 · 195 阅读 · 0 评论 -
Dijkstra算法代码实现
原文链接代码:package edu.stu.tptang;import java.util.Comparator;import java.util.HashMap;import java.util.HashSet;import java.util.Iterator;import java.util.LinkedList;import java.util.List;import java.util.Map;import java.util.Map.Entry;import java.原创 2021-04-25 21:32:10 · 247 阅读 · 0 评论 -
动态规划 -- 0-1背包问题(Java语言)
题目描述:有n件物品和一个最大承重为w的背包,每件物品唯一,每件物品的重量是w1,重量是v1,在保证总重量不超过w的前提下,背包的总价值最大是多少?定义状态:定义dp[ i ] [ j ]为:在最大承重为j的情况下,有前i件物品可选。定义边界:dp[0][ j ] = 0 : 没有物品可选dp[ i ] [0] = 0 : 背包已经达到最大承重dp[0][0] = 0 : 没有物品可选且背包已经达到最大承重定义状态转移方程:问题的关键在于:面对当前一件物品选或不选如果 j >= 当原创 2021-04-16 23:33:22 · 756 阅读 · 2 评论 -
动态规划 -- 零钱兑换(Java语言)
题目:零钱兑换动态规划:dfs是自顶而下的递归,dp是自底而上的递推。** 动态规划步骤:**1.定义状态:如dp[i]的含义2.设置初始状态(边界):如dp[ 0 ]的值3.确定状态转移方程:如dp[ i ]和dp[ i-1 ]的关系题目描述:假设有25分,20分,5分,1分的硬币,硬币数量不限,现要找给客户41分的零钱,如何办到使用硬币数量最少?解析:定义dp[n]为找给客户n分零钱需要的硬币最少。假设第一次选择25分的,那么dp[n] = dp[n-25] + 1;假设第一次选择原创 2021-04-16 14:03:43 · 1232 阅读 · 0 评论 -
通用并查集 - 基于QuickUnion实现(Java语言)
基于基本数据类型的并查集实现请参考QuickUnion。自定义对象并查集的底层实现:链表+Map映射 [这里的链表表现为树]逻辑上:自下而上的多棵树。数组已经满足不了自定义对象并查集,可以定义内部类Node形成Node节点来封装每个自定义对象。这里提供树高rank属性,通过rank控制树相对平衡以提高并查集使用效率。private static class Node<V>{ V value; Node<V> parent = this; //初始化时自己的父节点就是原创 2021-04-11 14:45:08 · 114 阅读 · 0 评论 -
并查集 -- QuickUnion(Java语言)
需求分析假设场景: 有n个村庄,有些村庄之间有连接的路,有些村庄并没有连接的路。设计一个数据结构,能快速实现以下两个操作:(1)查询任意两个村庄之间是否有连接的路。(2)连接任意两个村庄。平衡二叉树、集合、数组、链表也能实现上述需求,但这些工具能实现的功能更多,与专注于实现上述特定需求的并查集来说效率并不理想。并查集的实现有QuickFind、QuickUnion两种方式,本文采取后者实现。QuickUnion - 底层是数组,逻辑层面是树。首先初始化每个节点的父节点为自己 --初始化每个“原创 2021-04-10 22:29:40 · 453 阅读 · 0 评论