数据结构与算法
文章平均质量分 51
baiyechangjiu
不要同情自己,同情自己是懦夫的行为
展开
-
贪婪算法/贪心算法
什么是贪心算法贪心算法的思想在于,将一个大的问题拆解成多步的小问题,然后通过在解决每个小问题的时候选择对自身最为有利的结果,从而保证自身利益的最大化。贪心算法是五大算法中的一员,五大算法分别为:分治 动态规划 贪心 回溯 分支界定贪心算法在数据结构中的应用非常的广泛。贪心算法可以简单的描述为:大事化了,小事化了。对于一个较大的问题,通过找到与子问题的重叠,将复杂的大问题划分为简单的多个小问题,在对每个小问题进行求解的时候找出最优值来进行处理。也就是说贪心算法是一种在每一步选择中都采取在原创 2021-08-21 05:58:20 · 626 阅读 · 0 评论 -
数据结构与算法:链表
链表是物理存储单元上非连续的,非顺序的存储结构,链表是由一个个结点,通过指针来联系起来的,其中每个结点包含数据和指针:或者我们采用另一张更加明显的图:因为在C++语言中,当我们生成一个数组的时候,就要声明数组的长度,如此计算机便会在内存上开辟一个连续的不间断的内存空间来存储数据,因为存在着这样的一种可能,也就是数组所使用的内存空间之后的内存空间已经被使用,所以C++中一旦数组的大小明确了,就不能够再改变了。而且因为数组是存储一系列的同一类型的变量的集合,所以构成数组的每一个元素占用的内存空间原创 2021-08-21 05:57:36 · 346 阅读 · 0 评论 -
C++:冒泡排序
冒泡排序是计算机领域中一个非常简单的排序算法,通过比较一个数组中相邻的两个元素的大小,来完成对数组从大到小或者从小到大的排序。冒泡排序的基本原理如下所示:比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。假设我们有一个数组:int a[10] = {4,1,3,8,7原创 2021-08-20 18:31:46 · 1256 阅读 · 0 评论 -
图解算法笔记:广度优先搜索
图论假设要从双子峰前往金门大桥:第一步可以走:第二步可以走:第三步可以走:于是乎我们发现只需要三步就可以从双子峰走到了金门大桥:虽然除了这一条路线,还有其他的路线能够从双子峰达到金门大桥,但是其他的路径来的更远(至少需要四步),而这一条路线只需要三步。类似的问题被称之为叫做最短路径问题(shorterest-path problem),而解决最短路径的方法被称之为叫做广度优先搜索。广度优先搜索可以用于解决两类问题:从节点A出发,有前往节点B的路径吗? .原创 2021-08-20 09:55:02 · 1406 阅读 · 0 评论 -
图解算法笔记:散列表
散列函数准确地指出了数据的存储位置,原因有:散列函数总是将不同的输入映射到相同的索引 散列函数将不同的输入映射到不同的索引 散列函数知道数组有多大,之返回有效的索引通过结合使用散列函数和数组可以创建一种被称之为叫做散列表的数据结构,散列表也被称之为叫做:散列映射,映射,字典和关联数组。在Python语言中,散列表的实现为字典,可以使用dict来创建散列表。我们可以用散列表来创建一个菜单和进行查询:menu = dict()menu["Apple"] = 1menu["Waeme原创 2021-08-20 09:53:56 · 103 阅读 · 0 评论 -
图解算法笔记:快速排序
分而治之快速排序需要使用 分而治之(Divide and conquer, D&C)策略来将一个序列风儿较小和较大的两个子序列,然后递归的排序两个子序列。分而治之需要三个步骤:找出基线条件,这个条件需要尽可能的简单 不断的将问题分解,直到符合基线条件一个简单的例子,假设我们有一个数组:[1,2,3,4,5],而我们需要求得这个数组中的元素的和。一个简单的方法是使用循环来进行求解:def sum(arr): total = 0 for x in arr:原创 2021-08-19 21:32:39 · 93 阅读 · 0 评论 -
图解算法笔记:冒泡排序
冒泡排序(Bubble Sort)也是一种简单直观的排序算法,该算法需要重复地走访要排序的数列,一次比较两个元素,可以见下图:通过不断的进行比较和重复,知道不再需要进行交换,列表的排序便完成了。代码如下所示:def bubbleSort(arr): #求取列表的长度 n = len(arr) for i in range(n): for j in range(0, n-i-1): if (arr[j] > arr原创 2021-08-19 21:32:00 · 71 阅读 · 0 评论 -
图解算法笔记:选择排序
数组与链表当我们需要将数据存储到内存中时,我们需要请求计算机提供内存空间,而如果我们需要存储多项数据时,我们通常会采用两种方式:数组 列表使用数组则意味计算机会为我们开辟一连串的内存空间用于存储数据,假设我们知道需要存储的数据的总量是多少,我们则可以在生成数组变量的时候进行声明来让计算机开辟制定大小的内存空间,但是倘若我们并不知道需要存储的数据的总量是多少,则意味着会出现需要存储的数据多于了我们开辟的内存空间的情况,而紧邻着我们的开辟的数组的内存空间的内存空间可能出现已经被占用的情况,在这样的情原创 2021-08-19 21:26:47 · 82 阅读 · 0 评论 -
图解算法笔记:二分查找
二分查找是一种在有序数组中查找某一个特定元素的搜索方法,需要注意,一定得是有序数组。二分查找算法会先从数组的中间元素开始查找,如果中间元素恰好是要查找的元素,则搜索过程结束;如果不是,则比较该中间元素与要查找的元素,如果中间元素大于了要被查找的元素,则在数组中小于中间元素的部分进行查找;反之则在数组中大于中间元素的部分进行查找。首先我们可以给出数组的初始位置,结束位置和中间位置:begin = 0end = len(list) - 1mid = (begin + end) / 2Py原创 2021-08-19 21:25:33 · 157 阅读 · 0 评论