06 2020 档案
摘要:上篇文章介绍了二分查找算法。因为二分查找底层依赖的是数组随机访问的特性,所以只能用数组来实现。那么数据存储在链表中,就不能用二分查找算法吗? 对于一个单链表,即便链表中存储的数据是有序的,如果要查找某个数据,也只能从头到尾遍历链表。这样查找效率很低,时间复杂度是O(n)。 如果像图中那样,对链表建立
阅读全文
摘要:二分查找是一种非常简单易懂的快速查找算法,生活中随处可见,比如数字炸弹游戏。 二分查找针对的是一个有序的数据集合,查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为0。 惊人的查找速度 二分查找是一种非常高效的查找算法,时
阅读全文
摘要:一、问题描述 如何实现一个通用的、高性能的排序函数? 二、如何选择合适的排序算法 线性排序的时间复杂度比较低,适用场景特殊,不适合。 小规模数据排序,可以选择时间复杂度O(n2)的算法; 大规模数据排序,选择时间复杂度O(nlogn)的算法;比如Java采用堆排序,C语言使用快速排序。 三、如何优化
阅读全文
摘要:一、桶排序 概念 桶排序,核心思想是将要排序的数据分到几个有序的桶里,每个桶里的数据再单独进行排序。桶内排序之后,再把每个桶里的数据按照顺序依次取出,组成的序列就是有序的。 应用场景 桶排序比较适合用在外部排序中。所谓的外部排序就是数据存储在外部磁盘中,数据量比较大,内存有限,无法将数据全部加载到内
阅读全文
摘要:一、归并排序 要排序一个数组,先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起。如下图: 重点: 归并排序使用的是分治思想。分治,就是分而治之,将一个大问题分解成小的子问题来解决。 分治思想跟递归思想很像,分治算法一般是用递归实现。 分治是一种解决问题的处理思想,
阅读全文
摘要:一、如何分析一个“排序算法” 从三个维度进行评价和分析: 1. 排序算法的执行效率 a. 最好情况、最坏情况、平均情况时间复杂度 b. 时间复杂度的系统、常数、低阶 c. 比较次数和交换(或移动)次数 2. 排序算法的内存消耗 用空间复杂度来衡量。 原地排序算法,特指空间复杂度是O(1)的排序算法。
阅读全文
摘要:一、如何理解“递归” 递归是一种应用非常广泛的算法(或者编程技巧)。 二、递归的三个条件 1、一个问题的解可以分解为几个子问题的解 2、这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样 3、存在递归终止条件 三、如何编写递归代码 写递归代码最关键的是找到如何将大问题分解为小问题的规律,
阅读全文
摘要:一、概念 队列:先进者先出。与栈一样,也是一种受限的线性表,同样有两个基本操作:入队和出队。 二、队列实现 队列有两种实现方式:顺序队列和链式队列。 顺序队列 用数组实现的队列叫作顺序队列。 需要两个指针:head指针和tail指针,分别指向队头和队尾。 随着入队和出队操作,head和tail会移到
阅读全文
摘要:一、概念 栈:后进先出,先进后出的数据结构。栈是一种“操作受限‘的线性表,只允许在一端插入和删除数据。 当某个数据集合只涉及在一端插入和删除数据,并且满足后进先出、先进后出的特性,我们就应该首选“栈”这种数据结构。 二、如何实现“栈” 既可用数组(顺序栈),也可用链表(链式栈) 数组实现: // 基
阅读全文
摘要:一、概念 链表:通过“指针”将一组零散的内存块串联起来使用。 数组vs链表 二、常见链表 三种常见的链表:单链表、双向链表、循环链表。 单链表: 时间复杂度: 插入和删除:O(1) 随机访问:O(n) 循环链表: 一种特殊的单链表,跟单链表唯一的区别在尾结点:单链表尾结点是Null、循环链表尾结点指
阅读全文
摘要:一、概念 数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。 关键词: 1. 线性表(Linear List),线性表就是数据排成像一条线一样的结构。 相对的是,非线性表 2. 连续的内存空间和相同类型的数据。 有这两个限制,有一个特性:“随机访问”。通过
阅读全文
摘要:大O复杂度表示法 大O复杂度表示法,表示代码执行时间随数据规模增长的变化趋势,也叫作渐进时间复杂度,简称时间复杂度。 时间复杂度分析 1. 只关注循环执行次数最多的一段代码 T(n)=O(2+n+1)=O(n) 2. 加法法则:总复杂度等于量级最大的那段代码的复杂度 如果T1(n)=O(f(n)),
阅读全文
摘要:20个最常用的、最基础的数据结构与算法。 数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie树; 算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法。 事半功倍的学习技巧: 1. 边学边红,适度刷题。 每周花1-2小时,集中把这周三
阅读全文

浙公网安备 33010602011771号