
数据结构
数据结构相关
专注于计算机视觉的AndyJiang
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
排序算法之各种指标对比
原创 2020-09-28 17:00:35 · 342 阅读 · 0 评论 -
排序算法之直接插入排序和希尔排序
直接插入排序的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的,记录数增1的有序表,模仿扑克牌的思想。看代码:def insert_sort(nums): n = len(nums) for i in range(1,n): if nums[i] < nums[i-1]: # 需要将nums[i]插入到有序子表中 temp = nums[i] # 设置哨兵 j = i - 1 w原创 2020-09-28 15:10:02 · 282 阅读 · 0 评论 -
数据结构之B树和B+树
B树B树是为实现高效的磁盘存取而设计的多叉平衡搜索树。这个概念在文件系统,数据库系统中非常重要。基本原理B树是一种查找树,它最初启发于二叉查找树,二叉查找树的特点是每个非叶节点都只有两个孩子节点。然而这种做法会导致当数据量非常大时,二叉查找树的深度过深,搜索算法自根节点向下搜索时,需要访问的节点也就变的相当多。如果这些节点存储在外存储器中,每访问一个节点,相当于就是进行了一次I/O操作,随着树高度的增加,频繁的I/O操作一定会降低查询的效率。从外存储器中读取信息的步骤,简单来分,大致有两步:找到原创 2020-09-27 19:45:05 · 1907 阅读 · 0 评论 -
图之DFS、BFS、Dijkstra、Floyd、Prim、Kruskal算法
概要对于DFS和BFS,如果遇到搜索和遍历,肯定要想到堆栈和队列,而遇到堆栈肯定就要想到是不是可以用递归来实现,因为递归程序其实就是函数在内存中的出栈入栈,DFS就是使用堆栈或者递归来实现,而类似层次遍历的BFS自然就可以使用队列来实现DFS和BFSgraph = { 'a' : ['b', 'c'], 'b' : ['a', 'c', 'd'], 'c' : ['a','b', 'd','e'], 'd' : ['b' , 'c',原创 2020-09-24 20:33:38 · 965 阅读 · 0 评论 -
数据结构之单链表和双链表的区别
本文参考,如有侵权,联系删除链表和数组的区别数组静态分配内存,链表动态分配内存;数组在内存中连续,链表不连续;数组利用下标定位,时间复杂度为O(1),链表定位元素时间复杂度O(n);数组插入或删除元素的时间复杂度O(n),链表的时间复杂度O(1)。数组的优点随机访问性强(通过下标进行快速定位)查找速度快数组的缺点插入和删除效率低(插入和删除需要移动数据)可能浪费内存(因为是连续的,所以每次申请数组之前必须规定数组的大小,如果大小不合理,则可能会浪费内存)内存空间要求高,必须原创 2020-09-19 10:52:40 · 2537 阅读 · 0 评论 -
BST二叉搜索树之增删查验
二叉树算法的设计的总路线:明确一个节点要做的事情,然后剩下的事抛给框架。98. 验证二叉搜索树# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def isValidBST(self, roo原创 2020-08-05 16:27:45 · 310 阅读 · 1 评论 -
排序算法之快速排序
快速排序通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。第一种def quick_sort(array, left, right): if left<right: q = partition(array, left, right) quick_sort(array, left, q-1) q原创 2020-07-25 21:58:30 · 135 阅读 · 0 评论 -
排序算法之冒泡排序和选择排序
冒泡排序def bubble_sort(num_list): cnt = len(num_list) for i in range(cnt): for j in range(i, cnt): if num_list[i] > num_list[j]: num_list[i], num_list[j] = num_list[j], num_list[i]时间复杂度为:O( n^2 )空间复杂度就是在交换元素时原创 2020-07-25 21:51:45 · 234 阅读 · 2 评论 -
排序算法之堆排序
介绍堆排序也是一种选择排序。个人觉得是简单选择排序的优化,借助于二叉树这种数据结构,每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止。跟简单选择排序不同的是堆排序的待排序列是利用二叉树这种数据结构存储的。相比之下是更优化的。思想首先,要介绍一下堆。堆是一课顺序存储的完全二叉树。有大根堆和小根堆。]若每个结点的的key不小于其孩子结点的key,此时叫大根堆;若每个结点的的key不大于其孩子结点的key,此时叫小根堆。比如,序列{k1,k2,…,kn},满原创 2020-07-24 09:56:36 · 231 阅读 · 0 评论 -
霍夫曼编码计算图片压缩率
给定一个包含0,1,2,3像素值的灰度图像,其像素值的比例分别为70%,15%,12%,3%,求对其进行霍夫曼编码后相对于原始8bit存储的压缩率是多少?记符号为 0, 1, 2, 3频率为 0.75,0.15,0.12,0.03按照下列步骤构造哈夫曼树:将符号按频率排序,选取频率最小的两个符号("3"和"2")作为树的左右子节点将 "3"和"2"的频率合并得0.15,重新对合并的结果进行频率排序迭代1和2,得到哈夫曼树将哈夫曼树各级左子树标记为0,右子树标记为1得到哈夫曼编码为3:111原创 2020-07-08 21:01:49 · 14307 阅读 · 8 评论 -
数据结构之算法复杂度
算法复杂度分为时间复杂度和空间复杂度。时间复杂度是指执行这个算法所需要的计算工作量;空间复杂度是指执行这个算法所需要的内存空间。时间和空间(即寄存器)都是计算机资源的重要体现,而算法的复杂性就是体现在运行该算法时的计算机所需的资源多少。时间复杂度:算法的时间复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大程度上能很好地反映出算法的优劣与否;算法执行时间需要依据该算法编制的程序在计算机上执行运行时所消耗的时间来度量,度量方法有两种,事后统计方法和事前分析估算方法,因为事后统计方法原创 2020-06-13 20:51:32 · 470 阅读 · 0 评论 -
排序算法之归并排序
查找二分法def binary_find(num_list, x): num_list = sorted(num_list) left, right = 0, len(num_list) while(left<right): mid = (left+right)/2 if num_list[mid] > x: ...原创 2020-05-08 12:14:07 · 267 阅读 · 0 评论