数据结构与算法
文章平均质量分 83
你一身傲骨怎能输
我是一名低调的游戏程序员!!!!!!!!
非常高兴通过互联网认识认识大家,有事可以留言,交个朋友。
大家对游戏相关技术有探讨热情的可以在对应博客下面留言,我会积极参与并有空会用博客的形式发布出来。
展开
-
高斯模糊算法
高斯模糊就像是通过一扇有水汽的玻璃窗看世界。它通过对每个像素周围的像素进行加权平均,创造出一种平滑、模糊的效果。这个过程不仅减少了图像中的噪声,还使得图像看起来更加柔和,细节不再那么刺眼。通过调整水汽的浓度(标准差),我们可以控制模糊的程度,从而达到不同的视觉效果。高斯模糊是一种有效的图像平滑技术,能够减少噪声和细节。通过生成高斯核并对图像进行卷积,可以实现高斯模糊效果。根据具体需求,可以调整核的大小和标准差,以获得不同程度的模糊效果。原创 2025-01-09 02:52:31 · 665 阅读 · 0 评论 -
启发式算法
启发式算法就像是用经验和直觉来解决问题的策略。它们帮助我们在复杂的情况下快速找到“足够好”的解决方案,而不是追求完美的最优解。通过生活中的例子和比喻,我们可以更容易地理解启发式算法的概念和应用。启发式算法(Heuristic Algorithm)是一类用于解决复杂优化问题的算法,它们通过经验法则、直觉或启发式规则来寻找近似解,而不是保证找到最优解。启发式算法通常用于那些计算复杂度高、求解时间长的问题,尤其是在问题的解空间非常大时。启发式算法是一种强大的工具,适用于解决复杂的优化问题。原创 2024-12-25 02:56:24 · 931 阅读 · 0 评论 -
贪心算法
贪心算法是一种简单而有效的算法设计策略,适用于某些特定类型的问题。通过局部最优选择,贪心算法能够快速找到解决方案,但并不总能保证找到全局最优解。因此,在使用贪心算法时,需要确保问题满足贪心选择性质和最优子结构性质。让我们用一个生动形象的比喻来解释贪心算法。贪心算法就像是在购物时的决策过程,你总是选择当前看起来最好的选项,而不考虑未来的影响。虽然这种方法在某些情况下能够得到全局最优解,但在其他情况下可能会导致次优解。因此,在使用贪心算法时,需要确保问题的特性适合这种策略。原创 2024-12-25 02:37:52 · 1034 阅读 · 0 评论 -
走迷宫算法c#
以上是一个完整的迷宫算法实现,包括深度优先搜索(DFS)和广度优先搜索(BFS),迷宫生成,以及简单的可视化。你可以根据需要进一步扩展和优化这些功能,例如实现更复杂的迷宫生成算法、使用图形界面进行可视化等。希望这些示例对你有所帮助!我们可以进一步扩展迷宫算法的实现,增加更多的功能和细节。通过以上的扩展,我们实现了更复杂的迷宫生成算法、路径优化、可视化以及交互式游戏功能。这些功能可以帮助你更好地理解迷宫算法的实现和应用。我们可以继续扩展迷宫项目,增加更多的功能和细节。原创 2024-12-17 02:03:40 · 1035 阅读 · 0 评论 -
最小生成树
最小生成树算法(Minimum Spanning Tree Algorithm)是一类用于求解无向加权图中连接所有顶点的具有最小权值和的树形结构的算法。这个树形结构包含了图中的所有顶点,并保证所有顶点之间都有路径相连,同时使得边的总权重尽可能小。连通性:确保生成的树覆盖了图中的所有顶点。最小权重和:树中所有边的权重之和达到最小值。无环:生成的树中不能存在环。通过上述详细解释和改进建议,你可以更好地理解和实现最小生成树算法。这些算法在实际应用中非常有用,特别是在网络设计、路径规划等领域。原创 2024-10-01 15:32:31 · 99 阅读 · 0 评论 -
正则表达式引擎算法
正则表达式引擎的算法主要可以分为两大类:确定性有限自动机(DFA)和不确定有限自动机(NFA)。正则表达式引擎的底层运行原理是将正则表达式转化为一种可以高效执行的自动机模型(NFA或DFA),并通过匹配算法来查找文本中的匹配项。优化技术和前瞻断言等特性进一步提升了引擎的性能和灵活性。理解这些原理有助于更好地使用和编写正则表达式,以及调试复杂的匹配问题。设计一个正则表达式引擎需要综合考虑解析、构建自动机、匹配执行和优化等多个方面。通过合理的架构设计和优化技术,可以实现一个高效、可靠且功能丰富的正则表达式引擎。原创 2024-10-01 15:33:13 · 79 阅读 · 0 评论 -
蚁群算法
蚁群算法(Ant Colony Optimization,ACO)是一种模拟自然界蚂蚁觅食行为的启发式优化算法。它属于群体智能算法的一种,通过模拟蚂蚁在寻找食物过程中释放和感知信息素的行为来解决组合优化问题。蚁群算法具有较强的全局搜索能力,在求解旅行商问题(TSP)、车辆路径问题(VRP)等组合优化问题中表现出较好的性能。通过上述扩展和优化策略,蚁群算法可以更加灵活和强大,适应更广泛的应用场景。在实际应用中,应根据具体问题的特点和需求选择合适的策略组合,以达到最佳的性能和效果。原创 2024-10-01 15:33:24 · 148 阅读 · 0 评论 -
旅行商问题(TSP)的近似解法
每种算法都有其适用的场景和局限性。在实际应用中,通常需要根据问题的具体特点和要求选择合适的算法,或者将多种方法结合起来使用以达到更好的效果。对于非常大规模的问题,可能还需要借助分布式计算和并行处理技术来提高求解效率。这些近似解法的共同点在于它们都采用了某种形式的启发式搜索策略,旨在快速找到一个“足够好”的解,而不是精确的最优解。每种方法都有其独特的优势和适用场景,选择合适的算法需要综合考虑问题的规模、复杂度以及求解精度的要求。在实际应用中,还可以结合多种方法进行混合优化以提高解的质量和稳定性。原创 2024-10-01 15:33:39 · 281 阅读 · 0 评论 -
八皇后问题
八皇后问题是一个经典的回溯算法问题,要求在8x8的棋盘上放置8个皇后,使得它们互相之间不能攻击到对方。皇后可以攻击同一行、同一列以及对角线上的任意格子。八皇后问题是一个经典的回溯算法问题,通过递归地尝试每一行的每一个位置,并在不满足条件时回溯,最终找到所有可能的解决方案。问题描述:在8x8的棋盘上放置8个皇后,要求任何两个皇后都不能在同一行、同一列或同一对角线上。输入与输出输入:无(固定为8x8棋盘和8个皇后)。输出:所有可能的皇后摆放方案。原创 2024-10-01 15:42:30 · 100 阅读 · 0 评论 -
决策树算法
决策树算法是一种监督学习算法,主要用于分类问题,但也可以用于回归问题。它的工作原理是通过一系列的问题对数据进行分类,每个问题都会将数据划分为更小的子集,直到达到叶节点,即最终的分类结果。综上所述,决策树算法的时间复杂度在不同的条件和实现方式下会有较大差异。在实际应用中,通过合理选择特征、控制树的深度、采用有效的剪枝策略以及利用并行计算等技术,可以有效降低决策树的训练和预测时间。原创 2024-10-01 15:43:01 · 121 阅读 · 0 评论 -
A*搜索算法
A搜索算法(A-star搜索算法)是一种在图形平面上,有多个节点的路径,求出最低通过成本的算法。常用于游戏中的NPC的移动计算,或线上游戏的BOT的移动计算上。该算法像Dijkstra算法一样,可以找到一条最短路径;也像BFS一样,进行启发式的搜索。以下是A通过使用更高效的优先队列、处理动态图、多线程优化和内存优化等策略,可以进一步提高A搜索算法的性能和适用性。根据具体需求和图的特性选择最合适的实现方式,可以使A算法在各种应用场景中发挥更大的作用。原创 2024-10-01 15:43:32 · 239 阅读 · 0 评论 -
Dijkstra的最短路径算法
Dijkstra算法是由荷兰计算机科学家艾兹赫尔·戴克斯特拉(Edsger W. Dijkstra)在1956年提出的,用于解决带权有向图中的单源最短路径问题。该算法可以找到图中某个节点到其他所有节点的最短路径。Dijkstra算法通过贪心策略和优先队列,逐步找到从起点到所有其他节点的最短路径。其设计思路清晰,实现简单,适用于大多数需要求解单源最短路径问题的场景。虽然Dijkstra算法在大多数情况下表现良好,但在特定场景下可能会遇到性能瓶颈。通过选择合适的数据结构和优化策略,可以有效提高算法的性能。原创 2024-10-01 15:44:04 · 141 阅读 · 0 评论 -
深度优先搜索算法
深度优先搜索(Depth-First Search,DFS)是一种用于遍历或搜索树或图的算法。这个算法会尽可能深地搜索树的分支。当节点v的所在边都已被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。DFS适用于具有递归结构、需要探索所有解、解空间较大但深度较浅、不需要最优解且内存消耗不是主要限制因素的问题。原创 2024-10-01 15:45:25 · 152 阅读 · 0 评论 -
游戏中常用的算法
在游戏中,算法的应用非常广泛,它们不仅影响着游戏的性能,还决定了游戏的玩法和体验。原创 2024-10-01 15:46:06 · 208 阅读 · 0 评论 -
常用算法
在计算机科学中,有许多常用算法,它们在各种应用场景中发挥着关键作用。原创 2024-10-01 15:47:07 · 166 阅读 · 0 评论 -
数据结构(九)
121212。原创 2024-10-01 15:31:05 · 81 阅读 · 0 评论 -
生动形象的解释下贪心算法
因此,在使用贪心算法时,需要分析问题的特点,确保贪心策略能够得到正确的结果。总之,贪心算法是一种简单易懂且高效的求解最优解的方法,适用于特定的问题。例如,如果最大份量的食物恰好让你的胃容量剩余很少,而剩余的容量可以容纳其他较小份量的食物,那么贪心策略可能导致你错过了一些美食。尽管贪心算法不能保证在所有情况下都能找到最优解,但在某些问题中,贪心算法可以简化问题求解过程,降低计算复杂度,得到较好的近似解。贪心算法是计算机科学和软件工程领域的一个重要工具,掌握贪心算法可以帮助你在编程和算法竞赛中取得更好的成绩。原创 2024-08-29 20:51:06 · 563 阅读 · 0 评论 -
生动形象的解释下动态规划算法
动态规划是一种强大的算法,通过将复杂问题分解为更小的子问题,并存储这些子问题的解,以避免重复计算。通过这种方式,动态规划可以高效地解决许多优化问题。希望通过这个生动形象的迷宫探险例子,你能够更好地理解动态规划的基本概念和应用。好的,让我们继续深入探讨动态规划的应用和一些经典问题的解决方法。动态规划是一种强大的算法,通过将复杂问题分解为更小的子问题,并存储这些子问题的解,以避免重复计算。通过这种方式,原创 2024-08-29 20:41:10 · 837 阅读 · 0 评论 -
生动形象的解释下3d地图A星寻路算法
A算法是一种强大的启发式搜索算法,广泛应用于路径规划和导航问题。通过结合实际路径成本和启发函数估计,A算法能够高效地找到从起点到目标的最短路径。A算法是一种强大的启发式搜索算法,广泛应用于路径规划和导航问题。通过结合实际路径成本和启发函数估计,A算法能够高效地找到从起点到目标的最优路径。在三维地图中,A*算法的实现和应用需要考虑更多的细节和优化策略,如动态调整启发函数、多目标寻路和并行计算等。通过不断优化和改进,A。原创 2024-08-29 20:35:00 · 1457 阅读 · 0 评论 -
行为树和有限状态机的对比
动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。有限状态机维护了一张图(如图结构,方框是状态,箭头是状态之间的联系),图中的结点代表不同的状态,状态之间通过某种条件触发转换,如果不满足条件则维持原状态。有限状态机,又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。事件(Event):又被称为“条件”,当满足条件时,将会触发一个动作,或者执行一次状态的迁移。状态集(States):包括现态和次态在内的一系列状态,用来描述状态机所处的状态。原创 2024-06-16 10:20:20 · 599 阅读 · 0 评论 -
OBB碰撞检测算法
备注参考不少网友的观点。原创 2024-06-16 09:41:21 · 1254 阅读 · 0 评论 -
分治算法
分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。即一种分目标完成程序算法,简单问题可用二分法完成。基本思想当我们求解某些问题时,由于这些问题要处理的数据相当多,或求解过程相当复杂,使得直接求解法在时间上相当长,或者根本无法直接求出。对于这类问题,我们往往先把它分解成几个子问题,找到求出这几个子问题的解法后,原创 2017-12-15 01:38:15 · 275 阅读 · 0 评论 -
二路归并算法
归并算法到底是什么意思 呢?听到归并就知道其实是把数组进行合并,那么我们合并的时候肯定有什么特征。 首先我们归并的目标是数组,由于是二路归并,那么我们是有2个数组需要合并,并且这2个数组是有序的。如果说我们是从小到大进行排序。那么这2个数组都是从小到大有序的。现在的问题是如果我们拿到一个无序数组是怎么样得到我们的有序数组在开始第一轮合并操作的呢。 我们是用递归把原数组进行拆分成2部分,一直拆分原创 2017-12-15 15:09:46 · 3288 阅读 · 0 评论 -
普里姆和克鲁斯卡尔最小生成树算法史上最详细菜鸟教程详解(c++版)
针对图数据结构最小生成树普里姆与克鲁斯卡尔算法详细讲解额外知识点必须知道的东西?首先什么图数据结构,什么又是树,图数据结构和树数据结构又有什么联系和区别,为什么我们的图数据结构需要换成最小生成树,这个生成树在实际中又有什么意义, 普里姆和克鲁斯卡尔算法又分别是什么,他们之间有什么区别。图数据结构:首先你必须知道数据结构是什么,所谓数据结构就是数据之间的关系,比如一个队伍,假如导游给我们这个队伍原创 2017-12-12 02:40:47 · 2847 阅读 · 1 评论 -
通俗易懂的让你彻底搞懂冒泡排序的由来
先上图:冒泡排序是属于简单排序当中的,为什么叫冒泡排序呢, 假如我们把我们的元素用泡泡去比喻,那么数据不同,泡泡就不同大小。假如我们想把数据从小到大排序,那么在排序的过程中小泡泡会慢慢往上被交换出来也叫冒上来。分析冒泡过程:既然冒泡排序就是元素不断交换的过程,那么我们图中假如有5个泡泡,那么我们假如开始第一趟冒泡比较,第一个泡和第二个泡比较大小,大的泡泡会放在下面的位置,那么...原创 2017-11-12 10:30:28 · 17115 阅读 · 7 评论 -
直接插入排序算法详解
//直接插入排序 array待排序的数组 n数组的元素个数void InsertSort(int[] array, int n){ //我们默认第一个元素也就是索引为0的有序 //循环遍历索引1--n-1对应的数据进行排序 //依次从索引1开始到最后一个元素一一和当前索引前面的元素进行一一的比较进行排序 //定义循环需要的变量 int i = 1;原创 2017-11-17 23:22:55 · 2218 阅读 · 3 评论 -
快速排序算法详细讲解c++版
快速排序算法1.首先我需要对快速排序算法下个定义:什么是快排呢?或者是排序的指导思想比如一个待排序的数组 int iArray[] = {5,4,45,878,45}; 我们需要把这个数组从小到大进行排序。 我们首先需要找到一个参数轴 也就是参数的数据 有了参考数据我们就把数据分成2个部分,一个数据全部是大于或者等于当前参考数据,另一部分数据都是小于或者等于当前参考数据的。下面分析快原创 2017-12-14 16:56:34 · 24741 阅读 · 3 评论 -
二叉树前序遍历的代码实现(c语言/c++版本)
include “stdafx.h”includetypedef char ElemType; //给节点元素类型取别名,方式后续修改节点数据类型//设计二叉树节点元素的数据结构类型 typedef struct BitNode { ElemType data; //二叉树的节点元素的具体数据元素 struct BitNode *lchild, rchild; //用于存当原创 2017-11-03 04:28:37 · 4973 阅读 · 0 评论 -
二叉树的遍历方式
二叉树的遍历方式首先二叉树的遍历是什么意思,为什么需要遍历,我先拿线性表来举例。大家对游戏中的排行榜肯定非常熟悉了吧,排行榜是根据假如是根据玩家战力进行排序在排名榜上进行显示给玩家看,假如我们通过对玩家战力的比较排序之后从大到小把玩家的数据存入顺序存储结构当中,并且在view视图层的代码中遍历这个数据存储结构依次显示在排行榜当中,大家明白了为什么需要遍历了吧。说白就是取数据。我们拿数组来说,他的原创 2017-11-03 03:19:02 · 467 阅读 · 0 评论 -
二叉树的存储结构该如何选择呢
不多先上个二叉树的图:我们先是从ABCDEFG这个顺序依次编号为1-7. 下面是描述了一个数组顺序存储结构。我们依次把A-G存入数组的索引为1到7当中。 有没有发现一个规律。假如我们的数组索引和二叉树中的编号是不是一一对应,刚好我们通过索引的计算就可以从数组当中得到当前数据的左右孩子和双亲节点。假如i代表当前的节点。公式还是i = 2i得到左孩子节点,i = 2i + 1右孩子节点。 从这里我原创 2017-11-03 02:57:45 · 600 阅读 · 0 评论 -
学习二叉树必须知道的基本性质
二叉树首先二叉树为什么是我们讨论的对象,那么多叉树,比如3叉树,4叉树,5叉树。其实我也不知道为什么讨论二叉树,但是二叉树的使用范围是非常广泛的。所以我们会深入的去讲解二叉树。二叉树为何物,即定义是什么,二叉树还有个英文名在国外叫Binary Tree.是不是非常的熟悉。首先我们要知道二叉树并不是真的树,在计算中是描述了一个数据节点持有2个子节点并且仅最多2个节点。这2个子节点是没有任何交集也就原创 2017-11-03 02:27:03 · 3992 阅读 · 0 评论 -
数据结构与算法之树的孩子双亲存储结构的讲解
注意看这个知识点需要有的树数据结构的基本知识,本文不贴实际代码只是讲解孩子双亲存储结构的由来和优点,为什么要用这个以及其他方式的缺点对比。先上图 这个图是由11个字母组成的树关系的图,为什么趁为树,因为他们之间的联系看起来像树而命名。 图的深入分析:这个树的根节点是字符A,他的孩子节点又 是3个子树,分别是根节点B,C,D组成。叶子节点也就是没有孩子了有C,F,H,I,J,K.原创 2017-11-02 22:14:52 · 6376 阅读 · 0 评论 -
利用拿扑克牌让你几分钟搞定插入排序算法
先拿一个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 · 4534 阅读 · 1 评论 -
几分钟明白什么叫平衡二叉树
平衡二叉树先看看上图我们将同样的数据形成二叉树,但是二叉树的高度是不同的。 我们都知道二叉树的高度不同那么查找元素的平均时间是不同的。平均查找时间是怎么计算的,我们是把每个节点查找的次数加起来除全部节点数就是平均查找时间,而每个节点找到的时间就是二叉树的层 比如第一幅图 jan的查找次数是1 Feb 就是2 全部加起来除全部节点数那么我们得到这三幅图的查找效率最高的是第二幅图。 直接根据原创 2017-11-12 09:50:29 · 6245 阅读 · 0 评论 -
彻底搞定二叉搜索树c++版本
今天我们的主题是二叉搜索树也有叫二叉排序树还是和以前一样,我们谈某个技术之前先谈谈出现的理由:二叉搜索树那么到底是什么,做什么的,根据字面意思其实就是使用特定二叉树的特性去查找树里的某个元素。我们先来谈谈查找的概念: 查找分静态查找和动态查找静态查找:比如我们在字典里找个单词,所谓静态就去查找元素的时候,并不会去改集合,比如我查找单词,假如字典里没有想要的单词,你是不会把你这个单词插入到字典里面的。原创 2017-11-12 09:39:50 · 387 阅读 · 0 评论 -
几分钟搞定队数据结构在非递归层序遍历算法中的应用
研究队数据结构在层序遍历算法的应用之前:我们先需要了解几个基本知识,首先队数据结构是什么,有什么特性也就是不同点。 首先队数据结构其实也就是数据类型,只是这个数据类型里面在堆上开了一定的内存,可以保存大量的元素,其次进入的元素,当前我们想要取保存的元素不能像数组类型那样根据下标任意的取数据元素。 队数据结构只给我们提供了pop操作和Push操作,底层代码其实是在内存两端进行操作的。层级遍历又是什原创 2017-11-12 03:09:10 · 748 阅读 · 0 评论 -
非递归中序遍历二叉树算法详解
注意学习这个算法需要随时可以在脑海中输出二叉树的中序遍历的序列 举例:如上图,我们就看到一棵二叉树:那么我们是不是马上可以想到这棵二叉树的中序遍历序列是什么呢?我直接给出答案:D B EF A G H C I 我们如果不适用递归中序遍历二叉树即实现输出二叉树中的全部数据并且每个节点只访问一次的操作。那么在我们的算法中是通过单独开内存来保存节点数据,我们这个内存指的其实就是我们学过的栈数据结构S原创 2017-11-11 11:10:07 · 32484 阅读 · 3 评论 -
轻松让你彻底搞定c++版 线索二叉树的线索化算法
二叉树图首先我们要先谈谈线索二叉树数据结构的出现理由,为什么要出现。我们可以不用线索二叉树吗,那是肯定的。谈线索二叉树之前你必须对二叉树的链式存储结构遍历非常了解。如果不了解请先搞懂先,我们知道二叉树的节点数据类型有如下几种设计孩子双亲节点,我就谈这一种设计。孩子双亲那就说明这个节点数据保存了孩子和双亲的地址,可以立马找到当前节点的孩子和双亲,但是如果我想不用遍历就得到比如中序遍历后的当前节点的前序原创 2017-11-11 02:24:47 · 848 阅读 · 0 评论 -
数据结构之线索二叉树数据结构
首先要谈一谈线索二叉树为什么会产生,很多东西不是无缘无故的突然出现在书本,那么肯定是有他出现的理由,我先举个你们熟悉的案例,比如开始我们是使用单链表进行数据的存储和访问,但是访问方法只能从一端跑到顶,假如我们想要访问最后一个节点元素,我们必须通过首节点开始一一遍历,这个时候循环链双向表就产生了,我们可以快速访问末尾节点,那么线索二叉树也是为了快速访问吗,NO,我们是为了不浪费内存,其实都一样,都是为原创 2017-11-03 06:41:41 · 436 阅读 · 0 评论 -
利用栈数据结构彻底搞定走迷宫案例解析(并非最短路径)
先上迷宫图 迷宫数据图我们分0 1 -1 三种可能 0表示可以走白色表示 1表示障碍物 -1表示已经走过 方位规则设置: 方位也就是我们下面的di的取值为0 1 2 3 这四个方位 表示当前格子可行走的方位迷宫算法分析: 刚开始的时候我们是有迷宫起点也就是(i,j)是当前起点方块 并且还没有找到当前方块的下一个行走方位,我们根据上面的介绍我们知道方位根据顺时针开始标号为原创 2017-11-13 10:19:08 · 1428 阅读 · 0 评论
分享