要命的数据结构与算法
每次都会折腰在数据结构和各大算法之中,好好恶补一下。
我是一只程序⚪
多读书,多看报
展开
-
排序算法的时间与空间复杂度分析
时间复杂度时间复杂度是同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。计算机科学中,算法的时间复杂度是一个函数,它定性描述了该算法的运行时间。这是一个关于代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,它考察当输入值大小趋近无穷...原创 2019-04-28 21:17:54 · 4469 阅读 · 0 评论 -
Python实现二叉树的遍历(前序,中序,后序,层级,深度)
前序遍历:前序遍历算法先访问树的根节点,然后以类似的方式分别遍历左子树和右子树,如下图所示中序遍历:中序遍历算法先遍历左子树,然后访问根节点,最后遍历右子树,如下图所示:后序遍历:后序遍历算法先遍历左子树,然后右子树,最后访问根节点,如下图所示:层序遍历: 层序遍历的算法从0层级开始,在每一层级按照从左到右的顺序访问节点,如下图所示:用Python来实现:...原创 2019-04-26 23:06:11 · 769 阅读 · 0 评论 -
散列表查找为何如此之快
一、散列函数散列是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。建立了关键字与存储位置的映射关系,公式如下:存储位置 =f(关键字)设所有可能出现的关键字集合记为U(简称全集),实际发生(即实际存储)的关键字集合记为K(|K|比|U|小得多)。散列方法是使用函数f将U映射到表T[0..m-1]的下标上(m=O(|U|...原创 2019-04-24 22:28:40 · 857 阅读 · 0 评论 -
条件概率公式、全概率公式以及贝叶斯公式
一、条件概率公式P(A|B)——在 B 条件下 A 的概率.即事件A 在另外一个事件 B 已经发生条件下的发生概率. P(AB)——事件A、 B同时发生的概率,即联合概率.联合概率表示两个事件共同发生的概率.A 与 B 的联合概率表示为 P(AB) 或者 P(A,B). P(B)——事件B发生的概率.条件概率 示例:就是事件A 在另外一个事件 B 已经发生条件下的发生概率.条件概...原创 2019-04-25 09:27:35 · 4712 阅读 · 0 评论 -
数据结构:堆(Heap)
堆就是用数组实现的二叉树,所有它没有使用父指针或者子指针。堆根据“堆属性”来排序,“堆属性”决定了树中节点的位置。堆的常用方法:构建优先队列 支持堆排序 快速找出一个集合中的最小值(或者最大值) 在朋友面前装逼堆属性堆分为两种:最大堆和最小堆,两者的差别在于节点的排序方式。在最大堆中,父节点的值比每一个子节点的值都要大。在最小堆中,父节点的值比每一个子节点的值都要小。这就是...原创 2019-02-01 10:35:40 · 1794 阅读 · 0 评论 -
【面试专题09】Python全栈日记-判断字符串有效性
面试题:规范思路设置一个栈结构,把输入的字符串从头开始取,如果取出的为左括号(( { [),就将左括号放入栈中,如果取出的为右括号()] }),就和栈中左括号开始匹配。代码如下:这种以数据结构为基础的方法是面试官最想看到的。但是这个题所用的方法还很多,例如:...原创 2019-01-18 11:34:34 · 388 阅读 · 0 评论 -
【面试专题08】Python全栈日记-常数时间检索最小栈元素
面试题: Python实现:这个题的难点,在于理解什么是常数时间,常数时间代表了,无论第几次取最小数所用时间都是相同的。 此面试题思路如下:设置两个列表,一个列表为栈结构,另一个列表用来保存最小的数,每次入栈的时候先将数放入栈结构列表中,然后进行判断,如果小于保存最小数的列表的数,就把最小数存在队尾,每次入栈数对比队尾那个数就可以了,当检索栈中最小数时,直接显示板寸...原创 2019-01-18 11:34:16 · 362 阅读 · 0 评论 -
【面试专题07】Python全栈日记-希尔排序
在写这篇日记之前我看了好多别人写的,大同小异,但是大家都存在的区别就在于间隔增量如何取,而且虽然程序确实能够执行,但是也都避重就轻没有解释如果列表元素为奇数个时思路是如何的。 本次笔记在(https://www.cnblogs.com/jsgnadsj/p/3458054.html)基础上进行一些扩展。 直接插入排序在在本身数量比较少的时候情况下效率很高,如果待排数的数量...原创 2019-01-17 08:23:32 · 1078 阅读 · 1 评论 -
【面试专题06】Python全栈日记-归并排序
本文选自(https://www.cnblogs.com/chengxiao/p/6194356.html)他过程已经写的非常好了,但是代码是java的,这里用python实现一下。 一、归并排序思想归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题...原创 2019-01-17 08:22:27 · 1071 阅读 · 0 评论 -
【面试专题05】Python全栈日记-判断链表是否存在环
首先如何确定有环?我们给链表设置一个指针,当这个指针一直往下走,如果指针最后等于none,则单链表无环如果指针一直走,不会停下,那么就说明有环。确定有环很简单,那如何确定入口呢?也就是环在哪里开始。我们给单链表的头设置两个指针,一个为slow一个为fast。slow每次前进1格,slow=slow.nextfast每次前进2格,fast=fas...原创 2019-01-17 08:14:28 · 1036 阅读 · 0 评论 -
【面试专题04】Python全栈日记-栈和队列相互实现
这回面试题来自掌阅的面试栈:先进后出1,2,3,4进入取出来顺序为4,3,2,1队:先进先出1,2,3,4进入1,2,3,4取出1、两个栈实现队我们把1,2,3,4进入一个栈取出来后变为4,3,2,1,再把4,3,2,1放入另一个栈取出来后变为1,2,3,4,这就实现了队的先进先出。代码:结果:实现了先入先出。...原创 2019-01-17 08:13:18 · 1342 阅读 · 0 评论 -
【面试专题01】Python全栈日记-链表倒叙
本文选自(https://blog.csdn.net/ljyljyok/article/details/77996029)代码为本人改为python程序(图中的c语言的NULL即为python中的None)很多公司的面试题库中都有链表倒叙道题,有的公司明确题目要求不能使用额外的节点存储空间,有的没有明确说明,但是如果面试者使用了额外的节点存储空间做中转,会得到一个比较低的分数。...原创 2019-01-15 07:59:43 · 153 阅读 · 0 评论