
数据结构与算法
文章平均质量分 74
Tomorrowave
人工智能专业学生,中国人工智能协会学生会员,拥有多个发明专利和软著、核心期刊论文,荣获国家级竞赛奖项(1个国一、1个国二、1个国三)以及省级,市校级奖项若干。
展开
-
数据结构期末速成
设度为0的节点有N0个,度为k的节点有Nk个,则对严格的k叉树有 N0 = (k-1)Nk+1 ,由此得。在一颗二叉树中,如果某个节点的左指针为NULL,就说明这个节点在原来的森林中没有孩子,是叶子节点。使用DFS算法递归的遍历一个有环无向图,在退出递归时输出相应顶点,这样得到的顶点序列是。二叉排序树的查找性能和数据的输入顺序有关,最坏情况形成单支树,查找长度为O(n)与直接插入排序相比,折半插入排序减少了比较元素的次数,元素的移动次数并未改变。将森林F转换为对应的二叉树T,F中叶节点的个数等于。原创 2023-07-21 15:43:44 · 1019 阅读 · 0 评论 -
败者树的应用和规则
败者树(Loser Tree)是一种数据结构,用于在多个有序序列中选取最小元素。它的主要优点是可以在OklognO(k\log n)Oklogn的时间复杂度内完成kkk个有序序列的归并排序,相比于普通的归并排序的时间复杂度OknlognOknlogn,有了很大的优化。def external_sort(input_file , output_file , block_size) : # 划分阶段。原创 2023-04-20 16:11:00 · 713 阅读 · 0 评论 -
外部排序总结篇
外部排序是一种用于处理大型数据集的算法,它将数据分成小块,然后对这些块进行排序,最后将它们合并成一个有序的数据集。这种算法通常用于处理无法一次性装入内存的数据集。原创 2023-04-20 16:01:19 · 148 阅读 · 0 评论 -
外部排序、多路平衡归并树和败者树(有代码)
多路平衡归并算法是一种用于对多个有序序列进行合并的算法,它可以在O(n log k)的时间复杂度内完成,其中n是所有序列中元素的总数,k是序列的数量。败者树是一种用于多路归并排序的数据结构,它可以在O(n log k)的时间复杂度内完成,其中n是所有序列中元素的总数,k是序列的数量。与多路平衡归并算法不同,败者树可以在内存中完成排序,因此它通常用于内部排序。多路平衡归并算法是一种用于对多个有序序列进行合并的算法,它可以在O(n log k)的时间复杂度内完成,其中n是所有序列中元素的总数,k是序列的数量。原创 2023-04-20 15:49:52 · 348 阅读 · 0 评论 -
排序算法之冒泡排序(全解+代码)
冒泡排序是一种简单的排序算法,它的基本思想是重复地交换相邻两个元素,直到排序完成。冒泡排序的时间复杂度为O(n^2),在处理小规模数据时比较高效,但在处理大规模数据时效率较低。原创 2023-04-19 14:54:19 · 672 阅读 · 0 评论 -
排序算法之希尔排序
希尔排序(Shell Sort)也是一种插入排序,它是插入排序的一种高效率的改进版本。它的基本思想是将待排序的数组按照一定的间隔分成若干个子序列,对子序列进行插入排序,然后依次缩小间隔进行排序,直至间隔为1,此时整个序列已经基本有序,最后再做一次插入排序即可。希尔排序的优点在于在某些情况下可以比快速排序和堆排序更快,它的时间复杂度与增量序列的选取有关,但尚未找到一种最好的增量序列。希尔排序的时间复杂度最好情况为O(nlogn),平均情况为O(n1.3),最坏情况为O(n2),空间复杂度为O(1)。原创 2023-04-19 13:50:55 · 83 阅读 · 0 评论 -
排序算法之插入排序(全解+代码)
直接插入排序(Insertion Sort)是一种简单的排序算法,其基本思想是将一个待排序的元素插入到已排好序的有序数列中的适当位置,直到全部元素排序完成为止。具体实现过程如下:将待排序的数组分成两部分,已排序区间和未排序区间。初始时,已排序区间只有一个元素,就是数组的第一个元素。将未排序区间的元素依次插入到已排序区间的适当位置,直到未排序区间为空。原创 2023-04-19 13:33:45 · 3013 阅读 · 0 评论 -
散列表、哈希表、冲突
散列表(Hash Table),也称哈希表,是一种根据关键码值(Key-Value)进行访问的数据结构,通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。散列表可以使用数组来实现,每个数组元素对应一个桶,每个桶可以存储多条数据,每条数据的访问时间是O(1)的。散列表的核心就是散列函数,它把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变成固定长度的输出,该输出即为散列值。散列表中使用散列函数计算出每个关键字的散列值,并根据该值存储或查找对应的数据。原创 2023-04-19 13:16:54 · 1156 阅读 · 0 评论 -
平衡二叉树(AV树) 插入和删除 (C语言实现)
一种特殊的二叉查找树,它的左右子树的高度差不超过1,可以保证树的高度始终在log2(n)级别,从而保证了平衡二叉树的查找、插入、删除操作的时间复杂度都是O(logn)。常见的平衡二叉树有红黑树、AVL树等。AVL树的插入和删除操作都需要进行旋转操作来维护树的平衡,插入和删除的时间复杂度均为O(logn)。原创 2023-04-17 22:04:02 · 955 阅读 · 0 评论 -
二叉排序树的插入和删除操作(python实现)
二叉排序树的插入和删除操作都是在保持二叉排序树特性的前提下进行的。插入操作:在二叉排序树中插入一个新节点时,先比较新节点的值和当前节点的值的大小关系,若小于当前节点,则继续在当前节点的左子树中查找;若大于当前节点,则继续在当前节点的右子树中查找。重复该过程,直到找到一个空节点,将新节点插入到该位置上。删除操作:删除操作比较复杂,需要分类讨论。原创 2023-04-17 21:55:19 · 805 阅读 · 0 评论 -
二叉排序、平衡二叉树
相对于普通的二叉排序树,平衡二叉树的优点在于其查找、插入、删除操作的时间复杂度为O(logn),其中n为树中节点的个数。平衡二叉树,也称为自平衡二叉搜索树,是一种二叉排序树,它保持树的左右子树的高度差不超过1,从而保证了树的平衡性。二叉排序树的实现方式很多,可以使用链式存储结构或者数组存储结构。在二叉排序树中,若插入的数据是有序的,则二叉排序树将会退化成一条链表,这时候查找操作的时间复杂度将会退化为。平衡二叉树的缺点在于它的实现比普通的二叉排序树更为复杂,同时它需要维护额外的平衡信息,导致了空间开销更大。原创 2023-04-17 21:51:12 · 539 阅读 · 0 评论 -
插值查找和斐波那契查找
一种基于二分查找的优化算法,与二分查找相比,插值查找更加适用于数据分布较为均匀的有序数组。斐波那契查找是一种基于斐波那契数列的查找算法,与二分查找类似,只是每次将数组分成比例不同的两部分,而不是像二分查找一样分成相等的两部分。原创 2023-04-17 21:44:51 · 481 阅读 · 0 评论 -
查找算法:二分查找和哈希查找、二叉排序树、B树和B+树等python实现
查找算法是计算机科学中的一个重要问题,它的应用广泛。常见的查找算法有顺序查找、二分查找和哈希查找等。在实际应用中,我们需要根据具体的问题需求选择不同的查找算法,以实现更高效的数据查询。二分查找,也称折半查找,是一种高效的查找算法。它是基于有序数组的特性,每次通过将待查找的数据与中间元素比较,缩小查找范围,直到找到目标元素或者查找区间为空。原创 2023-04-17 21:42:07 · 860 阅读 · 0 评论 -
数据结构与算法:KMP匹配算法
KMP 算法。原创 2023-03-13 21:16:50 · 300 阅读 · 0 评论 -
数据结构与算法:表达式匹配问题
请实现一个函数用来匹配包含'\.'和'\*'的正则表达式。模式中的字符'\.'表示任意一个字符,而'\*'表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但与"aa.a"和"ab*a"均不匹配。原创 2023-03-08 14:24:03 · 345 阅读 · 0 评论 -
数据结构与算法 顺序表、链表总结
链表是一种随机存储在内存中的节点对象集合。节点包含两个字段,即存储在该地址的数据和包含下一个节点地址的指针。链表的最后一个节点包含指向null的指针。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VhHZYb70-1678256000199)(image/2021-03-12-21-00-33.png)]原创 2023-03-08 14:17:14 · 620 阅读 · 0 评论