- 博客(21)
- 收藏
- 关注
原创 算法分析·堆排序
当MAX-HEAPIFY作用在一棵以结点𝑖为根的、大小为𝑛的子树上时,对以𝑖的某个子节点为根的子树大小最多为2𝑛/3(此时,最底层恰好半满)。④INCREASE-KEY(S, x, k):将元素𝑥的关键字的值增加𝑘,这里𝑘值不能小于𝑥的原始关键字的值。假定左子树和右子树都是最大堆,MAX-HEAPIFY让根结点在最大堆中“下降”,得到高度加一的最大堆。优先级队列是一种用来维护由一组元素构成的集合S的数据结构,这一组元素中的每一个都有一个关键字Key。堆的物理结构本质上是顺序存储的,是线性的。
2025-03-24 01:23:31
760
原创 算法分析入门
算法就是问题的程序化解决方案。它定义了一个良好的计算过程,取一组值作为输入,并产生一组值作为输出。。fill:#333;color:#333;color:#333;fill:none;
2025-03-02 00:38:19
616
原创 数据结构:哈希表
无论是在顺序查找、二分查找、索引顺序查找,还算二叉排序树中,我们查找元素时,都需要逐个对比。那么,我们可不可以构造一种函数H,根据我们要查找关键字key和这个函数,可以直接确定查找值所在位置,直接找到数据,提升效率呢?答案是肯定的,这就是我们这篇文章的主角,哈希表。散列(Hashing):通过把记录的关键字映射到表中的一个存储位置,实现根据关键字的值直接访问数据元素的过程散列函数:把取值范围较大的关键字映射到某确定的存储位置的函数 ,也叫哈希函数。哈希表。
2023-12-23 23:54:34
969
1
原创 数据结构:查找表
首先,我们要引入关键字的概念。关键字:数据元素中某个数据项的值这么说也许有点抽象。举个例子,如果把人看作一个元素,在户籍管理系统中,我们通过身份证号查找某个特定的人,那么身份证号就是关键字。当然,我们知道,我们不仅能通过身份证号区分不同的人,还可以根据姓名、年龄等特征对其进行查找(当然,这些可能发生重复)。于是,我们把类似身份证号这样的唯一的标志称为主关键字,姓名这类不一定唯一的称为次关键字。主关键字:数据元素中的可以唯一标识一个数据元素的某数据项值次关键字。
2023-12-23 20:39:53
1334
1
原创 希尔排序(C语言)
希尔排序(Shell Sort)是插入排序的一种更高效的改进版本,也称为缩小增量排序。它基于增大元素之间的比较与交换间距的思想,先将待排记录表按间隔D分成若干子序列,然后利用插入排序完成子序列内排序,再渐次减小间隔D重复上述分组插入排序操作,直至D=1为止。也许,初次接触希尔算法时,会感到奇怪,为什么,希尔排序算法使用了多次的插入排序,复杂度反而更小呢?插入排序是不稳定的,希尔排序可以视为一种特殊的插入排序,自然也是不稳定的。因为,越接近有序的序列,插入排序算法所需的比较和移动次数越少。
2023-12-18 22:54:06
891
1
原创 三种简单排序算法 及其 mathematica 可视化
从未排序记录表的底部开始,依关键字逐次比较、交换相邻记录,将具有最小(大)键值的记录移至未排序记录表的顶部位置,直至记录表完全有序。依关键字在未排序记录表中查找记录,选择具有最小(大)键值的 记录并与未排序记录表的首元素交换放置,直至记录表完全有序。每次将一个元素插入已经排序好的序列中,相等的元素仍然按照初始时的先后顺序排列,相对位置没有发生改变。在移动最小/大键值的元素时,相等元素的相对位置可能改变,故选择排序是不稳定的。三者中,只有选择排序是不稳定的。故,冒泡排序是稳定的。故插入排序是稳定的。
2023-12-18 21:08:58
645
1
原创 插入排序、归并排序、快速排序 python 运行时间
插入排序的基本思想是将待排序列表中的每个元素依次插入到已排序好的列表的合适的位置。第 3 行的外循环的循环变量 i 是列表中待插入元素的索引值。第 6 - 8 行的内循环将待插入元素 value 依次与索引值为 i-1,i-2,…,0 的元素进行比较,将 比 value 大的元素向后移动,直至找到比 value 小的元素或者 pos=0 为止。第 9 行将 value 写 入索引值为 pos 的位置,完成插入。
2023-12-12 19:49:57
1025
原创 Three sum 问题及其 python 实现
给定一个整数 x 和一个由整数构成的集合 S,从 S 中找一 个由三个元素构成的子集,该子集中的三个元素之和必须等于 x。使用穷举法列举 S 的所有 由三个元素构成的子集,逐个检查其是否满足条件。
2023-12-12 17:59:21
1028
原创 Numpy 数组和矩阵计算
1,通过提供三个数组生成:data 保存所有非零元;row 保存所有非零元的行索引值;col 保存所有非零元的列索引值。关键字实参 shape 指定矩阵的行数和列数。2, 通过提供三个数组生成:data 保存所有非零元;indices 保存所有非零元的列索引值;indptr 的第i个元素表示前 i-1行的非零元个数。直接生成 CSR 格式的方式有两种。
2023-12-09 21:20:03
504
原创 数据结构及其应用算法·顺序表 笔记6
顺序表说白了就是线性表的顺序表示。当然,这样表述优点太过简单了。:采用顺序存储结构表示的线性表,即用一组地址连续的存储单元依次存储线性表的数据元素。顺序表La1a2an的存储结构如下所示:LOCai1LOCaiTLOCaiLOCa1Ti−1i10010。
2023-09-18 10:40:14
94
原创 求解最大连续子序列和的几种方法(C语言版)
求解最大连续子序列和,即以下问题给定一个整数数组arr及其长度arrSize,试找到一个具有最大和的连续子数组(子数组至少包含一个元素),返回其最大和。示例:int maxSubSum_BF(int *arr, int arrSize)①输入[4,-3,5,-2],输出6②输入[-1,2,-6,3],输出3③输入[4,-3,5,-2,-1,2,6,-2],输出11下面我们将采取不同方法,从不同角度解决这个问题。
2023-09-11 13:11:09
957
原创 数据结构及其算法应用·线性表的基本概念 笔记5
线性结构:描述数据元素之间存在的一对一逻辑关系,即在非空有限数据集中,逻辑相邻数据元素之间存在的序偶关系。线性表:具有线性结构的同类数据元素构成的有限序列例如,如下数据数据元素姓名年龄a1张三11a2李四45\dots\dotsan老十七14就有如下线性表La1a2anLa1a2an①同构性:由同类数据元素组成,所有元素必须属于同一数据对象②有穷性:由有限数据元素组成,数据元素的个数n称为表长。
2023-09-11 12:00:41
148
原创 数据结构及其算法应用·算法设计策略——笔记4
与分治法类似,所不同在于适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的,即存在重叠子问题,动态规划借助状态表记录和查找子问题的解,从而避免重叠子问题的重复求解,提高效率。把原问题分成若干规模较小、相互独立且形式相同的子问题,然后递归地对子问题求解,再将子问题的解进行加工合并,得到原问题的解。将原问题分解为若干规模较小、形式相同的子问题,然后分阶段迭代选择每个子问题的局部最优解,再将子问题的解合并获得原问题的解。③输入[4,-3,5,-2,-1,2,6,-2],输出11。
2023-09-07 13:38:36
164
原创 数据结构及应用算法·算法设计与分析——笔记3
设计出算法后,需要对算法的性能进行评估,于是,我们引入算法分析及其相关概念。T3(n):循环语句,执行频次n*(n+1)/2次。T4(n):赋值语句,执行频次n*(n+1)/2次。T1(n):循环语句O(k) (k未知)个正常数M,即:存在正常数N和M,使得当。基本操作的总执行频次为:T(n)=n。T1(n):赋值语句,执行频次1次。T2(n):循环语句,执行频次n次。在渐近算法分析中,我们一般使用“大。T1(n):循环语句O(n)T2(n):循环语句O(n)T3(n):赋值语句O(1)
2023-09-07 12:02:21
112
原创 数据结构及应用算·数据结构的基础概念——笔记1
即,数据结构由“数据对象”及“数据对象所包含的数据元素间的相互关系”两部分组成。例如,在如下表格中,单个格子是一个数据项,而一整行可视为一个数据元素。数据结构是较为抽象的概念,其具体实现依赖于物理硬件。例如,下图为两种不同的存储结构。
2023-09-04 17:27:37
130
1
原创 [C语言入门] 转义字符表
C语言的转义字符表常让新手头疼,这里附上转义字符表,并试着解释其字母的含义(个人推测,不一定完全正确),以便记忆。
2023-02-25 11:05:48
1517
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人