数据结构
ScratKong
劝君惜取少年时
展开
-
N皇后问题
N皇后问题是一个经典的问题,在一个N*N的棋盘上放置N个皇后,每行一个并使其不能互相攻击(同一行、同一列、同一斜线上的皇后都会自动攻击)。一、 求解N皇后问题是算法中回溯法应用的一个经典案例 回溯算法也叫试探法,一种系统地搜索问题的解的方法。基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。 在现实中,有很多问题往往需要我们把其所有可能穷举...转载 2018-12-29 16:31:22 · 775 阅读 · 0 评论 -
logN的底数究竟是多少
问题:关于算法的时间复杂度很多都用包含O(logN)这样的描述,但是却没有明确说logN的底数究竟是多少。解答:算法中log级别的时间复杂度都是由于使用了分治思想,这个底数直接由分治的复杂度决定。如果采用二分法,那么就会以2为底数,三分法就会以3为底数,其他亦然。不过无论底数是什么,log级别的渐进意义是一样的。也就是说该算法的时间复杂度的增长与处理数据多少的增...转载 2019-03-01 09:36:29 · 6107 阅读 · 0 评论 -
跳跃表原理
最近看了一种数据结构叫做skipList,redis和levelDB都是用了它。Skip List是在有序链表的基础上进行了扩展,解决了有序链表结构查找特定值困难的问题,查找特定值的时间复杂度为O(logn),他是一种可以代替平衡树的数据结构。源地址:http://kenby.iteye.com/blog/1187303为什么选择跳表目前经常使用的平衡数据结构有:B树...转载 2019-03-16 21:54:04 · 262 阅读 · 0 评论 -
数据结构之队列
目录队列队列的实现双端队列队列队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出的(First In First Out)的线性表,简称FIFO。允许插入的一端为队尾,允许删除的一端为队头。队列不允许在中间部位进行操作!假设队列是q=(a1,a2,……,an),那么a1就是队头元素,而an是队尾元素。这样我们就可以删除时,总是从...翻译 2018-08-08 14:25:17 · 691 阅读 · 0 评论 -
数据结构之双向链表
双向链表一种更复杂的链表是“双向链表”或“双面链表”。每个节点有两个链接:一个指向前一个节点,当此节点为第一个节点时,指向空值; 另一个指向下一个节点,当此节点为最后一个节点时,指向空值。操作is_empty() 链表是否为空 length() 链表长度 travel() 遍历链表 add(item) 链表头部添加 append(item) 链表尾部添加 inse...转载 2018-11-11 21:27:56 · 248 阅读 · 0 评论 -
数据结构之二叉树及其Python实现
目录二叉树二叉树的基本概念二叉树的性质(特性)二叉树的节点表示以及树的创建二叉树的遍历深度优先遍历广度优先遍历(层次遍历)二叉树二叉树的基本概念二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)二叉树的性质(特性)性质1: 在二叉树的第i层上至多有2^(i-1)个结点...转载 2019-07-10 15:20:09 · 517 阅读 · 0 评论 -
二分查找Python实现
二分法查找二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后...转载 2018-10-25 00:22:34 · 569 阅读 · 0 评论 -
动态规划
动态规划算法的核心理解一个算法就要理解一个算法的核心,动态规划算法的核心是下面的一张图片和一个小故事。A * "1+1+1+1+1+1+1+1 =?" *A : "上面等式的值是多少"B : *计算* "8!"A *在上面等式的左边写上 "1+" *A : "此时等式的值为多少"B : *quickly* "9!"A : "你怎么这么快就知道答案了"A : "只要在8...转载 2018-12-29 16:32:13 · 360 阅读 · 0 评论 -
Python实现杨辉三角
题目杨辉三角定义如下:11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1把每一行看作一个list,试写一个 generator,不断输出下一行的list。 # -*- coding: utf-8 -*- def triangles(): N=[1] while True: ...转载 2018-11-07 16:39:27 · 246 阅读 · 0 评论 -
单向链表、单向循环链表
目录1 单向链表结构分析2 节点实现3 单链表的操作4 单链表的实现4.1 头部添加元素4.2尾部添加元素4.3 指定位置添加元素4.4 删除节点4.5 查找节点是否存在4.6 测试5 链表与顺序表的对比6 单向循环链表1 单向链表结构分析单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个...转载 2018-09-19 17:11:04 · 689 阅读 · 0 评论 -
常用排序算法Python实现
1 算法复杂度算法复杂度分为时间复杂度和空间复杂度。其中, 时间复杂度是指执行算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。算法的复杂性体现在运行该算法时的计算机所需资源的多少上,计算机资源最重要的是时间和空间资源,因此复杂度分为时间和空间复杂度。用大O表示。常见的时间复杂度(按效率排序)2 冒泡排序冒泡法:第一趟:相邻的两数相比,大的往...转载 2018-08-11 10:33:11 · 319 阅读 · 0 评论 -
MySQL事务隔离级别以及MVCC机制
一、事务隔离级别SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。1.Read Uncommitted(读取未提交内容) 在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被...转载 2018-12-02 15:59:20 · 534 阅读 · 0 评论 -
动态规划、迭代与递归
递归:好像相对高明,但其实效率而言递归并不是最佳方案。。迭代:貌似复杂,其实性能更高效。 分而治之DSA动态规划所谓动态规划:就是通过递归,找出问题本质,并且给出一个初步的解之后,再将其等效的转换为迭代的形式。make it work make it right make it fast两个栗子:1. 斐波那契数列(青蛙跳台阶):解决方法A:(记忆:memoi...转载 2018-09-02 15:43:54 · 610 阅读 · 0 评论 -
数据结构之栈
栈:stack 一组元素组成的线性序列,只允许在一端栈顶(进出口)进行加入和输出数据,栈底(不可操作)。特性:LIFO: 后进先出。栈的应用:逆序输出:进制转换 括号匹配:‘(’消去一对紧邻的左右括号,不影响全局的匹配判断。 左括号入栈,遇到右括号,匹配的话出栈。栈可以考虑多种不同的括号(方括号,圆括号) 栈混洗:按照某种规则,对栈中的元素进行排列。需要中转栈。(所有可能的出...原创 2018-09-03 16:31:21 · 200 阅读 · 0 评论 -
红黑树详细分析,看了都说好
红黑树简介红黑树是一种自平衡的二叉查找树,是一种高效的查找树。它是由 Rudolf Bayer 于1972年发明,在当时被称为对称二叉 B 树(symmetric binary B-trees)。后来,在1978年被 Leo J. Guibas 和 Robert Sedgewick 修改为如今的红黑树。红黑树具有良好的效率,它可在 O(logN) 时间内完成查找、增加、删除等操作。因此,红黑树...转载 2019-01-01 11:21:26 · 274 阅读 · 0 评论 -
数据结构----图
图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为: G(V,E), 其中 G表示为一个图, V 是图G中顶点的集合,E是图G中边的集合。对于图需要注意的点:线性表中,数据元素叫元素,树种将数据元素叫节点,图中的数据元素,叫顶点(Vertex)。 图中任意两个顶点之间都可能有关系,不像树层次关系的层级限制,而线性表只有相邻元素有线性关系。图中的定义:无...转载 2018-12-25 10:21:52 · 334 阅读 · 0 评论