摘要:一、如何分析一个“排序算法” 排序算法的执行效率 1. 最好情况、最坏情况、平均情况时间复杂度 第一,有些排序算法会区分,为了好对比做一下区分。第二,对于要排序的数据,有的接近有序有的接近无序。有序度不同的数据对于排序的执行时间肯定是有影响的,我们要知道在不同的数据下的性能表现。 2. 时间复杂度的
阅读全文
摘要:百度百科 归并排序是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法的一个典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,在使子序列段间有序。若将两个有序表合并成一个有序表, 称为二路归并。 归并操作的工作原理如下: 第一步: 申请空间,使其大小为两个已经排
阅读全文
摘要:工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。 选择排序法的第一层循环从起始元素开始选到倒数第二个元素,主要是在每次进入的第二层循环之前,将外
阅读全文
摘要:插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个之外的所有元素,内层循环对当前元素前面有序表进行待
阅读全文
摘要:递归需要满足三个条件 1. 一个问题的解可以分解为几个子问题的解 2. 这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一致。 3. 存在递归终止条件 如何编写递归代码 最关键的是写出递推公式,找到终止条件,剩下将递推公式转化为代码 假如有n个台阶,每次可以跨1个台阶或者2个台阶,请问走这
阅读全文
摘要:一、如何理解队列 可以想象成排队买票,先来的先买,后来的人只能站末尾,不允许插队。先进先出,这就是典型的队列。 栈只支持两个基本操作:入栈和出栈。队列和栈非常相似,支持的操作也很有限,基本的操作也是两个:入队,放一个数据到队列尾部;出队,从队列头取一个元素。所以队列和栈一样,也是一种操作受限的线性表
阅读全文
摘要:一、如何理解栈 举例说明一下,就是一摞叠在一起的盘子。我们平时放盘子的时候,都是从下往上一个一个放;取的时候,我们也是从上往下一个一个地依次取,不能从中间任意抽出。后进者先出,先进者后出,这就是典型的“栈”结构。 栈是一种“操作受限”的线性表,只允许在一端插入和删除数据。当某个数据集合只涉及在一端插
阅读全文
摘要:时间复杂度 数组 链表 插入、删除 O(n) O(1) 随机访问 O(1) O(n) 数组在实现上使用的是连续的内存空间,可以借助CPU的缓存机制,预读数组中的数据,所以访问效率更高。而连败哦在内存中不连续,所以对CPU缓存不友好,没办法预读。 数组的缺点是大小固定,一经声明就会占用整块连续内存空间
阅读全文
摘要:数组和链表是两个非常基础、非常常用的数据结构。 两者的区别:从底层的存储结构来看,数组需要一块连续的内存空间来存储,对内存的要求比较高。而链表恰恰相反,它并不需要一块连续的内存空间,它通过“指针”将一组零散的内存块串联起来使用。 三种常见的链表结构:单链表、双链表和循环链表。 单链表 概念定义: 我
阅读全文
摘要:visited = set() def dfs(node, visited): visited.add(node) #process current node here ... for next_node in node.children(): if not next_node in visited
阅读全文
摘要:def BFS(graph, start,end): queue = [] queue.append(start) visited.add(start) while queue: node = queue.pop() visited.add(node) process(node) nodes = g
阅读全文
摘要:def divide_conquer(problem, param1, param2, ...) #recursion terminator if problem is None: print_result return #prepare data data = prepare_data(probl
阅读全文
摘要:def recursion(level, param1,param2, ...): #recursion terminator if level >MAX_LEVEL: print_result return #process logic in current level process_data(
阅读全文
摘要:数组的概念 数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。 根据定义里边的关键词详解数组定义。 第一是线性表。 线性表就是数据拍成像一条线一样的结构。每个线性表上的而数据最多只有前和后两个方向。第二个是连续的内存控件和相同类型的数据。 因为有这两个特点
阅读全文
摘要:复杂度分析 复杂度分析是整个算法学习的精髓,只要掌握了它,数据结构和算法的内容基本上就掌握了一半。 事后统计法 把代码跑一遍,通过统计、监控,就能得到算法执行的时间和占用内存的大小。这样的话有很大的局限性。 1. 测试结果非常依赖测试环境 2. 测试结果受数据规模的影响很大 我们需要一个不用具体的测
阅读全文
摘要:如何系统高效的学习数据库结构 首先要掌握一个数据结构与算法中最重要的概念 复杂度分析。 数据结构和算法解决的是如何更省更快的存储和处理数据的问题,因此,我们就需要一个考量效率和资源消耗的方法,这就是复杂度分析方法。 其次总结了20个最常用、最基础数据结构与算法。 10个数据结构:数组、链表、栈、队列
阅读全文