![](https://img-blog.csdnimg.cn/3abe12b6037244d3b50ab9d8048afb8a.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构及算法
文章平均质量分 70
数据结构及算法
李嘉图呀李嘉图
觉得内容对你有帮助的话就点点关注吧
展开
-
数据结构与算法--01背包问题
有n件物品和一个最大承重为W的背包,每件物品的重量是w[i],价值是v[i] 在保证总重量不超过W的前提下,选择某些物品装入背包,背包的最大总价值是多少? 注意:每个物品只有一件,也就是每个物品只能选择0件或者1件 分析:假设:W=10,有5件物品,重量和价值如下: 重量 价值 1 2 6 2 2 3 3 6 5 4 5 4 5 4 6 dp数组的计...原创 2022-04-27 14:38:45 · 913 阅读 · 0 评论 -
数据结构与算法--链表成环问题
给定一个链表,判断链表中是否有环。存在环返回 true ,否则返回 false分析:该题可以理解为检测链表的某节点能否二次到达(重复访问)的问题。需要一个容器记录已经访问过的节点 每次访问到新的节点,都与容器中的记录进行匹配,若相同则存在环 若匹配之后没有相同节点,则存入容器,继续访问新的节点 直到访问节点的next指针返回null,或者当前节点与容器的某个记录相同,操作结束。实现简单,时间复杂度为:O(n^2)遍历整个链表:O(n)每次遍历节点,再遍历数组进行匹配:O(n)换个思路:原创 2022-04-24 17:29:37 · 689 阅读 · 0 评论 -
数据结构与算法--算法思维之动态规划
动态规划概念经典问题时间复杂度优缺点适用场景原创 2022-04-21 23:00:00 · 505 阅读 · 0 评论 -
数据结构与算法--算法思维之回溯算法
回溯算法概念经典问题时间复杂度优缺点适用场景原创 2022-04-21 22:28:58 · 1372 阅读 · 0 评论 -
数据结构与算法--算法思维之分治算法
分治算法概念经典问题时间复杂度优缺点适用场景原创 2022-04-21 15:48:33 · 786 阅读 · 0 评论 -
数据结构与算法--算法思维之贪心算法
概要贪心算法分治算法回溯算法动态规划原创 2022-04-20 18:02:14 · 473 阅读 · 0 评论 -
数据结构与算法--二叉树、二叉查找树、红黑树、多路查找树、二叉堆
树的概念二叉树二叉树是树的一种特殊形式,每个节点最多有两个孩子节点。 可能只有一个或者没有孩子节点。满二叉树完全二叉树二叉查找树遍历二叉树红黑树多路查找树二叉堆...原创 2022-04-20 14:37:19 · 535 阅读 · 0 评论 -
数据结构与算法--基础排序之桶排序
实现思路桶排序同样是一种线性时间的排序算法桶排序需要创建若干个桶来协助排序每一个桶(bucket)代表一个区间范围,里面可以承载一个或多个元素桶排序的第1步,就是创建这些桶,并确定每一个桶的区间范围具体需要建立多少个桶,如何确定桶的区间范围,有很多种不同的方式。我们这里创建的桶数量等于原始数列的元素数量,除最后一个桶只包含数列最大值外, 前面各个桶的区间按照比例来确定。区间跨度 = (最大值-最小值)/ (桶的数量 - 1)假设有一个非整数数列如下:4.5,0.84,3.25,2.1原创 2022-04-14 18:11:22 · 93 阅读 · 0 评论 -
数据结构与算法--基础排序之计数排序
实现思路计数排序,这种排序算法是利用数组下标来确定元素的正确位置的。假设数组中有10个整数,取值范围为0~10,要求用最快的速度把这10个整数从小到大进行排序。可以根据这有限的范围,建立一个长度为11的数组。数组下标从0到10,元素初始值全为0假设数组数据为:9,1,2,7,8,1,3,6,5,3下面就开始遍历这个无序的随机数列,每一个整数按照其值对号入座,同时,对应数组下标的元素进行加1操作例如第1个整数是9,那么数组下标为9的元素加1最终,当数列遍历完毕时,数组.原创 2022-04-14 15:27:25 · 61 阅读 · 0 评论 -
数据结构与算法--基础排序之堆排序
目录实现思路代码实现时间复杂度堆排序即是利用堆这种数据结构设计的一种算法,堆是具有以下性质的完全二叉树大顶堆:每个结点的值都大于或等于其左右孩子结点的值小顶堆:每个结点的值都小于或等于其左右孩子结点的值我们对堆中的结点按层进行编号,将这种逻辑结构映射到数组中:该数组从逻辑上讲就是一个堆结构,我们用简单的公式来描述一下堆的定义就是:大顶堆:arr[i]>=arr[2i...原创 2022-04-14 14:38:41 · 230 阅读 · 0 评论 -
数据结构与算法--基础排序之快速排序
目录实现思路基准元素的选择元素的交换代码实现时间复杂度同冒泡排序一样,快速排序也属于交换排序,通过元素之间的比较和交换位置来达到排序的目的。不同的是,冒泡排序在每一轮中只把1个元素冒泡到数列的一端,而快速排序则在每一轮挑选一个基准元素,并让其他比它大的元素移动到数列一边,比它小的元素移动到数列的另一边,从而把数列拆解成两个部分,这种思路就叫作分治法。实现思路基准元素的选择在分治过程中,以基准元素为中心,把其他元素移动到它的左右两边我...原创 2022-04-14 14:05:20 · 739 阅读 · 0 评论 -
数据结构与算法--基础排序之冒泡排序
树树的概念二叉树二叉查找树遍历二叉树红黑树多路查找树二叉堆排序冒泡排序快速排序堆排序计数排序桶排序字符串匹配BF算法RK算法BM算法Trie树图图的概念...原创 2022-04-14 14:00:11 · 101 阅读 · 0 评论 -
数据结构与算法--字符串匹配算法
概要字符串匹配这个功能,是非常常见的功能,比如"Hello"里是否包含"el"? 在 Java 里用的是indexOf函数,其底层就是字符串匹配算法。主要分类如下:单模式与多模式的区别 单模式匹配算法即在一段文本中匹配单个字符串,多模式匹配算法则是需要匹配多个字符串。单模式匹配算法 BF算法 概念BF即是 Brute Force 缩写,即暴力匹配算法,也称为朴素匹配算法。例如在A字符串中查找B字符串,...原创 2022-04-07 17:22:51 · 2168 阅读 · 0 评论 -
数据结构与算法--图
图的概念图一图(Graph)是一种复杂的非线性表结构。 图中的元素叫做顶点(vertex),图中的一个顶点可以与任意其他顶点建立连接关系。把这种建立的关系叫做边(edge),跟顶点相连接的边的条数叫做度(degree)。 边有方向的图叫做有向图,比如A点到B点的直线距离,微信的添加好友是双向的。边无方向的图叫无向图,比如网络拓扑图。带权图(weighted graph)则是在图中,每条边都有一个权重(weight),我们可以通过这个权重来表示 ...原创 2022-04-02 15:57:03 · 981 阅读 · 0 评论 -
数据结构与算法--图的广度优先搜索 (BFS)
广度优先搜索即是 一种“地毯式”层层推进的搜索策略,即先查找离起始顶点最近的,然后是次近的,依次往外搜索。BFS解决的最短路径问题。采用BFS进行遍历的话,需要依赖队列,先进先出。假设我们有这么一个图,里面有A、B、C、D、E、F、G、H 8 个顶点,点和点之间的联系如下图所示, 对这个图进行广度优先的遍历第一步 选择起始顶点,从顶点 A 开始。把 A 压入队列,标记它为访问过(用红色标记)。第二步从队列的头取出顶点 A...原创 2022-04-02 15:29:44 · 1129 阅读 · 1 评论 -
数据结构与算法--图的深度优先搜索 (DFS)
深度优先搜索即是 从起点出发,从规定的方向中选择一个不断往前走,走到头为止,然后尝试另一种方向直到最后的终点。DFS解决的是连通性问题,即从A是否能到达B。采用DFS进行遍历的话,必须依赖栈,后进先出。假设有一个图,里面有A、B、C、D、E、F、G、H 8 个顶点,对这个图进行深度优先的遍历第一步选择一个起始顶点,例如从顶点 A 开始。把 A 压入栈,标记它为访问过(用红色标记),并输出到结果中。第二步 寻找与 A 相连并且还没有被...原创 2022-04-02 15:06:36 · 4175 阅读 · 6 评论 -
数据结构与算法--基础篇
概念常见的数据结构常见的算法算法复杂度空间复杂度时间复杂度数据结构与算法基础线性表散列表递归二分查找...原创 2022-02-14 15:37:29 · 1679 阅读 · 0 评论