随笔分类 - C/C++
C++相关
摘要: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 枚硬币中有一个是伪造的,伪造的硬币和普通硬币从表面上看不出有任何差别,但是那 个伪造的硬币比真的硬币要轻。现有给你一台天平,请你在尽可能最短的时间内找出那枚伪造的硬币。 常规思维: 每次从待比较的硬币中取两枚进行计较,如果天平平衡(相等)就继续取剩下的硬币进行比较
阅读全文
摘要:1. 图是什么 从公司回家有三条路线,考虑路况和安全性怎么选择?不考虑安全和路况的话又怎么选择? 在计算机科学中,一个图就是一些顶点的集合,这些顶点通过一系列边结对(连接)。顶点用圆圈表示,边就 是这些圆圈之间的连线。顶点之间通过边连接。注意:顶点有时也称为节点或者交点,边有时也称为链接。 社交网络
阅读全文
摘要:有了二叉搜索树为什么还要红黑树,以下面几个例子举例,如下面的二叉树可以达到很好的搜索效果 5 7 11 15 19 21 25 26 61 99 再看下面这棵树,我们将下面的数据按从左至右的顺序构造一棵二叉搜索树 15 13 16 11 9 7 5 3 按照之前我们二叉搜索树构建构建的方式,我们将得
阅读全文
摘要:1. 哈夫曼编码概括 /********************************************* * 本文图片较多,多刷新一下才能显示 * **********************************************/ 哈夫曼(Huffman)编码算法是基于二叉树构
阅读全文
摘要:二叉树的遍历是指从根结点出发,按照某种次序依次访问所有结点,使得每个结点被当且访问一次。共分为四种方式: 1. 前序遍历 先访问根节点,然后前序遍历左子树,再前序遍历右子树 上图前序遍历结果: 19 7 5 11 15 25 21 61 前序遍历实现: 递归实现 1 /***************
阅读全文
摘要:二维数组在概念上是二维的,有行和列,但在内存中所有的数组元素都是连续排列的,它们之间没有“缝隙”。以下面的二维数组 nums 为例: 从概念上理解,nums 的分布像一个矩阵,但在内存中,a 的分布是一维线性的,整个数组占用一块连续的内存: 1 int nums[2][3] = { 10,20,30
阅读全文
摘要:1. 二叉树的概念 当要在一组数中要找到一个数,比如 26?该怎么找? 61 25 7 11 15 99 19 21 55 26 最暴力的答案: 从左至右 或 从右至左遍历一次,找到这个数字 但把数据进行排序(按照从小到大的顺序排列)后,再查找相应的这条记录? 5 7 11 15 19 21 25
阅读全文
摘要:1. 什么是树: 树状图是一种数据结构,它是由 n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因 为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: 每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;除 了根结点
阅读全文
摘要:给定一个只包含加减乘除法运算的算术表达式,编写一套算法来计算表达式的值。 输入格式 输入一行,为需要你计算的表达式,表达式中只包含数字、加法运算符“+”、 减法运算符 “-”、乘法运算符“*”和 除 法运算符“/”,且没有括号,不考虑数值的范围(溢出),待求解的表达式以“=”号结束。 如: 12 +
阅读全文
摘要:找迷宫通路需要使用回溯法,找迷宫通路是对回溯法的一个很好的应用,实现回溯的过程用到数据结构—栈! 回溯法:对一个包括有很多个结点,每个结点有若干个搜索分支的问题,把原问题分解为若干个子问题求解的 算法;当搜索到某个结点发现无法再继续搜索下去时,就让搜索过程回溯(回退)到该节点的前一个结点,继续 搜索
阅读全文
摘要:1. 栈的特点 有一个胡同很窄只能通过一辆车,而且是死胡同,只能从胡同口进出,如果第一个进入,出去会很麻烦,需要所有的车辆出去后才能出去,如图: 胡同里的小汽车是排成一条直线,是线性排列,而且只能从一端进出,后进的汽车先出去,后进 先出(Last In First Out,LIFO),这就是"栈"。
阅读全文
摘要:堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特 点快速定位指定索引的元素. (选择排序工作原理 - 第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置, 然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排
阅读全文


浙公网安备 33010602011771号