数据结构
文章平均质量分 83
饭小粒
蓝牙&Android&iOS&EN
展开
-
哈弗曼树的路径问题
因此可以知道兄弟的权值,这样,给定的一个序列就可以推出两个叶子,两个序列推出四个叶子,这样就可以根据是否选择最小的两个叶子结点组合在一起作为判据,决定这个序列是否成立了。再看第二个序列,知道叶子结点6和父亲14,可以知道有个叶子兄弟是8,这个权值是14的结点有意思了,刚好可以和第一个结合成兄弟,且父亲为24,恰恰满足要求。OK,问题出来了,四个权值10,0,11,4是原始序列中的权值,按理说0,4最小,应该组合在一起,但是这里没有。如果24是第一个序列的,就不可能指到12,所以两个序列不是同一棵树的。转载 2023-12-28 09:20:16 · 239 阅读 · 0 评论 -
数据结构——知识点总结-线性表
例如,{1,1,2,3,3,3,4,4,7,7,7,9,9,9}经过删除后变成{1,2,3,4,7,9}30.设有两个长度为n的单链表(带头结点),结点类型相同,若以h1为头结点指针的链表是非循环的,以h2为头结点指针的链表是循环的,则(B)(5)有一个顺序表L,其元素为整型数据,设计一个算法,将L中所有小于表头元素的整数放在前半部分,大于表头元素的整数放在后半部分。(4)设计一个算法,从一给定的顺序表L中删除下标i~j( �≤� ,包括i,j)的所有元素,假定i,j都是合法的。转载 2023-12-02 15:37:35 · 410 阅读 · 0 评论 -
链表逆置详细讲解(图文)
重点在 L->next 整体, 即 L->next 这个结点,->next在这里就是个形式,目的还是为了告诉你是这个结点!// L->next代表已逆置的第一结点,s的指针域指向它。//s 对 队伍(已逆置部分)的队首(已逆置的第一结点)说:你不要排在柜台前了,你排在我后面。//(头结点的指针域,即)第一结点 设置为s。每一轮循环体执行结束后,s指向刚刚逆置成功的结点,p指向下一轮待逆置的结点。//2.1 s记录正在处理的结点,p记录下一轮待处理的结点。转载 2023-11-30 22:25:26 · 379 阅读 · 0 评论 -
算法笔记之2-路归并排序
两两分组,得到四组: {66, 12}、 {33,57}、 {64,27}、 {18},组内单独排序,得到新序列{{12, 66}, {33, 57}, {27, 64}, {18}}。将四个组继续两两分组,得到两组: {12, 66, 33, 57}、{27, 64, 18},组内单独排序,得到新序列{{12, 33, 57, 66}, {18, 27, 64}}。//左子区间[i,mid],右子区间[mid+1,min(i+step-1,n)]//递归,左子区间[left, mid]进行归并排序。转载 2023-11-28 16:00:43 · 138 阅读 · 0 评论 -
数据结构知识详解 第一章 绪论
注: - 该方法本质上是顺序存储方法的扩展 - key:关键字 - Hash():计算地址的方法,散列函数 - location:存储该节点的地址。注: - 索引表的每项称为索引项,索引项的一般形式是 - 关键字:标识唯一一个节点 - 地址:指向上述节点的指针。渐进空间复杂度:简称为空间复杂度,记为S(n)=O(g(n))数据域:数据元素由若干个数据项构成时,数据项的表示称为数据域。算法的基本运算的频度与T(n)同数量级。时间复杂度为O(log₂(n))注:数据项是数据的最小单位。转载 2023-11-20 15:01:08 · 84 阅读 · 0 评论 -
寻找TopN——在10亿数据中找到1000个最大的数
目录问题描述如何从10亿数据中找到前1000大的数?解法针对该问题,给定一个数组data,从中找出前n个最大的数。解题思路先维护一个具有n个数的堆,然后调整该堆为小顶堆,即每个父节点都比其子节点小。然后从剩下的数组中逐一读取数据,将读取到的数据跟堆顶比较。如果该数比堆顶小,直接丢弃;如果该数比堆顶数大,则用该数替换堆顶,重新调整该堆为小顶堆。等待所有数据处理完毕,这时候已经的小顶堆就是TopN。public class TopN {// 当前节点的父节点 private int转载 2020-09-04 20:22:16 · 711 阅读 · 0 评论 -
海量数据处理 - 10亿个数中找出最大的10000个数(top K问题)
前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅场的心已经按捺不住了),这个问题还是建立最小堆比较好一些。 先拿10000个数建堆,然后一次添加剩余元素,如果大于堆顶的数(10000中最小的),将这个数替换堆顶,并调整结构使之仍然是一个最小堆,这样,遍历完后,堆中的10000个数就是所需的最大的10000个。建堆时间复杂度是O(mlogm),算法的时间复杂度为O(nmlogm)(n为10亿,m为10000)。 ...转载 2020-08-23 12:44:27 · 533 阅读 · 0 评论 -
HashMap实现原理分析
1. HashMap的数据结构数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。 数组数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;链表链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除容易。哈希表那...转载 2018-11-23 15:28:32 · 87 阅读 · 0 评论 -
Stack的三种含义
学习编程的时候,经常会看到stack这个词,它的中文名字叫做"栈"。理解这个概念,对于理解程序的运行至关重要。容易混淆的是,这个词其实有三种含义,适用于不同的场合,必须加以区分。含义一:数据结构stack的第一种含义是一组数据的存放方式,特点为LIFO,即后进先出(Last in, first out)。在这种数据结构中,数据像积木那样一层层堆起来,后面加入的数据就放在最上层。...转载 2018-11-23 10:36:28 · 290 阅读 · 0 评论 -
B树,B+树,B*树,B-树
B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如: B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,转载 2017-08-13 08:53:58 · 170 阅读 · 0 评论