算法---基础算法
文章平均质量分 87
算法
笙念&
这个作者很懒,什么都没留下…
展开
-
贪心法算法
把整个问题分解成多个步骤,在每个步骤都选取当前步骤的最优方案,直到所有步骤结束;在每一步都不考虑对后续步骤的影响,在后续步骤中也不再回头改变前面的选择。简单来说就是走一步看一步。贪心法在解决问题的策略上目光短浅,只根据当前已有的信息就做出选择,而且一旦做出了选择,不管将来有什么结果,这个选择都不会改变。换言之,贪心法并不是从整体最优考虑,它所做出的选择只是在某种意义上的局部最优。这种局部最优选择并不总能获得整体最优解,但通常能获得近似最优解。原创 2022-12-24 13:37:09 · 2574 阅读 · 0 评论 -
分治法算法
①算法定义分治是广为人知的算法思想。当我们遇到一个难以直接解决的大问题时,自然会想到把它划分成一些规模较小的子问题,各个击破,“分而治之(Divide and Conquer)” 分治算法的具体操作是把原问题分成 k 个较小规模的子问题,对这 k 个子问题分别求解。如果子问题不够小,那么把每个子问题再划分为规模更小的子问题。这样一直分解下去,直到问题足够小,很容易求出这些小问题的解为止。②算法特征分治法的题目,需要符合子问题的规模大致相同。原创 2022-12-22 11:48:32 · 1232 阅读 · 0 评论 -
离散化算法
离散化就是用数字得相对值替代他们得绝对值。离散化是一种数据处理的技巧。它把分布广而稀疏的数据转换为密集分布,从而能够让算法更快速、更省空间地处理。原创 2022-12-21 10:40:25 · 532 阅读 · 0 评论 -
倍增法与ST算法
倍增法和二分法是“相反”的算法,效率都很高。二分法是每次缩小一半,从而以O(log2n)的速度极快地缩小定位到解;倍增法是每次扩大一倍,从而以O(2的n次方)的速度极快的扩展到极大的空间。原创 2022-12-21 09:10:47 · 478 阅读 · 2 评论 -
高效技巧-打表法
打表是一种典型的用空间换时间的技巧一般指将所有可能需要用到的结果事先计算出来,这样后面需要用到时就可以直接查表获得。打表常见的用法有如下几种:①在程序中一次性计算出所有需要用到的结果,之后的查询直接取这些结果这个是最常用到的用法,例如在一个需要查询大量 Fibonacci数 Fn)的问题中,显然每次从头开始计算是非常耗时的,对Q 次查询会产生 OnQ)的时间复杂度,而如果进行预处理,即把所有 Fibonacci数预先计算并存。原创 2022-12-19 13:02:34 · 2561 阅读 · 0 评论 -
前缀和与差分算法
定义:前缀和是指某序列的前n项和,可以把它理解为数学上的数列的前n项和一个长度为n的数组a[0] - a[n-1],他的前缀和sum[i]等于a[0] - a[i]的和利用递推可以在O(n)时间内球的所有前缀和:算法分类前缀和的一个应用是差分,差分是前缀和的逆运算定义:首先给定一个原数组a:a[1], a[2], a[3],,,,,, a[n];然后我们构造一个数组b : b[1], b[2], b[3],,,,,, b[i];使得。原创 2022-12-19 12:39:57 · 682 阅读 · 0 评论 -
双指针算法(尺取法)
双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务。也可以延伸到多 个数组的多个指针。若两个指针指向同一数组,遍历方向相同且不会相交,则也称为滑动窗口(两个指针包围的 区域即为当前的窗口),经常用于区间搜索。若两个指针指向同一数组,但是遍历方向相反,则可以用来进行搜索,待搜索的数组往往是 排好序的。定义快慢指针快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组慢指针:指向更新 新数组下标的位置通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。原创 2022-12-17 12:19:54 · 1074 阅读 · 0 评论 -
三分查找算法
三分法求单峰(或单谷)的极值是二分法的简单扩展单峰函数和单谷函数如下图所示,函数fx再区间【L,R】内只有一个极值v,再极值点两边函数是单调变化的。以单峰函数为例,在v的左边是严格单调递增的,在右边是严格单调递减的。下面的讲解都以求单峰极值为例:如何求单峰函数最大值的近似值?虽然不能直接用二分法,但是只要稍微变形一下就可以了在【L,R】内任取两个点:mid1和mid2,把函数分为3段,有以下情况:1)若f(mid1)原创 2022-12-18 10:23:13 · 2011 阅读 · 0 评论 -
二分查找算法
二分查找也常被称为二分法或者折半查找,每次查找时通过将待查找区间分成两部分并只取 一部分继续查找,将查找的复杂度大大减少。对于一个长度为 O(n) 的数组,二分查找的时间复 杂度为 O(log n)。举例来说,给定一个排好序的数组 {3,4,5,6,7},我们希望查找 4 在不在这个数组内。第一次 折半时考虑中位数 5,因为 5 大于 4, 所以如果 4 存在于这个数组,那么其必定存在于 5 左边这一 半。于是我们的查找区间变成了 {3,4,5}。原创 2022-12-16 13:26:31 · 5841 阅读 · 0 评论 -
回溯算法(总结)
以下在计算空间复杂度的时候我都把系统栈(不是数据结构里的栈)所占空间算进去。原创 2022-12-14 10:58:54 · 702 阅读 · 0 评论 -
回溯算法(五)棋盘问题
n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。原创 2022-12-14 14:20:47 · 995 阅读 · 0 评论 -
回溯算法(四)排列问题
回溯算法-排列问题原创 2022-12-14 08:56:27 · 544 阅读 · 0 评论 -
回溯算法(三)子集问题
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例: 输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]原创 2022-12-14 08:18:51 · 570 阅读 · 0 评论 -
回溯算法(二)切割问题
切割问题:一个字符串按一定规则有几种切割方式原创 2022-12-13 23:04:47 · 224 阅读 · 0 评论 -
回溯算法(一)组合问题
①定义:回溯法也可以叫做回溯搜索法,它是一种搜索的方式。回溯是递归的副产品,只要有递归就会有回溯。②效率:回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案,如果想让回溯法高效一些,可以加一些剪枝的操作,但也改不了回溯法就是穷举的本质。组合问题:N个数里面按一定规则找出k个数的集合切割问题:一个字符串按一定规则有几种切割方式子集问题:一个N个数的集合里有多少符合条件的子集排列问题:N个数按一定规则全排列,有几种排列方式棋盘问题:N皇后,解数独等等。原创 2022-12-13 11:08:58 · 2090 阅读 · 0 评论 -
全排列和组合(STL和C语言递归解法)
从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。原创 2022-12-13 17:55:44 · 1139 阅读 · 0 评论 -
动态规划-子序列问题
子序列问题。最长公共子序列,一个序列中的最长上升子序列(LIS)原创 2022-11-19 20:08:42 · 271 阅读 · 0 评论 -
七大排序算法详解(思路+源代码)C语言,数据结构
目录排序分类:1)冒泡排序2)简单选择排序3)直接插入排序4)希尔排序 5)堆排序6)归并排序①递归实现②非递归实现7)快速排序①快速排序算法 ②快速排序优化8)总结1)按主要操作内排序:插入排序,交换排序,选择排序,归并排序外排序:是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存,需要在内存和外部存储器之间进行多次数据交换,以达到排序整个文件的目的。2)按算法复杂度简单算法:冒泡排序,简单选择排序,直接插入排序改进算法:希尔排序,堆排序,归并排序,快速排序原创 2022-11-12 21:11:11 · 980 阅读 · 0 评论 -
巧解数列(斐波那契递推公式超时)C语言
数列的递推公式为: F(n)=F(n-1)+F(n-2),其中F(1)=F(2)=1。当n比较大时,F(n)也非常大。,F(n)除以10007的余数是多少。斐波那契数列,普通算法超时原创 2022-09-19 10:32:16 · 760 阅读 · 0 评论 -
快速幂||取余运算
快速幂算法能帮我们算出指数非常大的幂,传统的求幂算法之所以时间复杂度非常高(为O(指数n)),就是因为当指数n非常大的时候,需要执行的循环操作次数也非常大。就是每一步都把指数分成两半,而相应的底数做平方运算。这样不仅能把非常大的指数给不断变小,所需要执行的循环次数也变小,而最后表示的结果却一直不会变。原创 2022-11-14 21:40:51 · 799 阅读 · 0 评论 -
C语言快速排序-qsort函数
qsort函数是C语言编译器函数库自带的快速排序函数。其包含在头文件里面,所以在使用的时候需要加上该头文件。其本身还是快速排序,所以时间复杂度仍然是O(nlogn)原创 2022-12-14 09:21:32 · 582 阅读 · 0 评论 -
C++sort函数的用法
c++sort函数用法原创 2022-09-20 19:05:47 · 1725 阅读 · 0 评论