Data structure
文章平均质量分 92
Forlogen
无论世事如何,你都要成为一个更优秀的人。
展开
-
一文理解Mysql中的BTree和B+Tree索引
文章目录1. 引入2. 优缺点3. 结构3.1 类型3.2 BTree3.3 B+Tree4.分类5. 使用5.1 创建索引5.2 删除索引5.3 修改索引6. 设计原则1. 引入Mysql中的索引(index)本身也是一种数据结构,它主要用来帮助Mysql提高获取数据库中数据的效率。具体来说,索引是一种满足特定查找算法的数据结构,它通过某种方式引用数据,在索引之上就可以实现高级的查找算法。如果理解索引对于数据获取的帮助呢?如果数据库中表的记录条数很少,那么查询的效率往往都很高。然而,在复杂的业务场原创 2020-08-23 21:21:18 · 1644 阅读 · 2 评论 -
数组、栈和队列之间的相互转换(Python + Java实现)
如何使用数组实现栈和队列?Python中的list有如下的两个方法:appned(x):在列表的末尾添加元素pop(index = -1):从列表中弹出指定索引的元素,默认为弹出列表的末尾元素因此,我们使用list可以很方法的实现栈和队列,废话不多说,直接上代码:数组实现栈:python实现class Stack: def __init__(self, array =...原创 2020-04-27 09:09:41 · 1795 阅读 · 0 评论 -
图形化理解二叉树 -> 堆 -> 堆排序(Java + Python实现)
二叉树二叉树最多只有左子树和右子树两个子树,二叉树的性质如下:在二叉树的第iii层最多有2i−12^{i-1}2i−1个节点深度为kkk的二叉树最多有2k−12^{k-1}2k−1个节点对于任意一棵二叉树,如果叶节点数为N0N_{0}N0,而度数为2的节点总数为N2N_{2}N2,则有N0=N2+1N_0 = N_2 + 1N0=N2+1具有nnn个节点的完全二叉树的深度必为l...原创 2020-04-25 15:31:20 · 350 阅读 · 0 评论 -
冒泡排序、选择排序、直接插入排序
冒泡排序思想: 不断地从头到尾的比较前后两个数如果前面的数大于后面的数,则执行交换两个元素,然后继续往后比较如果前面的数小于或等于后面的数,则直接往后继续比较每一次冒泡的过程都会将当前数组的最大值放到当前数组的最后一个位置。 因此,通过为了减少比较的次数。每次冒泡排序数组的长度都是上一轮数组长度减一。时间复杂度:冒泡过程需要比较NNN次,如果数组本身就是有序的,那么每次只需要比较...原创 2020-04-22 21:11:58 · 337 阅读 · 0 评论 -
图解归并排序(Java + Python实现)
归并排序归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排序是一种稳定的排序方法。时间复杂度:最好时间复杂度很最坏时间复杂度都是O(NlogN)O(N \...原创 2020-04-22 19:39:29 · 253 阅读 · 0 评论 -
摩尔投票法
摩尔投票法的基本思想很简单,在每一轮投票过程中,从数组中找出一对不同的元素,将其从数组中删除。这样不断的删除直到无法再进行投票,如果数组为空,则没有任何元素出现的次数超过该数组长度的一半。如果只存在一种元素,那么这个元素则可能为目标元素。想一想也好理解,如果数组中有个元素个数多于一半,那么只要找到一个和它不同的就减去一个,那么和它不同的元素个数必然是小于它的个数,那么最后全部找完后剩下的元素就是...原创 2020-04-17 00:06:16 · 226 阅读 · 0 评论 -
查找算法 - python
查找根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。线性查找线性查找是查找中最为暴力的一种方法,它的查找过程为:从表中第一个(或最后一个)记录开始,逐个进行记录的关键字和给定值比较,如果某个记录的关键字和给定值相等,则查找成功,找到所查的记录。如果直到最后一个(或第一个)记录,其关键字和给定值比较都不等时,则表中没有所查的记录,查找不成功。def seqSea...原创 2020-03-31 09:51:10 · 264 阅读 · 0 评论 -
二分查找解题模板
所谓模板只是为了在解决相关问题时提供一个较好的出发点,具体细节还应根据具体的题目进行调整。二分查找模板二分查找在解题过程中经常出现,如查找target是否在给定的数组中存在、查找包含重复元素的数组中某一个数target对应的左右边界或查找旋转数组的旋转点……相比较于线性扫描O(N)O(N)O(N)的实际复杂度,二分查找的时间度为O(logN)O(\log N)O(logN)。查找ta...原创 2020-03-29 16:05:19 · 293 阅读 · 0 评论 -
贪心算法
概念贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。 贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。基本思路1. 建立数学模型来描述问题;2. 把求解的问题分成若干个子问...原创 2018-09-16 17:07:50 · 491 阅读 · 0 评论 -
二分查找
如何在一个无序的数列中查找到一个指定的数据,就涉及到查找的问题。最直观想到的方法无非就是从头到尾一个一个的比较,直到中间某个数据符合或是到最后一个元素查找失败。但这样做时间复杂度较大,很难满足程序的需求,故我们需要一些更加高效的算法,而二分查找就是一个使用很普遍的算法。二分查找的基本思想在一个查找区间中,确定出查找区间的中心位置,用待查找数据元素的关键字和中心位置上数据元素的关键字比较...原创 2018-02-24 09:45:40 · 299 阅读 · 0 评论 -
NP问题
什么是P问题、NP问题和NPC问题这或许是众多OIer最大的误区之一。 你会经常看到网上出现“这怎么做,这不是NP问题吗”、“这个只有搜了,这已经被证明是NP问题了”之类的话。你要知道,大多数人此时所说的NP问题其实都是指的NPC问题。他们没有搞清楚NP问题和NPC问题的概念。NP问题并不是那种“只有搜才行”的问题,NPC问题才是。好,行了,基本上这个误解已经被澄清了。下面的内容都是在讲什么是...转载 2018-02-23 12:01:21 · 369 阅读 · 0 评论 -
二叉树的概念和Python和Java实现
由于树可以转换为二叉树,故直接进行二叉树的学习。二叉树二叉树最多只有左子树和右子树两个子树,二叉树的性质如下:在二叉树的第iii层最多有2i−12^{i-1}2i−1个节点深度为kkk的二叉树最多有2k−12^{k-1}2k−1个节点对于任意一棵二叉树,如果叶节点数为N0N_{0}N0,而度数为2的节点总数为N2N_{2}N2,则有N0=N2+1N_0 = N_2 + 1N0...原创 2020-03-13 22:44:07 · 166 阅读 · 0 评论 -
python中的单链表、双向链表、栈和队列实现
单链表单链表是一种基本的数据结构,链表中每个节点里存放该节点的值和下一个节点的位置信息。节点定义:class SingleNode(object): def __init__(self, item): self.item = item self.next = None单链表的常用操作:is_empty():链表是否为空length():链表长度travel():遍历链...原创 2020-03-13 21:43:40 · 305 阅读 · 0 评论 -
stack
何为栈?堆栈式一种特殊的线性表,特殊之处在于两点: a. 它是一种遵循“先进后出”的规则; b. 只允许在固定的一端进行数据的插入和删除,称为栈顶,固定不变的一端称为栈底。 标识栈顶当前位置的变量称为栈顶指示器或栈顶指针,堆栈的插入称为进栈或入栈,堆栈的删除通常称为出栈或退栈堆栈的入栈过程 堆栈的出栈过程堆栈的操作集合 a. 入栈转载 2018-01-12 18:51:46 · 274 阅读 · 0 评论