首页 > 编程语言 >算法思维:思考问题的一种方式

算法思维:思考问题的一种方式

时间:2023-03-19 22:45:59浏览次数:41  
标签:具备 思维 思考问题 问题 算法 区间 考虑 结构

方法论:万物皆朴素的第一性原理

几乎任何领域的任何问题的解决方案,都可以看作是“某个结构上的朴素方法的优化“。

计算机只能处理规模有限的问题,在给定规模且不考虑效率的情况下,问题一定存在朴素解法。具体手段有直接模拟 / 利用bit枚举 / 各种搜索算法等。

具体方法:从问题到解决方案

一般的问题我们有一般的思考方式,而特殊的问题经过总结可以形成特定的解决方案,供今后调用。这需要长时间的积累。

举出一些算法竞赛中常用的问题——解决方案的思路:

  • 若问题具备 ”线性多维逆序“ 结构,则考虑 CDQ分治。

  • 若问题具备 ”元素唯一归属于某集合“ 结构,则考虑并查集。

  • 若问题具备 ”连通性“ 结构,则考虑搜索 / 并查集。

  • 若问题具备 ”记录数据未来使用“,则考虑哈希表。

  • 若问题具备 “FILO / 可规约” 结构,则考虑栈。

  • 若问题具备 ”线性结构上地最远/近最大/小元素“ 结构,则考虑单调栈。

  • 若问题具备 ”FIFO“ 结构,考虑队列。

  • 若问题具备 ”动态维护滑动窗口“ 结构,考虑单调队列。

  • 若问题具备 ”字符串” 结构,则考虑如下做法:

    • 若问题具备 ”字符串匹配“ 结构,则考虑如下做法:
      • 若为线性结构,考虑KMP
      • 若为Trie结构,考虑AC自动机
    • 若问题具备 ”求最长回文子串” 结构,则考虑Mancher算法。
  • 若问题具备 “某节点只有一个父节点” 结构,考虑树结构的如下做法:

    • 若问题具备 “树的重心/直径/中心/最近公共祖先” 结构,则按经典算法处理。
    • 若问题具备 “子树的相同问题” 结构,则考虑递归。
    • 若问题具备 “子树的相似问题” 结构,则考虑树形Dp。
    • 若问题具备 “对树的操作在区间上简单” 结构,则考虑 树链剖分 + 区间维护
  • 若问题具备 “序无关 / 要求某种序” 结构,则考虑排序。

  • 若问题具备 “求解难, 但是验证解是否可行容易” 结构,则考虑二分答案。

  • 若问题具备 “最大最小 or 最小最大 or 结果单调性/二分性” 结构,则考虑二分。

  • 若问题具备 “枚举单调性” 结构,则考虑双指针。

  • 若问题具备 “大数计算”,则考虑高精度。

  • 若问题具备 “数据范围大但涉及范围小”,则考虑离散化。

  • 若问题具备 “子问题” 结构,则考虑动态规划。

    • 若问题具备 ”从1到n符合某些数位限制的个数”,则考虑数位DP
    • 若动态规划问题具备 “棋盘上联通约束” 结构,则考虑状态压缩dp
    • 若动态规划问题具备 ”固定长度区间最值“ 结构,则考虑单调队列优化。
    • 若动态规划问题具备 ”“ 结构,则考虑斜率优化。
    • 若动态规划问题具备 ”“ 结构,则考虑四边形不等式优化。
  • 若问题具备 “解空间无限 / 有明显优秀策略“ 结构,考虑贪心。

  • 若问题具备 “分块” 结构,则考虑 分块 / 块状链表 / 莫队优化暴力

  • 若问题具备 ”区间性质“ 结构,则考虑以下经典做法:

    • 特殊地,若该性质是区间 ”选点/分组/覆盖/最大不相交“ 的区间数,则按经典问题处理。
    • 否则,若该性质具备 ”区间减法 / 区间消去“ 结构,则考虑前缀和 / 差分 / 树状数组 / 线段树 / 平衡树 / 分块。
    • 否则,若该性质具备 ”区间加法 / 区间合并“ 结构,则考虑线段树 / 平衡树
  • 若问题具备 “状态迁移最少次数” 结构,则考虑最短路算法。

  • 若问题具备 “” 结构,则考虑最小生成树算法。

  • 若问题具备 “把图分成两部分” 结构,则考虑二分图算法。

  • 若问题具备 “把图变成拓扑图” 结构,则考虑强连通分量算法。

  • 若问题具备 “对拓扑图求拓扑序” 结构,则考虑拓扑排序算法。

  • 若问题具备 “对图恰好走一遍” 结构,则考虑欧拉路径和回路算法。

  • 若问题具备 “差分约束” 结构,则考虑图的差分约束算法。

  • 若问题具备 “判环” 结构,则考虑SPFA判环。

  • 若问题具备 ”面积并”,则考虑计算几何面积并。

  • 若问题具备 “最大公约数和最小公倍数“,则考虑gcd。

  • 若问题具备 “进制相关“ 结构,则考虑进制转换。

  • 若问题具备 “质数相关“ 结构,则考虑判定质数/分解质因数/质数筛

  • 若问题具备 ”约数相关” 结构,则考虑所有约数/求约数个数/求约束之和

  • 若问题具备 “欧拉函数相关” 结构,考虑欧拉函数算法

  • 若问题具备 “幂相关” 结构,考虑快速幂

  • 若问题具备 “”溢出long long但是时间限制不严格“ 结构,考虑龟速乘

  • 若问题具备 “矩阵运算相关“ 结构,考虑矩阵计算/矩阵快速幂

  • 若问题具备 ”阶乘计算相关“ 结构,考虑阶乘快速计算

  • 若问题具备 ”线性同余方程“ 结构,考虑扩展欧几里得

  • 若问题具备 “线性方程组相关” 结构,考虑高斯消元

  • 若问题具备 “组合数”,考虑求组合数的四种算法

  • 若问题具备 “容斥” 结构,考虑容斥计算

  • 若问题具备 “博弈论” 结构,考虑博弈论

当然这只是冰山一角,真正的细节还有很多。熟练的Coding是刻意练习的结果。
另外,算法可以有效防止老年痴呆

标签:具备,思维,思考问题,问题,算法,区间,考虑,结构
From: https://www.cnblogs.com/kylenhu/p/17234653.html

相关文章

  • 数学知识模板之欧几里得算法
    欧几里得算法求最大公约数intgcd(inta,intb){ returnb?gcd(b,a%b):a;}扩展欧几里得算法//x,y是使x*a+y*b=d的一组解intexgcd(inta,intb,int......
  • 时间复杂度--大O记算法
       EG:  ......
  • 目标检测中算法评价指标FPS和mAp
    FPS就是目标网络每秒可以处理(检测)多少帧(多少张图片),FPS简单来理解就是图像的刷新频率,也就是每秒多少帧,假设目标检测网络处理1帧要0.02s,此时FPS就是1/0.02=50。mAP预测......
  • ChatGPT背后的算法——RLHF总结
    ChatGPT背后的算法——RLHF总结参考链接:抱抱脸:ChatGPT背后的算法——RLHF|附12篇RLHF必刷论文(qq.com)背景 (文本生成的语言模型评价不在训练中)chatGPT训练4步骤......
  • KMP算法思考
    第一个全匹配没有价值,从第二个开始    采取每次匹配的最大值,则next数组为 计算next数组时也用了KMP算法,因此当不匹配时,j=next[j]; ......
  • 数学建模算法-神经网络
    ​ 神经网络算法是一类基于生物神经网络结构和功能的计算模型。它是一种机器学习算法,可以用于识别、分类、模式匹配、预测等任务。神经网络由许多个简单的处理单元(神经元......
  • acwing算法基础课整理
    acwing算法基础课整理模板基础算法排序快速排序#include<iostream>usingnamespacestd;constintN=1e6+10;intq[N];intn;voidquick_sort(intq[],in......
  • DRF算法
    中文译名:优势资源公平性:多种资源类型的公平分配摘要解决不同类型资源在系统内的资源公平分配问题,提出优势资源公平性算法(DRF),是一种对多种资源类型的最大-最小公平性的推广。......
  • 一些算法思想 及一些算法基础
    分治算法分治算法是一种高效的算法思想,它将问题分解成更小的子问题,通过解决子问题来解决原始问题。它的核心思想是将问题分解成若干个规模更小但结构相同的子问题,并且通过......
  • 亿图思维导图Mind Master 9.0 中文破解版安装包下载及图文安装教程​
    MindMaster是亿图软件推出的最新多功能思维导图软件。该软件提供了丰富的智能布局和多样化的展示模式,结合精致的设计元素和预设的主题风格,努力帮助用户创造一个真正的效率......