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