随笔分类 - 数据结构与算法分析
摘要:给出的一些常见的数据结构与算法的笔试面试题,特整理如下,后期遇到新的再更新。 笔试面试题 常见时空复杂度有 常数级复杂度:O(1) 对数级复杂度:O(logN) 线性级复杂度:O(N) 线性对数级复杂度:O(NlogN) 平方级复杂度:O(N2) 冒泡排序算法(重点) (1)算法流程 a.比较两个相
阅读全文
摘要:一、贪婪算法介绍 算法基本思路:从问题的某一个初始解出发一步一步地进行,根据某个优化测度,每一步都要确保能获得局部最优解。每一步只考虑一个数据,他的选取应该满足局部优化的条件。若下一个数据和部分最优解连在一起不再是可行解时,就不把该数据添加到部分解中,直到把所有数据枚举完,或者不能再添加算法停止。(
阅读全文
摘要:软件环境:Python 3.7.0b4 一、迪杰斯特拉(dijkstras)算法介绍 算法目标:找出一个图中最快(耗时最短)的路径。 实现步骤: 二、迪杰斯特拉算法术语介绍 迪杰斯特拉算法用于每条边都有关联数字的图,这些数字称为权重(weight)。 带权重的图称为加权图(weighted grap
阅读全文
摘要:软件环境:Python 3.7.0b4 一、算法描述 假设你经营着一家芒果农场,需要寻找芒果销售商,以便将芒果卖给他。为此,我们可以通过广度优先搜索算法,在朋友中查找出符合条件的芒果销售商。 广度优先搜索是一种用于图的查找算法,可帮助我们回答两类问题: 第一类问题:从节点A出发,有前往节点B的路径吗
阅读全文
摘要:软件环境:Python 3.7.0b4 一、散列函数 无论你给它什么数据,它都还你一个数字。它必须满足一些要求: 它必须是一致的。例如,假设你输入apple时得到的是4,那么每次输入apple时,得到的都必须为4。 它应将不同的输入映射到不同的数字。例如,如果一个散列函数不管输入是什么都返回1,那它
阅读全文
摘要:软件环境:Python 3.7.0b4 一、分而治之 工作原理: 找出简单的基线条件; 确定如何缩小问题的规模,使其符合基线条件。 4.4:二分查找的基线条件是数组只包含一个元素。如果要查找的值与这个元素相同,就找到了!否则说明它不在数组中。递归条件为 把数组分成两半,将其中一半丢弃,并对另一半执行
阅读全文
摘要:软件环境:Python 3.7.0b4 一、基线条件和递归条件 由于递归函数调用自己,因此编写这样的函数时很容易出错,进而导致无限循环。例如: 当我们编写递归函数时,必须告诉它何时停止递归。所以,每个递归函数都有两部分: 基线条件(base case):函数调用自己。 递归条件(recursice
阅读全文
摘要:软件环境:Python 3.7.0b4 一、选择排序 二、课后练习 答案(如果有更好的欢迎评论或私信~) 2.1:每天都在列表中添加支出项,但每月只读取支出一次。而数组的读取速度很快,但插入速度慢;链表的读取速度慢,但插入速度快。因为我们执行的插入操作比读取操作多,因此使用链表合适。 2.2:经常要
阅读全文
摘要:软件环境:Python 3.7.0b4 一、二分查找 二、一些常见的大O运行时间 下面按从快到慢的顺序列出经常遇到的5种大O运行时间: O(log n):对数时间,这样的算法包括二分查找。 O(n):线性时间,这样的算法包括简单查找。 O(n * log n):这样的算法包括快速排序。 O(n2):
阅读全文
摘要:一、介绍 在互联网公司的笔试题中,经常会出现给出一个二叉树的前序和中序遍历,让你去求它的后序遍历问题,因此我将这类题型的解题步骤总结如下。 二、例题 题目解析: 注:此题中f节点的爸爸是d。 前序遍历顺序 根->左->右:abefd。 中序遍历顺序 左->根->右:ebadf。 后序遍历顺序 左->
阅读全文
摘要:一、介绍 在做一些互联网公司的笔试题中,经常会出现一道有关栈的进出序列判断的问题,下面我就根据一道例题,阐述下我的解题思路。 二、例题 题目解析: 先看第一个选项,a进a出,b进b出,c进c出,d进d出,所以最后的出栈系列为 a,b,c,d。 第二个选项,abc进,c先出,d进d出,b出,a出,所以
阅读全文
摘要:昨晚一朋友给我发了一个关于算法速查表的文章链接,我觉得作者总结的很好,所以我只将里面的英文转为了中文,剩下的没变。 声明:文章内容非本人原创,原文链接 程序员所有的算法速查表。 数据结构操作 数组排序算法 图操作 堆操作
阅读全文
摘要:一、介绍 直播人:左程云老师 直播时间:2018.2.1晚上八点 二、code技巧的磨炼 【题目】荷兰国旗问题 已知一个整型数组arr,和一个整数num,请把小于num的数放在数组的左边,等于num的数放在数组的中间,大于num的数放在数组的右边。要求:时间复杂度为O(N),额外空间复杂度O(1)。
阅读全文
摘要:原题链接:https://vjudge.net/problem/Aizu-ALDS1_1_A 题目描述 Write a program of the Insertion Sort algorithm which sorts a sequence A in ascending order. The a
阅读全文
摘要:一、广度优先遍历 上次我们浅谈了图的深度优先遍历,接下来我们使用广度优先搜索来遍历这个图: 这五个顶点被访问的顺序如下图所示: 二、实现过程 广度优先搜索过程如下: 广度优先遍历的主要思想: 三、完整代码如下
阅读全文
摘要:一、图的深度优先概述 图,就是由一些小圆点(称为顶点)和连接这些小圆点的直线(称为边)组成的。例如: 上图是由五个顶点(编号为1、2、3、4、5)和五条边(1-2、1-3、1-5、2-4、3-5)组成。 现在我们从1号顶点开始遍历这个图(遍历指的是把每一个顶点都访问一次)。使用深度优先搜索来遍历这个
阅读全文
摘要:问题引入 我们接着上次“解救小哈”的问题继续探索,不过这次是用宽度优先搜索(BFS)。 注:问题来源可以点击这里 http://www.cnblogs.com/OctoptusLian/p/7429645.html 最开始小哼在入口(1,1)处,一步之内可以到达的点有(1,2)和(2,1)。 但是小
阅读全文
摘要:一、问题引入 有一天,小哈一个人去玩迷宫。但是方向感不好的小哈很快就迷路了。小哼得知后便去解救无助的小哈。此时的小哼已经弄清楚了迷宫的地图,现在小哼要以最快的速度去解救小哈。那么,问题来了... 二、问题的分析 首先我们用一个二维数组来存储这个迷宫,刚开始的时候,小哼处于迷宫的入口处(1,1),小哈
阅读全文
摘要:一、问题引入 输入一个数n,输出1~n的全排列。 分析:我们可以先将问题形象化,假如有编号为1、2、3的3张扑克牌和编号为1、2、3的3个盒子,现在需要将这3张扑克牌分别放到3个盒子里面,并且每个盒子有且只能放一张扑克牌。那么一共有多少种不同的做法呢? 不难看出,一共会出现6种排列,分别是:123、
阅读全文
摘要:一、定义 线性表是由n个类型相同的数据元素组成的有限序列,记为(a1,a2,...,ai-1,ai,ai+1,...,an)。 二、特点 逻辑上相邻的元素,在物理上也相邻。只要确定了第一个元素的起始位置,线性表的任一元素都可以随机存取,因此,线性表的顺序存储结构是一种随机存取的存储结构。 三、存储结
阅读全文