visualgo学习与使用

news2025/1/9 15:10:37

前言:在反反复复学习数据结构和算法的过程中“邂逅”了visualgo----这款超级棒的学习网站。喜悦之情不亚于我以前玩前端时发现codepen时的快乐。

地址:https://visualgo.net/en

visualgo是新加坡国立大学计算机学院一位很棒的博士老师Dr. Steven Halim 在2011年写的一个可视化数据结构和计算机常用算法的开源项目,虽然现在没有维护了,但不可否认他依旧是一个很棒的网站。它最初的目的是为了帮助他的学生更好地理解算法和数据结构,但随着时间的推移,它已经成为了一个广受欢迎的在线教育工具。

Visualgo提供了各种算法和数据结构的可视化演示,包括排序、图形算法、字符串匹配和树等。这个平台的目标是让计算机科学变得更易于理解和互动。

在这里插入图片描述



他主要包含了24种常见算法问题:

  1. 排序
  2. 位掩码
  3. 链表
  4. 二叉堆
  5. 哈希表
  6. 二叉搜索树
  7. 图结构
  8. 并查集
  9. 树状数组
  10. 线段树
  11. 递归树/有向无环图
  12. 图遍历
  13. 最小生成树
  14. 单源最短路径
  15. 循环查找
  16. 后缀树
  17. 后缀数组
  18. 计算几何
  19. 凸体船体
  20. 网络流
  21. 二分匹配
  22. 最小顶点覆盖
  23. Steiner Tree
  24. 旅行商问题

在这里插入图片描述在这里插入图片描述


在网上看大家都是推荐visualgo,但很少有深入的文档可以学习,所以天天准备在这里详细介绍下ヾノ≧∀≦)o!

1. 排序

在这里插入图片描述

排序是计算机科学中的一种重要算法,它可以将一组数据按照某个规则进行排列。常见的排序算法有冒泡排序、插入排序、选择排序、快速排序、归并排序等。

冒泡排序

排序算法将一串数组(一个列表)中的元素(整数,数字,字符串等)按某种顺序(增大,减小,字典顺序等)重新排列。
有很多种不同的排序算法,每一种都有各自的优势和限制。
排序常常作为计算机课程中的介绍性问题,用以介绍一系列的算法思路。
不失普遍性,我们在此可视化中,只将(可能包含重复)的整数数组排序至非减。
试试点击 Bubble Sort 来可视化五个(含重复项)的杂乱整数的排序。

在这里插入图片描述动态显示:
在这里插入图片描述

伪代码:

Swapped=false
从i=1到最后一个没有排序过元素的索引-1
	如果左边元素>右边元素
		交换(左边元素,右边元素)
		Swapped=true;++swapcounter(交换计数器)
while Swapped

选择排序

动态显示:
在这里插入图片描述

伪代码

重复(元素个数-1)次
	把第一个没有排序过的元素设置为最小值
	遍历每个没有排序过的元素
		如果元素<现在的最小值
			将此元素设置成为新的最小值
	将最小值和第一个没有排序过的位置交换

插入排序

动态显示:
在这里插入图片描述

伪代码

将第一个元素标记为已排序
对于每一个未排序的元素X
	“提取”元素X
	i=最后排序过元素的索引到0的遍历
		如果当前元素j>X
			将排序过的元素向右移一格
		跳出循环并在此插入X

归并排序

在这里插入图片描述
伪代码

将每个元素拆分成大小为1的分区
递归地合并相邻的分区
	遍历i=左侧首项位置到右侧末项位置
		如果左侧首项的值<=右侧首项的值
			拷贝左侧首项的值
		否则:拷贝右侧首项的值:增加逆序数
将元素拷贝进原来的数组中

在这里插入图片描述

快速排序

在这里插入图片描述
伪代码

每个(未排序)的部分
将第一个元素设为pivot
	存储索引=pivot索引+1
	从i=pivot指数+1 到 最右索引 的遍历
		如果a[1]<a[pivot]
			交换(1,存储索引);存储索引++;
	交换(p1vot,存储索引-1

随机快速排序

在这里插入图片描述

伪代码

每个(未排序)的部分
随机选取pivot,和第一个元素交换
	存储索引=pivot索引+1
	从i=pivot指数+1到最右索引的遍历
		如果a[i]<a[pivot]
			交换(i,存储索引);存储索引++;
	交换(pivot,存储索引-1

计数排序

在这里插入图片描述

基数排序

在这里插入图片描述

以上是8个常见的排序算法,总结来说:

排序问题有各种有趣的算法解决方案,体现了许多计算机科学的思想:

  1. 比较与非比较策略,
  2. 迭代与递归实现,
  3. 分而治之范式(例如,合并排序或快速排序);
  4. 最佳/最差/平均情况下的时间复杂度分析
  5. 随机算法等。

当(整数)数组 A 有序时,涉及 A 的许多问题变得简单(至少比原本简单):

  • 在数组 A 中搜索特定值 v,
  • 查找(静态)数组 A 中的最小/最大/第 k 个最小/最大值,
  • 测试唯一性并删除数组 A 中的重复项,
  • 计算特定值 v 在数组 A 中出现多少次,
  • 设置数组 A 和另一个排序数组 B 之间的交集/联合,
  • 寻找一个目标对 x∈A 和 y∈A,使得 x + y 等于目标 z 等。
  • 计算在区间 [lo…hi] 内共计有多少个值。

2. 位掩码

位掩码也称为掩码运算,是计算机科学中的一种基本操作。通过与位掩码进行按位与、或、异或等运算,可以实现对二进制数位的精确控制,常用于编码、加密和解密等场景。


3. 链表

链表是一种基本的线性数据结构,它由节点组成,每个节点包含一个值和指向下一个节点的指针。相比于数组,链表不需要连续的内存空间,并且可以随意插入和删除节点,因此在某些场景下更加灵活。

在这里插入图片描述


4. 二叉堆

二叉堆是一种基于完全二叉树的数据结构,可以用来实现优先队列。二叉堆分为最大堆和最小堆两种形式,在最大堆中,每个节点的值都大于其子节点的值;在最小堆中,每个节点的值都小于其子节点的值。
在这里插入图片描述


5. 哈希表

哈希表也称为散列表,是一种以键-值对形式存储数据的数据结构。哈希表通过将键映射到数组下标来实现快速查找和插入,其时间复杂度通常为O(1)。

在这里插入图片描述


6. 二叉搜索树

二叉搜索树是一种基于二分查找思想的数据结构,它具有良好的查找和插入性能。在一个二叉搜索树中,每个节点都比其左子树的所有节点大,比其右子树的所有节点小。


7. 图结构

图是一种非线性的数据结构,由节点和边组成。图可以用来表示网络、关系等概念,并且在许多领域中都得到了广泛应用。


8. 并查集

并查集是一种用于处理不相交集合的数据结构。它支持合并两个集合和查询两个元素是否在同一个集合中,常用于解决连通性问题。


9. 树状数组

树状数组是一种用于维护前缀和的数据结构,支持单点修改和区间查询操作。它可以在O(log n)的时间内完成这些操作,比暴力算法更加高效。


10. 线段树

线段树是一种用于维护区间和的数据结构,支持区间修改和区间查询操作。它可以在O(log n)的时间内完成这些操作,比暴力算法更加高效。


11. 递归树/有向无环图

递归树和有向无环图是用于分析递归算法复杂度的工具。递归树将递归算法转化为树形结构进行分析,而有向无环图则可以用来处理递推式的复杂度。


12. 图遍历

图遍历是指按照一定规则访问图中所有节点的过程。常见的图遍历算法有深度优先搜索(DFS)和广度优先搜索(BFS)。


13. 最小生成树

最小生成树是指在一个加权连通图中,找到一棵包含所有节点且边权值之和最小的生成树。常用的最小生成树算法有Prim算法和Kruskal算法等。


14. 单源最短路径

单源最短路径是指从一个起点到所有其他节点的最短路径。常用的单源最短路径算法有Dijkstra算法和Bellman-Ford算法等。


15. 循环查找

循环查找也称为哈希冲突解决方法,用于处理哈希表中键的冲突。常见的循环查找方法有线性探测、二次探测和双重散列等。


16. 后缀树

后缀树是一种特殊的字符串数据结构,可以用来高效地处理字符串匹配问题。它可以在O(m)的时间内完成字符串匹配操作,其中m为模式串的长度。

在这里插入图片描述


17. 后缀数组

后缀数组是一种用于处理字符串排序和匹配的数据结构。它可以在O(n log n)的时间内完成排序操作,比后缀树更加高效。


18. 计算几何

计算几何是一种研究空间中的几何形体和其性质的学科。在算法竞赛中,计算几何常用于解决求凸包、最近点对等问题。

周长计算

在这里插入图片描述

面积计算

在这里插入图片描述


19. 凸体船体

凸体船体是指在一个二维平面上,由一组点构成的最小凸多边形。该问题可以用于处理机器人路径规划等应用场景。


20. 网络流

网络流是一种图论算法,用于建模和解决最大流/最小割问题。其中最大流表示从源点到汇点的最大流量,最小割表示将图分为两个不相交的部分的最小代价。


21. 二分匹配

二分匹配是一种用于解决二分图匹配问题的算法。它可以在O(m√n)的时间内完成匹配操作,其中m为边数,n为节点数。


22. 最小顶点覆盖

最小顶点覆盖是指在一个无向图中,找到一个包含所有边所连接节点的最小节点集合。该问题可以用于处理任务调度等应用场景。

在这里插入图片描述


23. Steiner Tree

Steiner Tree是指在一个无向图中,找到一个包含所有指定节点的最小子图。该问题可以用于处理网络优化等应用场景。


24. 旅行商问题

旅行商问题是指在一个完全图中,找到一条经过所有节点且路径长度最短的回路。该问题可以用于处理物流配送、电路设计等应用场景。

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/559725.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于M1芯片的Mac的k8s搭建

基础环境 centos8 macbook pro M1 vm vm安装centos8参考:MacBook M1芯片 安装Centos8 教程&#xff08;无界面安装&#xff09;_m1安装centos 8.4_Mr_温少的博客-CSDN博客 步骤 参考: MacOS M1芯片CentOS8部署搭建k8s集群_Liu_Shihao的博客-CSDN博客 所有机器前置配置 …

SSH登录和SSH免密登录

在了解ssh的时候产生了概念混淆&#xff0c;发现ssh登录和ssh免密登录是两码事。 可以从目的和过程对比这两个概念&#xff1a; 1.目的 1.1 SSH登录 简单来说就是&#xff1a;建立客户端和服务器之间安全的远程连接&#xff0c;登录远程服务器&#xff0c;以访问文件系统 。…

C语言——经典面试题

哈喽&#xff0c;大家好&#xff0c;今天我们来学习一道面试过程中可能会出现的一道笔试题 有这样一段代码&#xff0c;分析在VS编译器的运行结果 #include<stdio.h> int main() {int i 0;int arr[10] { 1,2,3,4,5,6,7,8,9,10 };for (i 0; i < 12; i){arr[i] 0;pr…

线性回归预测

目录 1、线性回归 2、R-Squared 1、线性回归 在机器学习和统计建模中&#xff0c;这种关系用于预测未来事件的结果 线性回归使用数据点之间的关系在所有数据点之间画一条直线 这条线可以用来预测未来的值 在机器学习中&#xff0c;预测未来非常重要。比如房价、股票等预测 …

Docker核心组件

Docker核心组件 -镜像 Docker Registry 镜像仓库 (Docker Registry) 负责存储、管理和分发镜像&#xff0c;并且提供了登录认证能力&#xff0c;建立了仓库的索引。 镜像仓库管理多个 Repository&#xff0c; Repository 通过命名来区分。每个 Repository 包含一个或多个镜像…

UI自动化测试用例管理平台搭建

用到的工具&#xff1a;python3 django2 mysql RabbitMQ celery selenium python3和selenium这个网上很多教程&#xff0c;我不在这一一说明&#xff1b; 平台功能介绍&#xff1a; 项目管理&#xff1a;用于管理项目。每个项目可以设置多个环境&#xff0c;例如开发环境…

winpcap 发包工具

本工具主要用来进行网络协议的调试&#xff0c;主要方法是&#xff0c;对现场数据抓包&#xff0c;然后将数据包带回交给开发人员&#xff0c;开发人员将该数据包重新发送和处理&#xff0c;模拟现场环境以便于调试和分析。 &#xff08;一&#xff09;使用方法 命令行下输入s…

linux0.12-10-chr_drv

[466页] 第10章 字符设备驱动程序 466–10-1-总体功能 466–10-1-1-终端驱动程序基本原理 467–10-1-2-Linux支持的终端设备类型 468–10-1-3-终端基本数据结构 472–10-1-4-规范模式和非规范模式 473–10-1-5-控制台终端和串行终端设备 476–10-1-6-终端驱动程序接口 476–…

【微信小程序】如何获取用户手机号授权登录

一. 前置条件 目前该接口针对非个人开发者&#xff0c;且完成了认证的小程序开放&#xff08;不包含海外主体&#xff09;&#xff0c;也就是说只针对企业认证小程序开放。若用户举报较多或被发现在不必要场景下使用&#xff0c;微信有权永久回收该小程序的该接口权限。在使用…

到底什么是CIDR(无类域间路由)?做网络的一定得懂这个术语!

CIDR&#xff08;无类域间路由&#xff09;是一种用于对互联网IP地址进行聚合和分配的技术。它通过改变IP地址的分配方式&#xff0c;有效地解决了IPv4地址空间不足的问题。 本文将详细介绍CIDR的原理、使用方法以及它对互联网的影响&#xff0c;还会针对CIDR出三道例题&#x…

使用SolVES 模型与多技术融合快速实现生态系统服务功能社会价值评估

生态系统服务是人类从自然界中获得的直接或间接惠益&#xff0c;可分为供给服务、文化服务、调节服务和支持服务4类&#xff0c;对提升人类福祉具有重大意义&#xff0c;且被视为连接社会与生态系统的桥梁。自从启动千年生态系统评估项目&#xff08;Millennium Ecosystem Asse…

金融学学习笔记第3章

第3章 管理财务健康状况和业绩 一、财务报表的功能 财务报表有三个重要的经济功能: (1)向公司的所有者和债权人提供关于公司目前状况及过去财务表现的信息。 (2)为所有者及债权人设定经营目标,对管理层施加限制提供了便捷的方式。 (3)为财务计划提供了方便的模式。 二、…

【马蹄集】第十二周作业

第十二周作业 目录 MT2056 二阶前缀和MT2057 门票MT2058 最大的平均值MT2068 高数考试MT2069 等差 MT2056 二阶前缀和 难度&#xff1a;黄金    时间限制&#xff1a;1秒    占用内存&#xff1a;128M 题目描述 在一个直角坐标系上&#xff0c;有 n n n 个坐标上有元素值&…

发表计算机SCI期刊,有哪些建议? - 易智编译EaseEditing

要发SCI论文&#xff0c;首先得写一篇论文&#xff0c;然后再向SCI期刊投稿&#xff1a; 计算机SCI论文是一种重要的学术论文&#xff0c;需要遵循一定的写作规范和要求。以下是一些写作建议&#xff1a; 选择合适的标题和摘要。 标题应该简明扼要&#xff0c;能够准确反映论…

UE Http Server 插件说明

1. Create Http Server 创建Http服务器。 Port : 监听端口&#xff0c;范围 1 - 65535&#xff0c;要保证系统唯一&#xff0c;不然会监听失败。 2. Bind 绑定网页路由回调。 Target &#xff1a;HttpServer 对象 Http Path: 绑定路径&#xff0c;如 ”/index“ Http Verbs…

基于IMX8 实时ethercat的手机机器人方案设计

结构&#xff1a; 1、下述结构为操控手柄&#xff0c;用于采集人手运动信号&#xff0c;传递至上位机&#xff0c;对其他设备进行遥操控 2、手柄内含4个电机旋转副的手柄机械臂&#xff0c;内置16位分辨率旋转编码器记录角位移&#xff1b; 3、上位机连接手柄电机、器械电机…

【Java递归】一篇文章带你了解,什么是递归 ,递归的特点,递归应用场景,递归练习题

博主&#xff1a;東方幻想郷 专栏分类&#xff1a;Java | 从入门到入坟 Java递归 ⭐ 递归的定义⭐ 递归的特点⭐ 递归应用场景⭐ 简单例子⭐ 递归练习题&#x1f30c; 练习题模板&#x1f3f4;‍☠️ 练习题答案&#xff1a; ⭐ 递归的定义 &#x1f31f;递归是一种在方法通过调…

使用echocollect e将西门子PLC数据转发至SQL Server数据库

一 背景 随着工业4.0和工业大数据的发展&#xff0c;越来越多的制造型企业开始应用大型数据库来收集和分析数据&#xff0c;以辅助生产运营的决策。在制造工厂中实时收集和分析设备数据能够优化生产流程、减少停机时间并提高效率。然而&#xff0c;这些必要的设备数据通常被“…

在线教育平台小程序,打造高效学习新模式

随着科技的不断发展和互联网的普及&#xff0c;线上教育已经成为了现代人们获取知识、提升自我、实现梦想的重要途径。伴随而来的是线上教育平台的极度竞争。如何才能在这个竞争激烈的市场中脱颖而出&#xff1f;构建一个高效的、符合学生需求的线上教育课堂小程序非常关键。 …

性能测试重要知识与TPS上不去原因分析,测试进阶之路卷起来...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 常见性能测试术语…