随笔分类 - 数据结构&算法
数据结构&算法
摘要:一、简述以及地图 G 表示从起点移动到网格上指定方格的移动距离 (暂时不考虑沿斜向移动,只考虑上下左右移动)。 H 表示从指定的方格移动到终点的预计移动距离,只计算直线距离,走直角篇走的是直角路线。 令 F = G + H ,F 即表示从起点经过此点预计到终点的总移动距离接下来我们从起点开始,按照以
阅读全文
摘要:G 表示从起点移动到网格上指定方格的移动距离 (暂时不考虑沿斜向移动,只考虑上下左右移动)。 H 表示从指定的方格移动到终点的预计移动距离,只计算直线距离,走直角篇走的是直角路线。 令 F = G + H ,F 即表示从起点经过此点预计到终点的总移动距离接下来我们从起点开始,按照以下寻路步骤,直至找
阅读全文
摘要:1. 什么是哈希表 首先有这么一种情况,有24个人编号分别为1~24,我们需要将 24 人均分成 6 个组! 编号除 6 余数为 0 的为第零组: 6、12、18、24 编号除 6 余数为 1 的为第一组: 1、7、13、19 编号除 6 余数为 2 的为第二组: 2、8、14、20 编号除 6 余
阅读全文
摘要:查找 又称检索或查询,是指在查找表中找出满足一定条件的结点或记录对应的操作。 查找表 在计算机中,是指被查找的数据对象是由同一类型的记录构成的集合,如顺序表, 链表、二叉树和哈希表等 查找效率 查找算法中的基本运算是通过记录的关键字与给定值进行比较,所以查找的效率 同常取决于比较所花的时间,而时间取
阅读全文
摘要:排序算法是《数据结构与算法》中最基本的算法之一,排序算法可以分为内部和外部排序。 内部排序:数据记录在内存中进行排序。 外部排序:因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 常见内部排序算法:插入排序、希尔排序、选择排序、冒泡排序、快速排序、堆排序、基数排序等。 用一个
阅读全文
摘要:基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。 1. 基数排序 vs 计数排序 vs 桶排序 这三种排序算法都利用了桶的概念,但对桶的使用方法上有明显差
阅读全文
摘要:1.桶排序说明 桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。为了使桶排序更加高效,我们需要做到这两点: 在额外空间充足的情况下,尽量增大桶的数量 使用的映射函数能够将输入的 N 个数据均匀的分配到 K 个桶中 同时,对于桶中元素的排序,选择何种比较排序算
阅读全文
摘要:计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。 1. 计数排序的特征 当输入的元素是 n 个 0 到 k 之间的整数时,它的运行时间是 Θ(n + k)。计数排序不是比较排序,排序的速度快于任何比较排序
阅读全文
摘要:堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特 点快速定位指定索引的元素. 堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序。分为两种方
阅读全文
摘要:1. 快速排序介绍 快速排序是由 东尼·霍尔 所发展的一种排序算法。在平均状况下,排序 n 个项目要 Ο(n log n) 次比较。在最坏状况下则需要 Ο(n2) 次比较,但这种状况并不常见。事实上,快速排序通常明显比其他 Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以
阅读全文
摘要:算法简绍: 归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 作为一种典型的分而治之思想的算法应用,归并排序的实现由两种方法: 自上而下的递归(所有递归的方法都可以用迭代重写,所以就有了第 2 种
阅读全文
摘要:十个排序算法之三的插入排序虽好,但是某些特殊情况也有很多缺点,比如像下面这种情况: 156 161 163 165 167 168 169 1 2 169 前的元素基本不用插入操作就已经有序, 元素 1 和 2 的排序几乎要移动数组前面的所有元素。 由此需要了解一下希尔排序! 1. 希尔排序介绍 希
阅读全文
摘要:1. 插入排序介绍 插入排序(InsertionSort),一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增 1 的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之
阅读全文
摘要:选择排序: 选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间,假如有几个妹子,用她们的身高给出一个数组,数据如下: 163 161 158 163 171 170 165 159 162 让我
阅读全文
摘要:冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。 1. 算法步
阅读全文
摘要:分支定界 (branch and bound) 算法是一种在问题的解空间上搜索问题的解的方法。但与回溯算 法不同,分支定界算法采用广度优先或最小耗费优先的方法搜索解空间树,并且,在分支定界算 法中,每一个活结点只有一次机会成为扩展结点。 利用分支定界算法对问题的解空间树进行搜索,它的搜索策略是: 产
阅读全文
摘要:贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有 利)的选择,从而希望能够导致结果是最好或者最优的算法。 下面案例,假设有如下课程,希望尽可能多的将课程安排在一间教室里: 课程 开始时间 结束时间 美术 9:00 10:00 英语 9:30 10:30 数学 10
阅读全文
摘要:回溯的基本原理 在问题的解空间中,按深度优先遍历策略,从根节点出发搜索解空间树。算法搜索至解空间 的任意一个节点时,先判断该节点是否包含问题的解。如果确定不包含,跳过对以该节点为根的 子树的搜索,逐层向其祖先节点回溯,否则进入该子树,继续深度优先搜索。 回溯法解问题的所有解时,必须回溯到根节点,且根
阅读全文
摘要:如果一个机器人 一次可以上 1 级台阶,也可以一次上 2 级台阶。求机器人走一个 n 级台阶总共有多少种走法 先试着用分治法尝试下 分治法核心思想: 从上往下分析问题,大问题可以分解为子问题,子问题中还有更小的子问题 比如总共有 5 级台阶,求有多少种走法;由于机器人一次可以走两级台阶,也可以走一级
阅读全文
摘要:一个装有 16 枚硬币的袋子,16 枚硬币中有一个是伪造的,伪造的硬币和普通硬币从表面上看不出有任何差别,但是那 个伪造的硬币比真的硬币要轻。现有给你一台天平,请你在尽可能最短的时间内找出那枚伪造的硬币。 常规思维: 每次从待比较的硬币中取两枚进行计较,如果天平平衡(相等)就继续取剩下的硬币进行比较
阅读全文


浙公网安备 33010602011771号