
数据结构学习笔记
文章平均质量分 92
算法知识总结
温迪Venti
软件工程研一,专注Java开发、Java性能与JVM底层
展开
-
图解:如何实现最小生成树(Prim算法与Kruskal算法)
如何理解与实现最小生成树呢?Prim算法与Kruskal算法背后的思想又是怎么样的呢?一起来探索吧~文章目录:1.概念和性质2.思路探索3.Kruskal算法4.Prim算法5.代码实现1.概念和性质今天我们考虑的模型是加权无向图,问题是如何获取它的一幅最小生成树!首先,我们给出最小生成树的定义:图的生成树是它的一棵含有其所有顶点的无环连通子图。一幅加权图的最小生成树(MST)是它的一棵权值(树中所有边的权值之和)最小的生成树。如图所示:首先,我们给出一些约定来简化问题(这原创 2021-04-04 14:18:29 · 1475 阅读 · 1 评论 -
图解:有向环、拓扑排序与Kosaraju算法
25张图详解有向环、拓扑排序与Kosaraju算法。有向环如何检测?拓扑排序的原理?Kosaraju算法又是如何得到的?本文告诉你答案首先来看一下今天的内容大纲,内容非常多,主要是对算法思路与来源的讲解,图文并茂,希望对你有帮助~1.有向图的概念和表示概念有向图与上一篇文章中的无向图相对,边是有方向的,每条边所连接的两个顶点都是一个有序对,它们的邻接性都是单向的。一幅有方向的图(或有向图)是由一组顶点和一组有方向的边组成的,每条有方向的边都连接着一对有序的顶点。其实在有向图的定义这里,我原创 2021-04-04 14:17:10 · 2702 阅读 · 0 评论 -
图解:深度优先搜索与广度优先搜索及其六大应用
图算法第二篇 深度优先搜索与广度优先搜索及其应用约定:本文所有涉及的图均为无向图,有向图会在之后的文章涉及1.图的存储方式我们首先来回顾一下图的存储方式:邻接矩阵和邻接表。为了实现更好的性能,我们在实际应用中一般使用邻接表的方式来表示图。具体的实现代码为:package Graph;import java.util.LinkedList;public class Graph{ private final int V;//顶点数目 private int E;/..原创 2021-04-04 14:14:49 · 13984 阅读 · 1 评论 -
图解:如何理解与实现散列表
这是查找算法的第四篇文章 图解:如何理解与实现散列表散列表的概念散列表(Hash table),也叫做哈希表,是根据键(Key)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,它充分利用了数组支持按照下标随机访问元素的特性这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表。散列表是算法在时间和空间上做出权衡的经典例子。如果没有内存的限制,我们可以直接将键作为数组的索引(可能超级大),那么所有的查找操作只..原创 2021-04-04 14:12:48 · 627 阅读 · 0 评论 -
图解:什么是“图”?
从今天开始,我们开始介绍图的相关算法 图解:什么是“图”?1、背景作为图的开始,我们先来看一个经典的问题,它被认为是图论的起源。这个问题是基于一个现实生活中的事例:河中心有两个小岛。小岛与河的两岸有七条桥连接。在所有桥都只能走一遍的前提下,如何才能把这个地方所有的桥都走遍?欧拉在1735年提出,并没有方法能圆满解决这个问题,他更在第二年发表在论文《柯尼斯堡的七桥》中,证明符合条件的走法并不存在欧拉把实际的抽象问题简化为平面上的点与线组合,每一座桥视为一条线,桥所连接的地区视为点。这样..原创 2021-04-04 14:10:05 · 773 阅读 · 0 评论 -
一文彻底掌握二叉查找树(多组动图)(史上最全总结)
这是查找算法系列文章的第二篇,助你彻底掌握二叉查找树在数据结构中,二叉查找树无疑是极为重要的,但是初学者理解起来却有些吃力,网上的文章讲得也不太全面。本文希望结合多组动图、图片以及详细的代码实现,力争让大家完全掌握二叉查找树(BST)的各种概念和操作。 相信你看完肯定会有收获。先看一下本文的目录吧!每个操作都配有动图和详细实现代码(Java)首先,如果你对树和二叉树的定义不是很了解的话,建议先去看一下这个系列的第一篇文章一文入门二叉树,力求对树有一个基本的认识,再来学习!背景和必要性.原创 2021-04-04 14:07:20 · 1460 阅读 · 4 评论 -
查找算法系列文(一)一文入门二叉树
微信公众号:小超说这是查找算法系列文章的第一篇,助你快速入门二叉树什么是树(Tree)?我们首先来看一些图片:其中,第一、二、四个都是树,第三个不是。树的特点很明显吧!其中每个元素叫做“节点”;用来连接相邻节点之间的关系,我们称之为“父子关系”。例如在图一中,A节点是B节点的父节点,B节点是A节点的子结点,同时,B节点和Q节点是同一个父节点A的子节点,所以它们之间互相成为兄弟节点。我们把没有父节点的节点称为根节点,也就是图一中的A节点。我们把没有子节点的节点称为叶子节点,比如图一中的D、.原创 2021-04-04 14:04:08 · 157 阅读 · 0 评论 -
十大经典排序算法超详细总结
我想大家学习算法之旅的开端就是各种排序算法吧,的确,排序算法广泛的应用性以及它的简洁基础等性质是初学者的不二之选,那今天我就带着你复习回顾以下各种经典的排序算法吧!原创 2021-04-04 14:00:41 · 7490 阅读 · 1 评论 -
线性表(数组、链表、队列、栈)详细总结
线性表是一种十分基础且重要的数据结构,它主要包括以下内容:数组链表队列栈接下来,我将对这四种数据结构做一个详细的总结,其中对链表实现了十几种常见的操作。希望对你有所帮助。1.数组数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。注意点:①.数组是一种线性表;②.连续的内存空间和相同类型的数据由于第二个性质,数组支持 “随机访问”,根据下表随机访问的时间复杂度为O(1);但与此同时却使得在数组中删除,插入数据需要大量的数据搬移工作。低效的“插原创 2021-04-04 13:57:19 · 800 阅读 · 0 评论