随笔分类 -  数据结构与算法

摘要:Timsort介绍 Timsort是一种混合、稳定高效的排序算法,源自合并排序和插入排序,旨在很好地处理多种真实数据。它由Tim Peters于2002年实施使用在Python编程语言中。该算法查找已经排序的数据的子序列,并使用该知识更有效地对其余部分进行排序。这是通过将已识别的子序列(称为运行)与 阅读全文 »
posted @ 2020-08-01 17:39 程序员小宇 阅读(587) 评论(0) 推荐(0) 编辑
摘要:当然堆排序还有一种更好的办法。从小到大排序的时候不建立”最小堆“而是建立”最大堆“! 最大堆建立好之后,最大的元素是h[1],因为我们需要从小到大排序,希望最大的数放在最后,那么我们将h[1]和h[n]交换,此时h[n]就是数组中最大的元素。最大的元素归位后,将堆的大小减1,n--,并将交换后的新h 阅读全文 »
posted @ 2020-07-05 17:38 程序员小宇 阅读(141) 评论(0) 推荐(0) 编辑
摘要:概述 什么是布隆过滤器 布隆过滤器(Bloom Filter)是1970年由布隆提出的,它实际上是由一个很长的二进制向量和一系列随意映射函数组成。 它是一种基于概率的数据结构,主要用来判断某个元素是否在集合内,它具有运行速度快(时间效率),占用内存小的优点(空间效率),但是有一定的误识别率和删除困难 阅读全文 »
posted @ 2020-07-04 20:57 程序员小宇 阅读(347) 评论(0) 推荐(0) 编辑
摘要:图的表示 图的表示方法有俩种,邻接矩阵和邻接表。俩种方法各有特色。 邻接矩阵:边的关系使用二维数组保存。邻接表:边的关系使用链表 本文以邻接矩阵来演示图的基本操作。 图顶点类 isVisited代表该节点是否访问过 图类 成员变量需要有保存顶点的数组 保存边的二维数组 顶点的最大数目 当前顶点数 栈 阅读全文 »
posted @ 2020-04-26 18:36 程序员小宇 阅读(339) 评论(0) 推荐(0) 编辑
摘要:哈希表实现原理 哈希表底层是使用数组实现的,因为数组使用下标查找元素很快。所以实现哈希表的关键就是把某种数据类型通过计算变成数组的下标(这个计算就是hashCode()函数 怎么把一个字符串转化成整数下标呢? 可以把每个字符的ASCII对应的数字相加作为下标,比如"abc"=(a 96)+(b 96 阅读全文 »
posted @ 2020-04-26 10:44 程序员小宇 阅读(3413) 评论(0) 推荐(0) 编辑
摘要:优先级队列使用二叉堆实现的 插入元素和删除队列中最大的元素时间复杂度都是O(logn),因为这俩个操作是基于二叉堆的上浮和下沉操作实现的 二叉堆是什么? 二叉堆逻辑结构是完全二叉树,存储结构是数组 二叉堆是怎么存的呢? 如图:数组索引0的位置专门置空 优先级队列的实现 总结 二叉堆就是一种完全二叉树 阅读全文 »
posted @ 2020-04-22 16:18 程序员小宇 阅读(182) 评论(0) 推荐(0) 编辑
摘要:俩个栈实现队列的功能,头部删除,尾部添加,是否为空,返回队头 阅读全文 »
posted @ 2020-04-22 15:31 程序员小宇 阅读(318) 评论(0) 推荐(0) 编辑
摘要:迭代思想: 先用一个 for 循环找到第 m 个位置,然后再用一个 for 循环将 m 和 n 之间的元素反转。但是我们的递归解法不用一个 for 循环,纯递归实现反转。 迭代实现思路看起来虽然简单,但是细节问题很多的,反而不容易写对。相反,递归实现就很简洁优美,下面就由浅入深,先从反转整个单链表说 阅读全文 »
posted @ 2020-04-22 13:14 程序员小宇 阅读(600) 评论(0) 推荐(0) 编辑
摘要:单调栈是什么 单调栈就是一个简单的栈,只不过运用了一些巧妙的逻辑,使得每次元素入栈后都保持这有序递增(或者递减),用来处理一种典型问题Next Greater Element 比如求[2,1,2,4,3]的Next Greater Element,不存在设置 1 结果是:[4,3,4, 1, 1] 阅读全文 »
posted @ 2020-04-22 11:58 程序员小宇 阅读(200) 评论(0) 推荐(0) 编辑
摘要:一般框架: 二叉搜索树框架 二叉树设计总路线: 1. 二叉树算法设计的总路线:把当前节点要做的事做好,其他的交给递归框架,不用当前节点操心。 2. 如果当前节点会对下面的子节点有整体影响,可以通过辅助函数增长参数列表,借助参数传递信息。 例题1:判断是否是一个BST,有些时候直接写不出来需要使用辅助 阅读全文 »
posted @ 2020-04-21 22:53 程序员小宇 阅读(134) 评论(0) 推荐(0) 编辑
摘要:素数定义: 该数只能被1和它本身整除(1不是素数) 解法不断优化版: 定义一个函数判断是否是素数 判断函数的优化,循环只需要从[2,sqrt(n))即可。 使用排除法的思想,2是素数 2的整数倍(2倍以上)不是素数;3是素数,3的整数倍不是素数 等等 再上述方法再加上循环的优化,循环只需要从[2,s 阅读全文 »
posted @ 2020-04-21 22:26 程序员小宇 阅读(469) 评论(0) 推荐(0) 编辑
摘要:什么是LRU算法 LRU是Least Recently Used的缩写,即最近最少使用,常用于页面置换算法,为虚拟页式存储管理服务。LRU算法的提出,是基于这样一个事实:在前面几条指令中使用频繁的页面很可能在后面的几条指令中频繁使用。反过来说,已经很久没有使用的页面很可能在未来较长的一段时间内不会被 阅读全文 »
posted @ 2020-04-21 22:16 程序员小宇 阅读(3524) 评论(0) 推荐(2) 编辑
摘要:自定义数组 主要功能有增、删(根据索引,根据值)、改、查扩容等功能 1 package array; 2 3 public class CustomArray { 4 private int[] array = null; 5 //数组有效长度 6 public int length = 0; 7 阅读全文 »
posted @ 2020-03-29 19:05 程序员小宇 阅读(2720) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示