
数据结构与算法
学习笔记
王景清
Java后端菜鸟一枚
展开
-
广度优先搜索(breadth-first search,BFS)
广度优先搜索(breadth-first search,BFS) 应用场景:到X的最短路径 原理:搜索范围从起点向外延伸,先查一度关系,再查二度关系,以此类推 这样不仅能找到A到B的路径,而且找到的还是最短的路径 注意:只有按关系层级顺序查找才能找到最短路径 使用的数据结构: **队列(**Queue),先进先出(FIFO) 散列表(Map),用来映射元素下一层级关联的元素,在下面例子中对应某个人的朋友们 运行时间:O(V+E) V:边数 E:顶点数
散列表 也叫哈希表 数组+散列函数 类比Java中的Map key-value键值对 应用: DNS域名解析,你输入 www.baidu.com 就会映射到相应的IP 防止重复,key值是唯一的,投票系统,每个人只能投一次 缓存,Web服务器存一些经常使用的数据到内存中,如Redis 散列函数 特性: 1.一致性,输入apple得到4,那么再次输入apple得到的还是4 2.输入不同,映射得到的也不同,如果输入不同的数得到相同的结果,说明这个散列函数不是好的 3.散列函数返回的索引是有效的,不会超过数组长度原创 2022-03-11 17:10:10 · 459 阅读 · 0 评论 -
快速排序(分而治之+归纳证明)
分而治之 D&C(Divide and Conquer)的工作原理: ①找出简单的基线条件 ②确定如何缩小小问题的规模,使其符合极限条件 eg:快速排序 基线条件:数组为空或只包含一个元素 缩小规模:选取一个基准值,把数组分解成三个部分(小于基准值的数组,基准值,大于基准值的数组) 再把小于基准值的数组和大于基准值的数组再次分解,直到满足基线条件 归纳证明 ①基线条件 ②归纳条件 eg:证明我能爬到梯子的最上面 基线条件:我已经站在第一个横档上 归纳条件:换言之,如果我站在第二个横梯上,就能爬到第三原创 2022-03-10 17:06:49 · 715 阅读 · 0 评论 -
选择排序-算法-Java
时间复杂度:O(n2) // 找出当前集合最小的数 public static Integer findMinNumber(LinkedList<Integer> arr) { int min = arr.get(0); for (int i = 0; i < arr.size(); i++) { if (arr.get(i) < min) { min = arr.get(i); } } return min; } // 把找到的最小元原创 2022-03-09 11:18:25 · 436 阅读 · 0 评论 -
二分查找-算法-Java
适用场景:如查字典 A-Z 26个顺序英文字母 随机选取一个字母 只需 log26 次即可找到字母所在位置(索引) 条件:必须是顺序数组 时间复杂度:O(logn) public static Integer binarySearch (Integer[] list, Integer item) { Integer low = 0; Integer high = list.length - 1; Integer mid = 0; // 当最后一个元素也没有匹配到,low和high错位,返回null原创 2022-03-08 10:20:27 · 236 阅读 · 0 评论