随笔分类 -  数据结构/算法

摘要:1.DFS(深度优先搜索) 深度优先搜索的步骤分为 1.递归下去 2.回溯上来。顾名思义,深度优先,则是以深度为准则,先一条路走到底,直到达到目标。这里称之为递归下去。 否则既没有达到目标又无路可走了,那么则退回到上一步的状态,走其他路。这便是回溯上来。 1.示意图 DFS的重要点在于状态回溯。 2 阅读全文
posted @ 2022-05-02 16:32 鲸小鱼- 阅读(43) 评论(0) 推荐(0) 编辑
摘要:C ++ 14 假设字符串分别为: std::string prefix = "foo"; std::string string = "foobar"; 在C ++ 14中,通过std::mismatch返回两个范围中的第一个不匹配对很容易做到: bool isPrefix = std::misma 阅读全文
posted @ 2022-02-27 12:14 鲸小鱼- 阅读(1302) 评论(0) 推荐(0) 编辑
摘要:##深度优先遍历(栈,先压右节点,再压左节点) 也就深入的遍历,沿着每一个分支直到走到最后,然后才返回来遍历剩余的节点。二叉树不同于图,图需要标记节点是否已经访问过,因为可能会存在环,而二叉树不会出现环,所以不需要标记。那么,我们只需要一个栈空间,来压栈就好了。因为深度优先遍历,遍历了根节点后,就开 阅读全文
posted @ 2020-07-29 18:10 鲸小鱼- 阅读(590) 评论(0) 推荐(0) 编辑
摘要:#1.概念: 广度优先搜索算法(Breadth-First-Search),又译作宽度优先搜索,或横向优先搜索,简称BFS,是一种图形搜索算法。简单的说,BFS是从根节点开始,沿着树的宽度遍历树的节点。如果所有节点均被访问,则算法中止。广度优先搜索的实现一般采用open-closed表。 #2.解析 阅读全文
posted @ 2020-07-29 09:59 鲸小鱼- 阅读(556) 评论(0) 推荐(0) 编辑
摘要:#Linked List Cycle 原题链接:Linked List Cycle 判断一个链表是否有环,空间复杂度是O(1) 如果不考虑空间复杂度,可以使用一个map记录走过的节点,当遇到第一个在map中存在的节点时,就说明回到了出发点,即链表有环,同时也找到了环的入口。 不适用额外内存空间的技巧 阅读全文
posted @ 2020-07-27 15:11 鲸小鱼- 阅读(676) 评论(0) 推荐(1) 编辑
摘要:【n个节点的二叉树有多少种形态(Catalan数)】 分析过程:(1)先考虑只有一个节点的情形,设此时的形态有f(1)种,那么很明显f(1)=1 (2)如果有两个节点呢?我们很自然想到,应该在f(1)的基础上考虑递推关系。那么,如果固定一个节点后,左右子树的分布情况为1=1+0=0+1,故有f(2) 阅读全文
posted @ 2020-07-23 14:27 鲸小鱼- 阅读(1493) 评论(0) 推荐(0) 编辑
摘要:复杂度分析 大O复杂度表示法 算法的执行效率,粗略地讲,就是算法代码执行的时间。我们知道所有代码执行的时间T(n)与每行代码的执行次数n成正比。 T(n)=O(f(n)) T(n)表示代码执行的时间;n表示数据规模的大小;f(n)表示每行代码执行的次数总和。公式中的O表示代码的执行时间T(n)与f( 阅读全文
posted @ 2020-05-14 15:53 鲸小鱼- 阅读(572) 评论(0) 推荐(0) 编辑
摘要:这篇随笔讲解C++语言程序设计与应用中求GCD(最大公约数,下文使用GCD代替)的两种常用方式:更相减损法和辗转相除法,前提要求是具有小学数学的基本素养,知道GCD是什么,并具有C++的语法基础。 一、更相减损法 两个正整数a和b(a>b),它们的最大公约数等于a-b的差值c和较小数b的最大公约数。 阅读全文
posted @ 2020-03-21 13:27 鲸小鱼- 阅读(454) 评论(0) 推荐(0) 编辑
摘要:概述 递归(recursion) 又称递回,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。 一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。 构成递归需具备的条件: 1. 子问题须与原始问题为同样的事,且更为简单; 2.  阅读全文
posted @ 2020-03-13 08:56 鲸小鱼- 阅读(2146) 评论(0) 推荐(0) 编辑
摘要:解决一个回溯问题,实际上就是一个决策树的遍历过程。你只需要思考 3 个问题: 1、路径:也就是已经做出的选择。 2、选择列表:也就是你当前可以做的选择。 3、结束条件:也就是到达决策树底层,无法再做选择的条件。 如果你不理解这三个词语的解释,没关系,我们后面会用「全排列」和「N 皇后问题」这两个经典 阅读全文
posted @ 2019-12-30 13:32 鲸小鱼- 阅读(1576) 评论(0) 推荐(2) 编辑
摘要:排序综述 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的算法可以节省大量的资源。在各个领域中考虑到数据的各种限制和规范,要得到一个符合实际的 阅读全文
posted @ 2019-05-19 17:36 鲸小鱼- 阅读(736) 评论(0) 推荐(0) 编辑
摘要:源码: 运行结果: 阅读全文
posted @ 2019-05-17 22:06 鲸小鱼- 阅读(233) 评论(0) 推荐(0) 编辑
摘要:二叉树模型 编写简单的程序对下图二叉树进行遍历 实现方式 二叉树结点 遍历方式 先序遍历 中序遍历 后序遍历 递归遍历 创建结点 建立结点关系 运行结果 先序遍历 中序遍历 后序遍历 源码 main.c 阅读全文
posted @ 2019-05-17 20:51 鲸小鱼- 阅读(178) 评论(0) 推荐(0) 编辑
摘要:队列的定义 队列是只允许在一端进行插入操作,另一端进行删除操作的线性表。 队列是一种先进先出(FIST IN FIRST OUT)的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为对头。 队列的顺序存储框架搭建 顺序列队结构体 框架搭建 队列的顺序存储框架实现 初始化 入队 返回队头 阅读全文
posted @ 2019-05-17 16:20 鲸小鱼- 阅读(272) 评论(0) 推荐(0) 编辑
摘要:定义 栈是限定只能在表尾删除和插入操作的线性表。 允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom)。栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构。 栈的插入操作称为进栈,也称压栈、入栈。 栈的删除操作称为出栈,也称弹栈。 栈的抽象数据结构 由 阅读全文
posted @ 2019-05-17 15:07 鲸小鱼- 阅读(281) 评论(0) 推荐(0) 编辑
摘要:定义 栈是限定只能在表尾删除和插入操作的线性表。 允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom)。栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构。 栈的插入操作称为进栈,也称压栈、入栈。 栈的删除操作称为出栈,也称弹栈。 栈的抽象数据结构 由 阅读全文
posted @ 2019-05-16 22:32 鲸小鱼- 阅读(395) 评论(0) 推荐(0) 编辑