数据结构与算法
文章平均质量分 74
你一身傲骨怎能输
我是一名低调的游戏程序员!!!!!!!!
非常高兴通过互联网认识认识大家,有事可以留言,交个朋友。
展开
-
生动形象的解释下贪心算法
因此,在使用贪心算法时,需要分析问题的特点,确保贪心策略能够得到正确的结果。总之,贪心算法是一种简单易懂且高效的求解最优解的方法,适用于特定的问题。例如,如果最大份量的食物恰好让你的胃容量剩余很少,而剩余的容量可以容纳其他较小份量的食物,那么贪心策略可能导致你错过了一些美食。尽管贪心算法不能保证在所有情况下都能找到最优解,但在某些问题中,贪心算法可以简化问题求解过程,降低计算复杂度,得到较好的近似解。贪心算法是计算机科学和软件工程领域的一个重要工具,掌握贪心算法可以帮助你在编程和算法竞赛中取得更好的成绩。原创 2024-08-29 20:51:06 · 519 阅读 · 0 评论 -
生动形象的解释下动态规划算法
动态规划是一种强大的算法,通过将复杂问题分解为更小的子问题,并存储这些子问题的解,以避免重复计算。通过这种方式,动态规划可以高效地解决许多优化问题。希望通过这个生动形象的迷宫探险例子,你能够更好地理解动态规划的基本概念和应用。好的,让我们继续深入探讨动态规划的应用和一些经典问题的解决方法。动态规划是一种强大的算法,通过将复杂问题分解为更小的子问题,并存储这些子问题的解,以避免重复计算。通过这种方式,原创 2024-08-29 20:41:10 · 791 阅读 · 0 评论 -
生动形象的解释下3d地图A星寻路算法
A算法是一种强大的启发式搜索算法,广泛应用于路径规划和导航问题。通过结合实际路径成本和启发函数估计,A算法能够高效地找到从起点到目标的最短路径。A算法是一种强大的启发式搜索算法,广泛应用于路径规划和导航问题。通过结合实际路径成本和启发函数估计,A算法能够高效地找到从起点到目标的最优路径。在三维地图中,A*算法的实现和应用需要考虑更多的细节和优化策略,如动态调整启发函数、多目标寻路和并行计算等。通过不断优化和改进,A。原创 2024-08-29 20:35:00 · 1202 阅读 · 0 评论 -
行为树和有限状态机的对比
动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。有限状态机维护了一张图(如图结构,方框是状态,箭头是状态之间的联系),图中的结点代表不同的状态,状态之间通过某种条件触发转换,如果不满足条件则维持原状态。有限状态机,又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。事件(Event):又被称为“条件”,当满足条件时,将会触发一个动作,或者执行一次状态的迁移。状态集(States):包括现态和次态在内的一系列状态,用来描述状态机所处的状态。原创 2024-06-16 10:20:20 · 339 阅读 · 0 评论 -
OBB碰撞检测算法
备注参考不少网友的观点。原创 2024-06-16 09:41:21 · 993 阅读 · 0 评论 -
菜鸟教程选择排序算法c++版
**选择排序详细讲解**原创 2017-12-13 09:04:27 · 970 阅读 · 0 评论 -
几分钟搞定二叉排序树的删除节点算法漫谈无代码
我希望看到我这博客的时候是已经对应生成二叉排序树算法已经很熟悉了,删除节点的时候 也许我们会删除20那个节点,那么我们只需要把30节点的左子指针域设置null, 然后释放节点20的内存地址,如果想得到被删节点的数据可以返回, 这种节点是叶子节点,既没有孩子节点,比较简单,还有一种情况比如 40 和85节点 ,只有一个孩子节点,也比较简单,比如40,我们只要把30的右指针域保存40的孩子节点地址就可原创 2017-11-16 23:28:16 · 3277 阅读 · 0 评论 -
树的查找-->二叉排序树的查找算法全解
分析二叉排序树的定义:根节点25 的左右子树, 18左子树的全部节点大小是小于25的,右子树的全部节点是大于25的。 同样46作为根节点的左右子树也是满足上述性质。那么这样的二叉树就是二叉排序树。特别注意二叉排序树里面不存在2个相同的节点数据那么二叉排序树查询元素的过程是什么样的呢,其实如果你们看过我写的二分查找的博客,你们会很清楚,每次查询都是将元素查询范围减少1半,其实是比较类似的。因此我们原创 2017-11-16 18:58:25 · 1947 阅读 · 0 评论 -
老罗带你轻松搞定针对索引存储结构的分块查询算法
先上个图,比较清晰分析:数据表是什么呢,比如我有个数组是被查询的集合,那么这个数组就是数据表,那么什么是索引表其实就是保存了数组里面的某些元素和索引值。继续看实例:如果我们针对数据表从8 —-到87这些元素中找具体某个元素的话,由于是没有排序的,那么肯定是不能进行二分查找,如果是顺序查询数据量又太多,效率太差,因此我们想个办法,能不能让这个数组中的每段数据是无序的,但是每段数据的最都小于下段数据的每原创 2017-11-16 14:45:57 · 421 阅读 · 0 评论 -
彻底轻松搞定顺序存储结构元素的二分查找的时间复杂度优势以及如何算时间复杂度
二分查找也叫折半查找,根据字面意思大概知道是怎么个查找具体一个元素的吧。首先分析下查询过程: 我们先通过被查询的数组得到该被查询数组的第一个索引和最后一个索引值,假如我们拿数组10个元素来做例子我们得到索引0和索引9 mid = (min(0) + max(9))/2 mid =5 得到中间索引然后就测试当前这个索引对应的元素是不是我们想要的元素,是的话就直接返回元素的索引下标,否则我们根原创 2017-11-16 13:45:23 · 2396 阅读 · 0 评论 -
针对数组存储结构的堆排序算法
堆排序 Heap Sort堆排序 Heap Sort 堆排序是一种选择排序,其时间复杂度为O(nlogn)。堆的定义 n个元素的序列{k1,k2,…,kn}当且仅当满足下列关系之一时,称之为堆。 情形1:ki <= k2i 且ki <= k2i+1 (最小化堆或小顶堆) 情形2:ki >= k2i 且ki >= k2i+1 (最大化堆或大顶堆) 其中i=1,2,…,n/2向下取整;原创 2017-12-13 10:39:59 · 2584 阅读 · 0 评论 -
快速排序算法详细讲解c++版
快速排序算法1.首先我需要对快速排序算法下个定义:什么是快排呢?或者是排序的指导思想比如一个待排序的数组 int iArray[] = {5,4,45,878,45}; 我们需要把这个数组从小到大进行排序。 我们首先需要找到一个参数轴 也就是参数的数据 有了参考数据我们就把数据分成2个部分,一个数据全部是大于或者等于当前参考数据,另一部分数据都是小于或者等于当前参考数据的。下面分析快原创 2017-12-14 16:56:34 · 24626 阅读 · 3 评论 -
直接插入排序算法详解
//直接插入排序 array待排序的数组 n数组的元素个数void InsertSort(int[] array, int n){ //我们默认第一个元素也就是索引为0的有序 //循环遍历索引1--n-1对应的数据进行排序 //依次从索引1开始到最后一个元素一一和当前索引前面的元素进行一一的比较进行排序 //定义循环需要的变量 int i = 1;原创 2017-11-17 23:22:55 · 2177 阅读 · 3 评论 -
分治算法
分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。即一种分目标完成程序算法,简单问题可用二分法完成。基本思想当我们求解某些问题时,由于这些问题要处理的数据相当多,或求解过程相当复杂,使得直接求解法在时间上相当长,或者根本无法直接求出。对于这类问题,我们往往先把它分解成几个子问题,找到求出这几个子问题的解法后,原创 2017-12-15 01:38:15 · 255 阅读 · 0 评论 -
二路归并算法
归并算法到底是什么意思 呢?听到归并就知道其实是把数组进行合并,那么我们合并的时候肯定有什么特征。 首先我们归并的目标是数组,由于是二路归并,那么我们是有2个数组需要合并,并且这2个数组是有序的。如果说我们是从小到大进行排序。那么这2个数组都是从小到大有序的。现在的问题是如果我们拿到一个无序数组是怎么样得到我们的有序数组在开始第一轮合并操作的呢。 我们是用递归把原数组进行拆分成2部分,一直拆分原创 2017-12-15 15:09:46 · 3265 阅读 · 0 评论 -
普里姆和克鲁斯卡尔最小生成树算法史上最详细菜鸟教程详解(c++版)
针对图数据结构最小生成树普里姆与克鲁斯卡尔算法详细讲解额外知识点必须知道的东西?首先什么图数据结构,什么又是树,图数据结构和树数据结构又有什么联系和区别,为什么我们的图数据结构需要换成最小生成树,这个生成树在实际中又有什么意义, 普里姆和克鲁斯卡尔算法又分别是什么,他们之间有什么区别。图数据结构:首先你必须知道数据结构是什么,所谓数据结构就是数据之间的关系,比如一个队伍,假如导游给我们这个队伍原创 2017-12-12 02:40:47 · 2804 阅读 · 1 评论 -
数据结构中的线性表代码实现
// 线性表.cpp: 定义控制台应用程序的入口点。 //define ElemType intdefine OK 1define ERROR 0include “stdafx.h”includeinclude原创 2017-11-04 22:08:31 · 1047 阅读 · 0 评论 -
递归解决汉罗塔问题到底多么简单
这个移动盘的问题, 分析:假如我们的目的就是Hanoi(n,x,y,z); 表示n个盘片 并且都在x处, 我们是可以借助y把n个盘片放到z上,并且不能出现大盘片在小盘片上面的情况因此我们可以分解问题,既然是n个盘片需要移动,那么我们可以先把n-1个盘片全部移动到y上,是不是就剩余1个盘片在x处,我们直接把第n个盘片搬到z上,然后在把n-1个盘片搬到z上,是不是搞定。问题就转换为我们需要把n-1原创 2017-11-14 13:36:04 · 3262 阅读 · 0 评论 -
算法与算法设计的几大准则
算法的定义那么算法到达什么,首先分2个层面,在现实世界里,算法就是 解决问题的一个方案,比如我要修一栋房子,我们先打地基,在造框架,在砌墙,在粉刷,在装饰,。这个算一种针对修房子问题的一种解决方案,但是修房子是只有这一种方案吗,肯定很多的,但是一些基本思路也行一样。所以算法在具体场景中是针对某个问题提出的一种解决方案。那么现在谈我们要真的需要涉及的概念就是在编程中的算法到底什么,首先我们需要找到原创 2017-11-04 05:05:52 · 4073 阅读 · 0 评论 -
轻松让你彻底搞定c++版 线索二叉树的线索化算法
二叉树图首先我们要先谈谈线索二叉树数据结构的出现理由,为什么要出现。我们可以不用线索二叉树吗,那是肯定的。谈线索二叉树之前你必须对二叉树的链式存储结构遍历非常了解。如果不了解请先搞懂先,我们知道二叉树的节点数据类型有如下几种设计孩子双亲节点,我就谈这一种设计。孩子双亲那就说明这个节点数据保存了孩子和双亲的地址,可以立马找到当前节点的孩子和双亲,但是如果我想不用遍历就得到比如中序遍历后的当前节点的前序原创 2017-11-11 02:24:47 · 818 阅读 · 0 评论 -
非递归中序遍历二叉树算法详解
注意学习这个算法需要随时可以在脑海中输出二叉树的中序遍历的序列 举例:如上图,我们就看到一棵二叉树:那么我们是不是马上可以想到这棵二叉树的中序遍历序列是什么呢?我直接给出答案:D B EF A G H C I 我们如果不适用递归中序遍历二叉树即实现输出二叉树中的全部数据并且每个节点只访问一次的操作。那么在我们的算法中是通过单独开内存来保存节点数据,我们这个内存指的其实就是我们学过的栈数据结构S原创 2017-11-11 11:10:07 · 32316 阅读 · 3 评论 -
几分钟搞定队数据结构在非递归层序遍历算法中的应用
研究队数据结构在层序遍历算法的应用之前:我们先需要了解几个基本知识,首先队数据结构是什么,有什么特性也就是不同点。 首先队数据结构其实也就是数据类型,只是这个数据类型里面在堆上开了一定的内存,可以保存大量的元素,其次进入的元素,当前我们想要取保存的元素不能像数组类型那样根据下标任意的取数据元素。 队数据结构只给我们提供了pop操作和Push操作,底层代码其实是在内存两端进行操作的。层级遍历又是什原创 2017-11-12 03:09:10 · 707 阅读 · 0 评论 -
彻底搞定二叉搜索树c++版本
今天我们的主题是二叉搜索树也有叫二叉排序树还是和以前一样,我们谈某个技术之前先谈谈出现的理由:二叉搜索树那么到底是什么,做什么的,根据字面意思其实就是使用特定二叉树的特性去查找树里的某个元素。我们先来谈谈查找的概念: 查找分静态查找和动态查找静态查找:比如我们在字典里找个单词,所谓静态就去查找元素的时候,并不会去改集合,比如我查找单词,假如字典里没有想要的单词,你是不会把你这个单词插入到字典里面的。原创 2017-11-12 09:39:50 · 363 阅读 · 0 评论 -
几分钟明白什么叫平衡二叉树
平衡二叉树先看看上图我们将同样的数据形成二叉树,但是二叉树的高度是不同的。 我们都知道二叉树的高度不同那么查找元素的平均时间是不同的。平均查找时间是怎么计算的,我们是把每个节点查找的次数加起来除全部节点数就是平均查找时间,而每个节点找到的时间就是二叉树的层 比如第一幅图 jan的查找次数是1 Feb 就是2 全部加起来除全部节点数那么我们得到这三幅图的查找效率最高的是第二幅图。 直接根据原创 2017-11-12 09:50:29 · 6213 阅读 · 0 评论 -
通俗易懂的让你彻底搞懂冒泡排序的由来
先上图:冒泡排序是属于简单排序当中的,为什么叫冒泡排序呢, 假如我们把我们的元素用泡泡去比喻,那么数据不同,泡泡就不同大小。假如我们想把数据从小到大排序,那么在排序的过程中小泡泡会慢慢往上被交换出来也叫冒上来。分析冒泡过程:既然冒泡排序就是元素不断交换的过程,那么我们图中假如有5个泡泡,那么我们假如开始第一趟冒泡比较,第一个泡和第二个泡比较大小,大的泡泡会放在下面的位置,那么...原创 2017-11-12 10:30:28 · 17022 阅读 · 7 评论 -
利用拿扑克牌让你几分钟搞定插入排序算法
先拿一个j,然后拿到一个k放在j的后面接着拿到一个A,放入k后面,现在拿到一个Q 那么我们必须把Q插入到K中,那么我们必须拿Q和A到J之间的一一比较最终找到一个合适的位置插进去。现在上代码 //插入排序算法 需要参数为待排序数组以及数组的元素个数nvoid Insertion_Sort(ElementType A[], int n){ //代表数组的1到n-1的索引 表示我原创 2017-11-12 12:20:20 · 4483 阅读 · 1 评论 -
数据结构与算法之树的孩子双亲存储结构的讲解
注意看这个知识点需要有的树数据结构的基本知识,本文不贴实际代码只是讲解孩子双亲存储结构的由来和优点,为什么要用这个以及其他方式的缺点对比。先上图 这个图是由11个字母组成的树关系的图,为什么趁为树,因为他们之间的联系看起来像树而命名。 图的深入分析:这个树的根节点是字符A,他的孩子节点又 是3个子树,分别是根节点B,C,D组成。叶子节点也就是没有孩子了有C,F,H,I,J,K.原创 2017-11-02 22:14:52 · 6264 阅读 · 0 评论 -
学习二叉树必须知道的基本性质
二叉树首先二叉树为什么是我们讨论的对象,那么多叉树,比如3叉树,4叉树,5叉树。其实我也不知道为什么讨论二叉树,但是二叉树的使用范围是非常广泛的。所以我们会深入的去讲解二叉树。二叉树为何物,即定义是什么,二叉树还有个英文名在国外叫Binary Tree.是不是非常的熟悉。首先我们要知道二叉树并不是真的树,在计算中是描述了一个数据节点持有2个子节点并且仅最多2个节点。这2个子节点是没有任何交集也就原创 2017-11-03 02:27:03 · 3963 阅读 · 0 评论 -
二叉树的存储结构该如何选择呢
不多先上个二叉树的图:我们先是从ABCDEFG这个顺序依次编号为1-7. 下面是描述了一个数组顺序存储结构。我们依次把A-G存入数组的索引为1到7当中。 有没有发现一个规律。假如我们的数组索引和二叉树中的编号是不是一一对应,刚好我们通过索引的计算就可以从数组当中得到当前数据的左右孩子和双亲节点。假如i代表当前的节点。公式还是i = 2i得到左孩子节点,i = 2i + 1右孩子节点。 从这里我原创 2017-11-03 02:57:45 · 579 阅读 · 0 评论 -
二叉树的遍历方式
二叉树的遍历方式首先二叉树的遍历是什么意思,为什么需要遍历,我先拿线性表来举例。大家对游戏中的排行榜肯定非常熟悉了吧,排行榜是根据假如是根据玩家战力进行排序在排名榜上进行显示给玩家看,假如我们通过对玩家战力的比较排序之后从大到小把玩家的数据存入顺序存储结构当中,并且在view视图层的代码中遍历这个数据存储结构依次显示在排行榜当中,大家明白了为什么需要遍历了吧。说白就是取数据。我们拿数组来说,他的原创 2017-11-03 03:19:02 · 444 阅读 · 0 评论 -
二叉树前序遍历的代码实现(c语言/c++版本)
include “stdafx.h”includetypedef char ElemType; //给节点元素类型取别名,方式后续修改节点数据类型//设计二叉树节点元素的数据结构类型 typedef struct BitNode { ElemType data; //二叉树的节点元素的具体数据元素 struct BitNode *lchild, rchild; //用于存当原创 2017-11-03 04:28:37 · 4933 阅读 · 0 评论 -
数据结构之线索二叉树数据结构
首先要谈一谈线索二叉树为什么会产生,很多东西不是无缘无故的突然出现在书本,那么肯定是有他出现的理由,我先举个你们熟悉的案例,比如开始我们是使用单链表进行数据的存储和访问,但是访问方法只能从一端跑到顶,假如我们想要访问最后一个节点元素,我们必须通过首节点开始一一遍历,这个时候循环链双向表就产生了,我们可以快速访问末尾节点,那么线索二叉树也是为了快速访问吗,NO,我们是为了不浪费内存,其实都一样,都是为原创 2017-11-03 06:41:41 · 417 阅读 · 0 评论 -
利用栈数据结构彻底搞定走迷宫案例解析(并非最短路径)
先上迷宫图 迷宫数据图我们分0 1 -1 三种可能 0表示可以走白色表示 1表示障碍物 -1表示已经走过 方位规则设置: 方位也就是我们下面的di的取值为0 1 2 3 这四个方位 表示当前格子可行走的方位迷宫算法分析: 刚开始的时候我们是有迷宫起点也就是(i,j)是当前起点方块 并且还没有找到当前方块的下一个行走方位,我们根据上面的介绍我们知道方位根据顺时针开始标号为原创 2017-11-13 10:19:08 · 1391 阅读 · 0 评论 -
带你彻底搞定希尔排序是个什么情况
首先希尔排序是怎么来的,为什么叫希尔排序。这个算法其实是一个叫什么shell发明的。我们中文翻译过来的。所以名称由来搞定了吧。那么希尔排序有个希尔增量序列,这个是什么意思,比如我们有个数组这个增量就是数组索引间隔比如我的希尔增量是5,那么我们在排序的时候就是比如81这个数就作为手里拿的第一张牌,先不动,然后我们在这个牌的基础上+5,就找到了35这个牌,进行比较35小,就把35放到81这个位置,而我们原创 2017-11-12 15:58:17 · 2530 阅读 · 4 评论 -
花几分钟轻松搞定快速排序算法
//快速排速算法,使用迭代 array待排序的数组, s是数组的首索引,t是最后一个元素索引void QuickSort(int[] array, int s, int t){ //定义变量保存被排序的数组索引 int i = s, j = t; //一个元素就没有必要排序了吧,所以索引s必须小于t if(s < t) {原创 2017-11-18 03:26:58 · 274 阅读 · 0 评论 -
数据结构基本概述
课程简介首先我要谈一谈数据结构到达是干什么,又是研究什么? 我直接开门见山把,数据结构根据字面意思就是针对数据的,那么我们研究的是数据的特性,数据之间的逻辑结构,数据之间的物理结构或者称数据的存储结构,以及针对一个具体应用围绕数据设计的算法。 下面来具体解析下什么是计算机中的数据(Data):只要你可以输入到电脑并且可以被编程语言处理的符号就算是计算中的数据。那么在现实中代表什么呢,比如图像,原创 2017-11-04 04:13:51 · 324 阅读 · 0 评论 -
c#之站在IL语言角度彻底搞定HashTable输出的值和插入的时候顺序不一样
我贴出代码让大家上机测试:支持上机 using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace 基本功修炼 {class Program{原创 2017-11-07 15:01:17 · 555 阅读 · 2 评论