![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
头脑灵活的胖子
人生苦短,我爱学习!
展开
-
LeetCode Python 岛屿的个数
给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。示例 1:输入:11110110101100000000输出: 1class Solution(object): def numIslands(self, grid): ...原创 2018-09-28 16:05:30 · 655 阅读 · 1 评论 -
七大查找算法之哈希表查找
哈希表查找 哈希查找是通过计算数据元素的存储地址进行查找的一种方法,是一种以 键-值(key-indexed) 存储数据的结构,我们只要输入待查找的值即key,即可查找到其对应的值。 哈希表查找又叫散列表查找,通过查找关键字不需要比较就可以获得需要记录的存储位置,它是通过在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个 key 对应一个存储位置 f...原创 2018-10-21 17:10:34 · 2961 阅读 · 0 评论 -
七大查找算法之线性索引---稠密查找、分块索引、倒排索引
对于海量的无序数据,为了提高查找速度,一般会为其构造索引表。索引就是把一个关键字与它相对应的记录进行关联的过程。一个索引由若干个索引项构成,每个索引项至少包含关键字和其对应的记录在存储器中的位置等信息。对于这样的数据表,如何能够快速的查找到需要的数据呢?办法就是——索引。数据结构的最终目的是提高数据的处理速度,索引是为了加快查找速度而设计的一种数据结构。索引按照结构可以分为:线性索引...原创 2018-10-21 16:30:52 · 586 阅读 · 0 评论 -
七大查找算法之有序表查找---斐波那契查找
斐波那契查找 黄金比例又称黄金分割,是指事物各部分间一定的数学比例关系,即将整体一分为二,较大部分与较小部分之比等于整体与较大部分之比,其比值约为1:0.618或1.618:1。 斐波那契查找也是二分查找的一种提升算法,通过运用黄金比例的概念在数列中选择查找点进行查找,提高查找效率。同样地,斐波那契查找也属于一种有序查找算法。其核心也是如何优化那个缩减速率,使得查找...原创 2018-10-21 11:37:40 · 337 阅读 · 0 评论 -
七大查找算法之有序表查找---插值查找
插值查找在介绍插值查找之前,首先考虑一个新问题,为什么上述算法一定要是折半,而不是折四分之一或者折更多呢? 比如要在取值范围1 ~ 10000 之间 100 个元素从小到大均匀分布的数组中查找5, 我们自然会考虑从数组下标较小的开始查找。经过以上分析,折半查找这种查找方式,不是自适应的(也就是说是傻瓜式的)。二分查找中查找点计算如下: mid = (low + high)...原创 2018-10-21 11:04:10 · 236 阅读 · 0 评论 -
七大查找算法之有序表查找---二分查找
二分查找 二分查找也称为是折半查找,属于有序查找算法。元素必须是有序的,如果是无序的则要先进行排序操作。二分查找的前提条件是需要有序表顺序存储,对于静态查找表,一次排序后不再变化,二分查找能得到不错的效率。但对于需要频繁执行插入或删除操作的数据集来说,维护有序的排序会带来不小的工作量,那就不建议使用。原理: 二分查找用给定值k先与中间结点的关键字比较,中间结点把线...原创 2018-10-21 10:43:58 · 3118 阅读 · 0 评论 -
七大查找算法之无序表查找---顺序查找
静态查找表(Static Search Table):只作查找操作的查找表; 动态查找表(Dynamic Search Table):在查找过程中同时插入不存在的元素,或者是删除已经存在的元素。顺序查找 顺序查找适合于存储结构为顺序存储或链接存储的线性表。原理: 顺序查找也称为线形查找,属于无序查找算法。从数据结构线形表的一端开始,顺序扫描,依次将扫描到...原创 2018-10-21 10:20:29 · 7118 阅读 · 0 评论 -
九大排序算法之计数排序
计数排序(Counting Sort) 计数排序不是基于比较的排序算法,其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。原理: 对于给定的输入序列中的每一个元素x,确定该序列中值小于x的元素的个数 。一旦有了这个信息,就可以将x直接存放到最终的输出序列的正确位置上。它创...原创 2018-10-20 17:12:34 · 348 阅读 · 0 评论 -
九大排序算法之桶排序
桶排序(Bucket Sort) 桶排序 (Bucket sort)或所谓的箱排序,是一个排序算法, 是将一个数据表分割成许多buckets,然后每个bucket各自排序,或用不同的排序算法,或者递归的使用bucket sort算法。也是典型的divide-and-conquer分而治之的策略。它是一个分布式的排序,介于MSD基数排序和LSD基数排序之间。原理: ...原创 2018-10-20 16:58:44 · 412 阅读 · 0 评论 -
九大排序算法之基数排序
基数排序(Radix Sort) 基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用。原理: 基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高...原创 2018-10-20 16:37:43 · 197 阅读 · 0 评论 -
九大排序算法之归并排序
归并排序(Merge Sort) 归并排序是采用分治法的一个非常典型的应用。归并排序的思想就是先递归分解数组,再合并数组。归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。原理: 先考虑合并两个有序数组,基本思路是比较两个数组的最前面的数,谁小就...原创 2018-10-20 16:13:31 · 249 阅读 · 0 评论 -
九大排序算法之快速排序
交换排序—快速排序(Quick Sort) 快速排序(Quicksort)是对冒泡排序的一种改进。原理: 通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。算法详细描述:快速排序使用分治法来把一个串(list)分为两个子串(sub-lists)。具体算法描述...原创 2018-10-20 15:57:00 · 164 阅读 · 0 评论 -
九大排序算法之冒泡排序
交换排序—冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法。在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。原理: 它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来...原创 2018-10-20 15:34:14 · 169 阅读 · 0 评论 -
九大排序算法之堆排序
选择排序—堆排序(Heap Sort) 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。 大顶...原创 2018-10-20 14:46:24 · 167 阅读 · 0 评论 -
九大排序算法之简单选择排序
选择排序—简单选择排序(Simple Selection Sort) 选择排序(Selection-sort)是一种简单直观的排序算法。原理: 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。算法详细描述:n个记录的直接选择排序...原创 2018-10-20 11:31:24 · 693 阅读 · 0 评论 -
九大排序算法之希尔排序
插入排序—希尔排序(Shell`s Sort) 希尔排序是第一个突破O(n^2)的排序算法,是简单插入排序的改进版。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。原理: 先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。算法详细描述:先将...原创 2018-10-20 11:14:56 · 272 阅读 · 0 评论 -
九大排序算法之直接插入排序
插入排序—直接插入排序(Straight Insertion Sort) 插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。原理: 以从小到大排序为例,元素0为第一个元素,插入排序是从元素1开始,将小的元素插到前面。插入时分插入位置和试探...原创 2018-10-19 22:19:30 · 168 阅读 · 0 评论 -
七大查找算法之树表查找---二叉树查找算法
二叉树查找算法 二叉查找树是先对待查找的数据进行生成树,确保树的左分支的值小于右分支的值,然后在就行和每个节点的父节点比较大小,查找最适合的范围。 这个算法的查找效率很高,但是如果使用这种查找方法要首先创建树。原理: 二叉查找树(BinarySearch Tree,也叫二叉搜索树 BST,或称二叉排序树Binary Sort Tree)或者是一棵空树,或者是具...原创 2018-10-21 20:40:38 · 3800 阅读 · 0 评论