文章分类 -  数据结构与算法

摘要:队列 队列是限定在一端进行插入,另一端进行删除特殊线性表。 就像排队买东西,排在前面的人买完东西后离开队伍(删除),而后来的人总是排在队伍未尾(插入)。 通常把队列的删除和插入分别称为出队和入队。允许出队的一端称为队头,允许入队的一端称为队尾。所有需要进队的数据项,只能从队尾进入,队列中的数据项只能 阅读全文
posted @ 2021-05-06 15:57 弱水三千12138 编辑
摘要:栈 栈是只能在某一端插入和删除的特殊线性表。 用桶堆积物品,先堆进来的压在底下,随后一件一件往上堆。取走时,只能从上面一件一件取。堆和取都在顶部进行,底部一般是不动的。 栈就是一种类似桶堆积物品的数据结构,进行删除和插入的一端称栈顶,另一堆称栈底。 插入一般称为进栈(PUSH),删除则称为退栈(PO 阅读全文
posted @ 2021-05-06 15:55 弱水三千12138 编辑
摘要:动态规划 思想 动态规划程序设计是对解最优化问题的一种途径、一种方法,而不是一种特殊算法。不象前面所述的那些搜索或数值计算那样,具有一个标准的数学表达式和明确清晰的解题方法。 动态规划程序设计往往是针对一种最优化问题,由于各种问题的性质不同,确定最优解的条件也互不相同,因而动态规划的设计方法对不同的 阅读全文
posted @ 2021-05-06 15:25 弱水三千12138 编辑
摘要:回溯算法 ​ 搜索与回溯是计算机解题中常用的算法,很多问题无法根据某种确定的计算法则来求解,可以利用搜索与回溯的技术求解。回溯是搜索算法中的一种控制策略。它的基本思想是:为了求得问题的解,先选择某一种可能情况向前探索,在探索过程中,一旦发现原来的选择是错误的,就退回一步重新选择,继续向前探索,如此反 阅读全文
posted @ 2021-05-06 15:24 弱水三千12138 编辑
摘要:深度优先搜索 从起点出发,走过的点要做标记,发现有没走过的点,就随意挑一个往前走,走不 了就回退,此种路径搜索策略就称为“深度优先搜索”,简称“深搜”。 其实称为“远度优先搜索”更容易理解些。因为这种策略能往前走一步就往前走一 步,总是试图走得更远。所谓远近(或深度),就是以距离起点的步数来衡量的。 阅读全文
posted @ 2021-05-06 15:22 弱水三千12138 编辑
摘要:广度优先搜索 广度优先搜索的过程 广度优先搜索算法(又称宽度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。 Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。 ​ 广度优先算法的核心思想是:从初始节点开始,应用算符生成第一层节点, 阅读全文
posted @ 2021-05-06 15:05 弱水三千12138 编辑
摘要:贪心算法 思路 ​ 若在求解一个问题时,能根据每次所得到的局部最优解,推导出全局最优或最优目标。 那么,我们可以根据这个策略,每次得到局部最优解答,逐步而推导出问题,这种策略称为贪心法 **【例1】**在N行M列的正整数矩阵中,要求从每行中选出1个数,使得选出的总共N个数的和最大。 【算法分析】 ​ 阅读全文
posted @ 2021-05-06 15:02 弱水三千12138 编辑
摘要:分治算法 思想 所谓分治就是指的分而治之,即将较大规模的问题分解成几个较小规模的问题,通过对较小规模问题的求解达到对整个问题的求解。当我们将问题分解成两个较小问题求解时的分治方法称之为二分法。 分治的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相似。 找出各 阅读全文
posted @ 2021-05-06 15:00 弱水三千12138 编辑
摘要:递归算法 概述 ​ 前面已经介绍了关于递归调用这样一种操作,而递归程序设计是C++语言程序设计中的一种重要的方法,它使许多复杂的问题变得简单,容易解决了。 递归特点是:函数或过程调用它自己本身。其中直接调用自己称为直接递归,而将A调用B,B以调用A的递归叫做间接递归。 例题讲解 【例1】 给定n(n 阅读全文
posted @ 2021-05-06 14:58 弱水三千12138 编辑
摘要:递推算法 概述 递推法是一种重要的数学方法,在数学的各个领域中都有广泛的运用,也是计算机用于数值计算的一个重要算法。 这种算法特点是:一个问题的求解需一系列的计算,在已知条件和所求问题之间总存在着某种相互联系的关系,在计算时,如果可以找到前后过程之间的数量关系(即递推式),那么,从问题出发逐步推到已 阅读全文
posted @ 2021-05-06 14:57 弱水三千12138 编辑
摘要:排序算法 最近在研究一些经常用到的东西想把它们做一个汇总,想了想用到最多的应该是排序算法,所以对排序算法做了个总结 一、算法概述 0.1 算法分类 十种常见排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较 阅读全文
posted @ 2021-05-06 14:55 弱水三千12138 编辑
摘要:高精度算法 应用场景 利用计算机进行数值计算,有时会遇到这样的问题:有些计算要求精度高,希望计算的数的位数可达几十位甚至几百位,虽然计算机的计算精度也算较高了,但因受到硬件的限制,往往达不到实际问题所要求的精度。我们可以利用程序设计的方法去实现这样的高精度计算。 本节介绍常用的几种高精度计算的方法。 阅读全文
posted @ 2021-05-06 14:53 弱水三千12138 编辑
摘要:复杂度理论 算法时间复杂度的数学意义 从数学上定义,给定算法A,如果存在函数f(n),当n=k时,f(k)表示算法A在输入规模为k的情况下的运行时间,则称f(n)为算法A的时间复杂度。 其中:输入规模是指算法A所接受输入的自然独立体的大小,我们总是假设算法的输入规模是用大于零的整数表示的,即n=1, 阅读全文
posted @ 2021-05-06 14:50 弱水三千12138 编辑
摘要:前言 本文主要分为两部分: 一致性 Hash 算法原理介绍。 一致性 Hash 算法实际实践。 原理介绍 当我们在做数据库分库分表或者是分布式缓存时,不可避免的都会遇到一个问题: 如何将数据均匀的分散到各个节点中,并且尽量的在加减节点时能使受影响的数据最少。 Hash 取模 随机放置就不说了,会带来 阅读全文
posted @ 2021-05-06 10:58 弱水三千12138 编辑
摘要:MySQL 基础 关系型数据库介绍 顾名思义,关系型数据库就是一种建立在关系模型的基础上的数据库。关系模型表明了数据库中所存储的数据之间的联系(一对一、一对多、多对多)。 关系型数据库中,我们的数据都被存放在了各种表中(比如用户表),表中的每一列就存放着一条数据(比如一个用户的信息)。 大部分关系型 阅读全文
posted @ 2021-04-29 08:18 弱水三千12138 编辑
摘要:一 斐波那契数列 题目描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 n<=39 问题分析: 可以肯定的是这一题通过递归的方式是肯定能做出来,但是这样会有一个很大的问题,那就是递归大量的重复计算会导致内存溢出。另外可以使用迭代法,用fn1和fn2保存计算过程中 阅读全文
posted @ 2021-04-29 08:16 弱水三千12138 编辑
摘要:1. 两数相加 题目描述 问题分析 Solution 2. 翻转链表 题目描述 问题分析 Solution 3. 链表中倒数第k个节点 题目描述 问题分析 Solution 4. 删除链表的倒数第N个节点 问题分析 Solution 5. 合并两个排序的链表 题目描述 问题分析 Solution 1 阅读全文
posted @ 2021-04-29 08:15 弱水三千12138 编辑
摘要:说明 1. KMP 算法 2. 替换空格 3. 最长公共前缀 4. 回文串 4.1. 最长回文串 4.2. 验证回文串 4.3. 最长回文子串 4.4. 最长回文子序列 5. 括号匹配深度 6. 把字符串转换成整数 授权转载! 本文作者:wwwxmu 原文地址:https://www.weiweib 阅读全文
posted @ 2021-04-29 08:13 弱水三千12138 编辑
摘要:海量数据处理以及缓存穿透这两个场景让我认识了 布隆过滤器 ,我查阅了一些资料来了解它,但是很多现成资料并不满足我的需求,所以就决定自己总结一篇关于布隆过滤器的文章。希望通过这篇文章让更多人了解布隆过滤器,并且会实际去使用它! 下面我们将分为几个方面来介绍布隆过滤器: 什么是布隆过滤器? 布隆过滤器的 阅读全文
posted @ 2021-04-28 11:33 弱水三千12138 编辑
摘要:图 开头还是求点赞,求转发!原创优质公众号,希望大家能让更多人看到我们的文章。 图片都是我们手绘的,可以说非常用心了! 图是一种较为复杂的非线性结构。 为啥说其较为复杂呢? 根据前面的内容,我们知道: 线性数据结构的元素满足唯一的线性关系,每个元素(除第一个和最后一个外)只有一个直接前趋和一个直接后 阅读全文
posted @ 2021-04-28 09:45 弱水三千12138 编辑