![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法基础
xxxalq
I can do all things.
展开
-
最长不下降子序列(接上一篇)
接着上一篇讲,这个最长不下降子序列,先给大家看一下题目。给定一个长度为 n 的序列 A(n ≤ 5000),求出一个最长的 A 的子序列,满足该子序列的后一个 元素不小于前一个元素。原创 2022-11-14 20:32:13 · 289 阅读 · 0 评论 -
动态规划基础
本篇博客要介绍了动态规划的基本思想,以及动态规划中状态及状态转移方程的设计思路,帮助各位初学者对动态规划有一个初步的了解。本部分的其他页面,将介绍各种类型问题中动态规划模型的建立方法,以及一些动态规划的优化技巧。原创 2022-11-13 19:55:43 · 258 阅读 · 0 评论 -
搜索算法优化
DFS(深度优先搜索)是一种常见的算法,大部分的题目都可以用 DFS 解决,但是大部分情况下,这都是骗分算法,很少会有爆搜为正解的题目。因为 DFS 的时间复杂度特别高。(没学过 DFS 的请自行补上这一课)既然不能成为正解,那就多骗一点分吧。那么这一篇文章将介绍一些实用的优化算法(俗称“剪枝”)。先来一段深搜模板,之后的模板将在此基础上进行修改。int ans = 最坏情况, now;// now 为当前答案void dfs(传入数值) {原创 2022-11-12 14:36:12 · 198 阅读 · 0 评论 -
Alpha-Beta 剪枝
Minimax$ 算法又叫极小化极大算法,是一种找出失败的最大可能性中的最小值的算法。1在局面确定的双人对弈里,常进行对抗搜索,构建一棵每个节点都为一个确定状态的搜索树。奇数层为己方先手,偶数层为对方先手。搜索树上每个叶子节点都会被赋予一个估值,估值越大代表我方赢面越大。我方追求更大的赢面,而对方会设法降低我方的赢面,体现在搜索树上就是,奇数层节点(我方节点)总是会选择赢面最大的子节点状态,而偶数层(对方节点)总是会选择我方赢面最小的的子节点状态。原创 2022-11-11 19:42:38 · 7886 阅读 · 9 评论 -
C++回溯算法
回溯法是一种经常被用在深度优先搜索(DFS)和广度优先搜索BFS 的技巧。其本质是:走不通就回头。原创 2022-09-24 12:31:28 · 643 阅读 · 0 评论 -
C++双向搜索
双向同时搜索的基本思路是从状态图上的起点和终点同时开始进行广搜或深搜。如果发现搜索的两端相遇了,那么可以认为是获得了可行解。原创 2022-08-21 11:17:13 · 318 阅读 · 0 评论 -
C++三分法
如果需要求出单峰函数的极值点,通常使用二分法衍生出的三分法求单峰函数的极值点。原创 2022-07-27 19:37:17 · 2157 阅读 · 0 评论 -
C++二分答案
解题的时候往往会考虑枚举答案然后检验枚举的值是否正确。若满足单调性,则满足使用二分法的条件。把这里的枚举换成二分,就变成了“二分答案”。原创 2022-07-27 17:37:42 · 670 阅读 · 0 评论 -
C++二分查找
二分查找(英语:binary search),也称折半搜索(英语:half-interval search)、对数搜索(英语:logarithmic search),是用来在一个有序数组中查找某一元素的算法。原创 2022-07-27 14:53:07 · 4641 阅读 · 0 评论 -
C++桶排序
桶排序(英文:Bucket sort)是排序算法的一种,适用于待排序数据值域较大但分布比较均匀的情况。原创 2022-07-26 17:09:00 · 1002 阅读 · 2 评论 -
C++快速排序
快速排序(英语:Quicksort),又称分区交换排序(英语:partition-exchange sort),简称快排,是一种被广泛运用的排序算法。原创 2022-07-26 17:03:46 · 473 阅读 · 0 评论 -
C++计数排序
基数排序(英语:Radix sort)是一种非比较型的排序算法,最早用于解决卡片排序的问题。它的工作原理是将待排序的元素拆分为k个关键字(比较两个元素时,先比较第一关键字,如果相同再比较第二关键字……),然后先对第k关键字进行稳定排序,再对第k-1关键字进行稳定排序,再对第k-2关键字进行稳定排序……最后对第一关键字进行稳定排序,这样就完成了对整个待排序序列的稳定排序。...原创 2022-07-25 22:05:15 · 401 阅读 · 0 评论 -
C++计数排序
计数排序(英语Countingsort)是一种线性时间的排序算法。原创 2022-07-25 21:47:32 · 505 阅读 · 0 评论 -
C++插入排序算法
插入排序(英语:Insertion sort)是一种简单直观的排序算法。它的工作原理为将待排列元素划分为“已排序”和“未排序”两部分,每次从“未排序的”元素中选择一个插入到“已排序的”元素中的正确位置。...原创 2022-07-25 11:59:56 · 253 阅读 · 0 评论 -
C++sort排序
优点:速度快,时间复杂度为log(n)级别。缺点:sort为不稳定排序。例如两个一样的数,有可能第一个在前,也有可能第二个在前。原创 2022-07-25 11:51:56 · 261 阅读 · 0 评论 -
C++冒泡排序
冒泡排序(英语:Bubble sort)是一种简单的排序算法。由于在算法的执行过程中,较小的元素像是气泡般慢慢「浮」到数列的顶端,故叫做冒泡排序。原创 2022-07-25 08:06:41 · 2904 阅读 · 1 评论 -
C++选择排序
选择排序(英语:Selection sort)是一种简单直观的排序算法。它的工作原理是 每次找出第 i 小的元素(也就是 Ai..n 中最小的元素),然后将这个元素与数组第 i 个位置上的元素交换。原创 2022-07-25 08:00:53 · 83 阅读 · 0 评论 -
C++贪心算法
贪心算法(英语:greedy algorithm),是用计算机来模拟一个“贪心”的人做出决策的过程。这个人十分贪婪,每一步行动总是按某种指标选取最优的操作。而且他目光短浅,总是只看眼前,并不考虑以后可能造成的影响。...原创 2022-07-24 20:56:07 · 1689 阅读 · 1 评论 -
C++分治算法
分治算法的核心思想就是“分而治之”。大概的流程可以分为三步:分解 -> 解决 -> 合并。原创 2022-07-24 20:31:34 · 1212 阅读 · 0 评论 -
C++递归算法
递归(英语:Recursion),在数学和计算机科学中是指在函数的定义中使用函数自身的方法,在计算机科学中还额外指一种通过重复将问题分解为同类的子问题而解决问题的方法。原创 2022-07-24 20:22:14 · 1984 阅读 · 0 评论 -
C++模拟算法
模拟就是用计算机来模拟题目中要求的操作。模拟题目通常具有码量大、操作多、思路繁复的特点。由于它码量大,经常会出现难以查错的情况,如果在考试中写错是相当浪费时间的。原创 2022-07-24 13:40:02 · 763 阅读 · 0 评论 -
C++枚举
枚举(英语:Enumerate)是基于已有知识来猜测答案的一种问题求解策略。枚举的思想是不断地猜测,从可能的集合中一一尝试,然后再判断题目的条件是否成立。原创 2022-07-24 13:35:43 · 198 阅读 · 0 评论