![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法分析
文章平均质量分 92
记录算法心得,欢迎一起讨论
Bug型程序员
这个作者很懒,什么都没留下…
展开
-
(8) 散列表(Hash Table)原理和业界应用场景
1.散列思想和散列函数(1)散列思想 散列表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。 例如将运动员编号和运动员信息一一对应。 数组实现:因为参赛编号1~n跟数组下标一一对应,当我们需要查询参赛编号为x的选手的时候,我们只需要将下标为x的数组元素取出来就可以了,时间复杂度就是O(1)。 散列函数实现:使用复杂能够区分用户的编号XXXXX作为key。 把参赛编号key转化为数组下标的映射方法就叫作散列函数...原创 2021-09-22 23:09:26 · 2005 阅读 · 1 评论 -
(7)Redis有序集合跳表实现原理
数据结构&算法模块总结(1)复杂度分析原理与方法 (2)数组与链表原理和使用场景讲解 (3)栈原理与应用场景讲解 (4)队列原理与应用场景讲解 (5)递归原理与虚拟机栈场景应用 (6)二分查找及其应用场景 1.跳表与链表 ①原始链表查找效率为O(N) ②跳表优化思路:每隔两个或两个以上节点时,提取一个节点到上一级,抽取出来的一级称为索引或索引层。down指针,可以指向下一级结点。 这种链表加多级索引的结构,就是跳表。 例如要查找节点16,可以现在...原创 2021-09-22 01:05:22 · 1820 阅读 · 0 评论 -
(6)二分查找及其应用场景
数据结构&算法模块总结(1)复杂度分析原理与方法 (2)数组与链表原理和使用场景讲解 (3)栈原理与应用场景讲解 (4)队列原理与应用场景讲解 (5)递归原理与虚拟机栈场景应用 1.传统二分查找模板问题public int bsearch(int[] a, int n, int value) { int low = 0; int high = n - 1; while (low <= high) { int mid = (l原创 2021-09-13 22:51:03 · 3374 阅读 · 0 评论 -
(5)递归原理与虚拟机栈场景应用
1.递归需要满足的三个条件①一个问题的解可以分解为几个子问题的解②这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样(子问题和父问题完全一样)③存在递归终止条件如经典递归跳台阶代码:int f(int n) {if (n == 1) return 1;return f(n-1) + 1;}2.递归缺点(1) 深度问题 递归会利用栈保存临时变量如果递归过深,会造成栈溢出。解决方案是控制递归的深度。// f(...原创 2021-09-06 01:14:13 · 2544 阅读 · 0 评论 -
(2)数组与链表原理和使用场景讲解
1.数组结构、原理和使用场景数组官方定义:数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。数组使用容易,但从线性表和非线性表角度思考效果更好一些。(1) 线性表顾名思义,线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。其实除了数组,链表、队列、栈等也是线性表结构。(2) 非线性表相对立的概念是非线性表,比如二叉树、堆、图等。之所以叫非线性...原创 2021-09-05 16:32:33 · 4308 阅读 · 0 评论 -
(1)复杂度分析原理与方法
// array表示⼀个⻓度为n的数组// 代码中的array.length就等于nint[] array = new int[n];int count = 0;void insert(int val) { if (count == array.length) { int sum = 0; for (int i = 0; i < array.length; ++i) { sum = sum + array[i]; ...原创 2021-09-05 16:03:54 · 2399 阅读 · 0 评论 -
(4)队列原理与应用场景讲解
1.链式队列和数组队列(1)数组队列 队列与栈的最大特点就是:队列有队头和队尾指针(下标),而栈只有顶端指针(下标)。 一句话总结两者特点:“队列吃多了会拉(头进尾出),而栈吃多了会吐 (头进头出)”public class ArrayQueue { private String[] items; // 数组 private int n = 0; // 数组大小 // ★★head表示队头下标,tail表示队尾下标。栈只有一个顶部下标! priva...原创 2021-09-05 14:54:36 · 2195 阅读 · 1 评论 -
(3)栈原理与应用场景讲解
1.顺序栈和链表栈(1)顺序栈①顺序栈基于数组,数组满时需要动态扩容②代码实现// 基于数组实现的顺序栈public class ArrayStack { private String[] items; // 数组 private int count; // 栈中元素个数 private int n; //栈的大小 // 初始化数组,申请一个大小为n的数组空间 public ArrayStack(int n) { thi原创 2021-09-05 14:13:17 · 2015 阅读 · 0 评论 -
最优二叉查找树
1.问题和公式设T(i, j)是由记录{ri, …, rj}(1≤i≤j≤n)构成的二叉查找树,C(i, j)是这棵二叉查找树的平均比较次数。虽然最后的结果是C(1, n),但遵循动态规划法的求解方法,需要求出所有较小子问题C(i, j)的值,考虑从{ri, …, rj}中选择一个记录rk作为二叉查找树的根结点,可以得到如下关系:设一个二维表C[n+1][n+1],其中C[i][j]表示二叉查找树T(i, j)的平均比较次数。二维表R[n+1][n+1],其下标范围与二维表C相同,R[i][j]表示二叉原创 2020-12-24 11:53:10 · 5563 阅读 · 0 评论 -
图论——同构图
同构图解法——关联矩阵1.同构图定义2.同构图判断(关联矩阵求解)原创 2020-01-14 18:50:49 · 14946 阅读 · 1 评论