高级算法分析与设计 | 常见 NP-Complete 问题总结

目录

  • [一、NP 完备问题概述](#一、NP 完备问题概述)
  • [二、打包问题(Packing Problems)](#二、打包问题(Packing Problems))
    • [1. SET-PACKING(集合打包问题)](#1. SET-PACKING(集合打包问题))
    • [2. INDEPENDENT-SET(独立集问题)](#2. INDEPENDENT-SET(独立集问题))
  • [三、覆盖问题(Covering Problems)](#三、覆盖问题(Covering Problems))
    • [3. SET-COVER(集合覆盖问题)](#3. SET-COVER(集合覆盖问题))
    • [4. VERTEX-COVER(顶点覆盖问题)](#4. VERTEX-COVER(顶点覆盖问题))
  • [四、约束满足问题(Constraint Satisfaction Problems)](#四、约束满足问题(Constraint Satisfaction Problems))
    • [5. SAT(布尔可满足性问题)](#5. SAT(布尔可满足性问题))
    • [6. 3-SAT(三可满足性问题)](#6. 3-SAT(三可满足性问题))
  • [五、排序与路径问题(Sequencing Problems)](#五、排序与路径问题(Sequencing Problems))
    • [7. HAMILTONIAN-CYCLE(哈密顿回路问题)](#7. HAMILTONIAN-CYCLE(哈密顿回路问题))
    • [8. TSP(旅行商问题)](#8. TSP(旅行商问题))
  • [六、划分问题(Partitioning Problems)](#六、划分问题(Partitioning Problems))
    • [9. 3D-MATCHING(三维匹配问题)](#9. 3D-MATCHING(三维匹配问题))
    • [10. 3-COLOR(三着色问题)](#10. 3-COLOR(三着色问题))
  • [七、数值问题(Numerical Problems)](#七、数值问题(Numerical Problems))
    • [11. SUBSET-SUM(子集和问题)](#11. SUBSET-SUM(子集和问题))
    • [12. KNAPSACK(背包问题)](#12. KNAPSACK(背包问题))
  • [八、12 个经典 NP 完备问题速记表](#八、12 个经典 NP 完备问题速记表)
  • 九、三个值得了解的复杂性问题
  • 十、考试重点总结
  • 总结

常见 NP-Complete 问题总结

一、NP 完备问题概述

NP 完备问题(NP-Complete Problem,简称 NPC)是计算复杂性理论中的一类重要问题。

一个判定问题是 NP 完备问题,需要满足两个条件:

  1. 属于 NP 类:给定一个候选解,能够在多项式时间内验证其正确性。
  2. 属于 NP-Hard 类:所有 NP 问题都可以在多项式时间内归约到该问题。

即:

NP-Complete = NP ∩ NP-Hard \boxed{\text{NP-Complete}=\text{NP}\cap\text{NP-Hard}} NP-Complete=NP∩NP-Hard

注意:NP 完备问题讨论的是判定版本,即判断是否存在满足条件的解,答案通常为 YES 或 NO。

例如:

  • 优化问题:寻找一条总距离最短的旅行路线。
  • 判定问题:是否存在一条总距离不超过 K K K 的旅行路线?

下面介绍 6 大类、12 个经典 NP 完备问题。


二、打包问题(Packing Problems)

核心思想:选择若干彼此不冲突的对象。

1. SET-PACKING(集合打包问题)

问题定义

给定一个集合族:

S = { S 1 , S 2 , ... , S n } \mathcal{S}=\{S_1,S_2,\ldots,S_n\} S={S1,S2,...,Sn}

以及正整数 k k k。

问:能否从中选出至少 k k k 个集合,使这些集合两两不相交?

即对于任意两个选中的不同集合:

S i ∩ S j = ∅ S_i\cap S_j=\varnothing Si∩Sj=∅

举例

已知:

S 1 = { 1 , 2 } , S 2 = { 3 , 4 } , S 3 = { 2 , 5 } S_1=\{1,2\},\quad S_2=\{3,4\},\quad S_3=\{2,5\} S1={1,2},S2={3,4},S3={2,5}

要求选出 k = 2 k=2 k=2 个互不相交的集合。

可以选择:

S 1 = { 1 , 2 } , S 2 = { 3 , 4 } S_1=\{1,2\},\quad S_2=\{3,4\} S1={1,2},S2={3,4}

由于:

S 1 ∩ S 2 = ∅ S_1\cap S_2=\varnothing S1∩S2=∅

所以答案为 YES。

记忆:选集合,选中的集合之间不能有公共元素。

2. INDEPENDENT-SET(独立集问题)

问题定义

给定无向图:

G = ( V , E ) G=(V,E) G=(V,E)

以及正整数 k k k。

问:能否选出至少 k k k 个顶点,使任意两个被选中的顶点之间都没有边?

即寻找顶点集合 S ⊆ V S\subseteq V S⊆V,满足:

∣ S ∣ ≥ k |S|\geq k ∣S∣≥k

并且:

∀ u , v ∈ S , u ≠ v ⇒ ( u , v ) ∉ E \forall u,v\in S,\ u\neq v\Rightarrow (u,v)\notin E ∀u,v∈S, u=v⇒(u,v)∈/E

举例

假设图中存在边:

E = { ( A , B ) , ( B , C ) } E=\{(A,B),(B,C)\} E={(A,B),(B,C)}

可以选择顶点 A A A 和 C C C。

因为 A A A 与 C C C 之间没有边,所以:

S = { A , C } S=\{A,C\} S={A,C}

是一个大小为 2 的独立集。

记忆:选顶点,选中的顶点之间不能有边。


三、覆盖问题(Covering Problems)

核心思想:选择有限数量的对象,覆盖所有目标。

3. SET-COVER(集合覆盖问题)

问题定义

给定全集:

U = { u 1 , u 2 , ... , u m } U=\{u_1,u_2,\ldots,u_m\} U={u1,u2,...,um}

以及若干子集:

S = { S 1 , S 2 , ... , S n } \mathcal{S}=\{S_1,S_2,\ldots,S_n\} S={S1,S2,...,Sn}

和正整数 k k k。

问:能否选择至多 k k k 个子集,使它们的并集等于全集 U U U?

即:

⋃ S i ∈ C S i = U , ∣ C ∣ ≤ k \bigcup_{S_i\in C}S_i=U,\qquad |C|\leq k Si∈C⋃Si=U,∣C∣≤k

其中 C C C 表示选中的子集集合。

举例

已知:

U = { 1 , 2 , 3 , 4 } U=\{1,2,3,4\} U={1,2,3,4}

S 1 = { 1 , 2 } , S 2 = { 3 , 4 } , S 3 = { 2 , 3 } S_1=\{1,2\},\quad S_2=\{3,4\},\quad S_3=\{2,3\} S1={1,2},S2={3,4},S3={2,3}

要求至多选择 k = 2 k=2 k=2 个集合覆盖全集。

选择:

S 1 ∪ S 2 = { 1 , 2 , 3 , 4 } = U S_1\cup S_2=\{1,2,3,4\}=U S1∪S2={1,2,3,4}=U

因此答案为 YES。

记忆:选集合,用尽量少的集合覆盖所有元素。

4. VERTEX-COVER(顶点覆盖问题)

问题定义

给定无向图:

G = ( V , E ) G=(V,E) G=(V,E)

以及正整数 k k k。

问:能否选出至多 k k k 个顶点,使图中的每条边至少有一个端点被选中?

即寻找 S ⊆ V S\subseteq V S⊆V,满足:

∣ S ∣ ≤ k |S|\leq k ∣S∣≤k

并且:

∀ ( u , v ) ∈ E , u ∈ S ∨ v ∈ S \forall (u,v)\in E,\quad u\in S\lor v\in S ∀(u,v)∈E,u∈S∨v∈S

举例

假设图为:

text 复制代码
A ----- B ----- C

选择中间顶点 B B B,即可同时覆盖:

( A , B ) , ( B , C ) (A,B),\quad (B,C) (A,B),(B,C)

因此,存在大小为 1 的顶点覆盖。

记忆:选顶点,保证每条边至少有一个端点被选中。

INDEPENDENT-SET 与 VERTEX-COVER 的区别
问题 选择对象 要求
INDEPENDENT-SET 顶点 选中的顶点之间没有边
VERTEX-COVER 顶点 每条边至少有一个端点被选中

两者有一个重要关系:

S 是独立集    ⟺    V ∖ S 是顶点覆盖 S\text{ 是独立集}\iff V\setminus S\text{ 是顶点覆盖} S 是独立集⟺V∖S 是顶点覆盖

因此:

α ( G ) + τ ( G ) = ∣ V ∣ \alpha(G)+\tau(G)=|V| α(G)+τ(G)=∣V∣

其中:

  • α ( G ) \alpha(G) α(G):最大独立集大小。
  • τ ( G ) \tau(G) τ(G):最小顶点覆盖大小。

四、约束满足问题(Constraint Satisfaction Problems)

核心思想:判断是否存在一种变量赋值,使全部逻辑约束同时成立。

5. SAT(布尔可满足性问题)

SAT 的英文全称是 Boolean Satisfiability Problem。

问题定义

给定一个布尔逻辑公式:

F ( x 1 , x 2 , ... , x n ) F(x_1,x_2,\ldots,x_n) F(x1,x2,...,xn)

问:是否存在一组 True/False 赋值,使整个公式为 True?

常见逻辑符号:

符号 含义
∧ \land ∧ AND,逻辑与
∨ \lor ∨ OR,逻辑或
¬ \neg ¬ NOT,逻辑非
举例

给定:

F = ( x 1 ∨ x 2 ) ∧ ( ¬ x 1 ∨ x 3 ) F=(x_1\lor x_2)\land(\neg x_1\lor x_3) F=(x1∨x2)∧(¬x1∨x3)

如果令:

x 1 = True , x 3 = True x_1=\text{True},\qquad x_3=\text{True} x1=True,x3=True

那么两个括号都为 True,整个公式也为 True。

所以答案为 YES。

记忆:给布尔变量赋真假,使整个逻辑公式成立。

SAT 是第一个被证明为 NP-Complete 的问题,相关结果称为 Cook-Levin 定理。

6. 3-SAT(三可满足性问题)

问题定义

3-SAT 是 SAT 的一种特殊形式。

给定一个合取范式(CNF),每个子句恰好包含 3 个文字。

问:是否存在一组布尔变量赋值,使整个公式为 True?

其中:

  • 子句内部使用 OR。
  • 子句之间使用 AND。
  • 每个子句有 3 个文字。
  • 文字可以是变量,也可以是变量的否定。
举例

F = ( x 1 ∨ x 2 ∨ x 3 ) ∧ ( ¬ x 1 ∨ x 2 ∨ ¬ x 3 ) F=(x_1\lor x_2\lor x_3) \land (\neg x_1\lor x_2\lor\neg x_3) F=(x1∨x2∨x3)∧(¬x1∨x2∨¬x3)

每个括号中有 3 个文字。

如果令:

x 2 = True x_2=\text{True} x2=True

则两个子句都成立,因此整个公式成立。

记忆:3-SAT 就是每个子句恰好有 3 个文字的 SAT。

SAT 与 3-SAT 的区别
问题 核心要求
SAT 一般布尔公式是否可满足
3-SAT 每个子句恰好包含 3 个文字的 CNF 是否可满足

注意:这里说的 3-SAT 是经典的 NP-Complete 版本,不要与限制更强的特殊变体混淆。


五、排序与路径问题(Sequencing Problems)

核心思想:寻找满足要求的顶点访问顺序或路径。

7. HAMILTONIAN-CYCLE(哈密顿回路问题)

问题定义

给定图:

G = ( V , E ) G=(V,E) G=(V,E)

问:是否存在一个回路,经过图中每个顶点恰好一次,并最终回到起点?

举例

假设存在:

A → B → C → D → A A\rightarrow B\rightarrow C\rightarrow D\rightarrow A A→B→C→D→A

如果这条回路经过全部顶点,而且除起点与终点重合外,没有重复顶点,那么它就是哈密顿回路。

两种常见版本

有向哈密顿回路:DIR-HAM-CYCLE

必须沿着有向边的方向行走。

无向哈密顿回路:HAM-CYCLE

图中的边没有方向。

两者都是 NP-Complete 问题,并且存在多项式时间归约:

DIR-HAM-CYCLE ≤ p HAM-CYCLE \text{DIR-HAM-CYCLE}\leq_p\text{HAM-CYCLE} DIR-HAM-CYCLE≤pHAM-CYCLE

记忆:每个顶点恰好经过一次,最后返回起点。

8. TSP(旅行商问题)

TSP 的英文全称是 Travelling Salesperson Problem。

问题定义

给定若干城市、城市之间的距离,以及一个距离上限 K K K。

问:是否存在一条路线,经过每个城市恰好一次,最后返回出发城市,并使总距离不超过 K K K?

设路线为:

v 1 , v 2 , ... , v n , v 1 v_1,v_2,\ldots,v_n,v_1 v1,v2,...,vn,v1

要求:

∑ i = 1 n − 1 d ( v i , v i + 1 ) + d ( v n , v 1 ) ≤ K \sum_{i=1}^{n-1}d(v_i,v_{i+1})+d(v_n,v_1)\leq K i=1∑n−1d(vi,vi+1)+d(vn,v1)≤K

举例

假设:

d ( A , B ) = 3 d(A,B)=3 d(A,B)=3

d ( B , C ) = 4 d(B,C)=4 d(B,C)=4

d ( C , A ) = 5 d(C,A)=5 d(C,A)=5

选择路线:

A → B → C → A A\rightarrow B\rightarrow C\rightarrow A A→B→C→A

总距离为:

3 + 4 + 5 = 12 3+4+5=12 3+4+5=12

如果:

K = 15 K=15 K=15

则答案为 YES。

记忆:访问所有城市并返回,总路程不能超过指定值。

HAMILTONIAN-CYCLE 与 TSP 的区别
问题 要求
HAMILTONIAN-CYCLE 是否存在经过全部顶点的回路
TSP 是否存在经过全部城市且总费用不超过 K K K 的回路

注意:TSP 的判定版本是 NP-Complete 问题,而寻找最短路线的优化版本是 NP-Hard 问题。


六、划分问题(Partitioning Problems)

核心思想:将对象划分或分配到不同组中,使其满足特定约束。

9. 3D-MATCHING(三维匹配问题)

3D-MATCHING 的英文全称是 Three-Dimensional Matching。

问题定义

给定三个两两不相交、大小相等的集合:

X , Y , Z X,\quad Y,\quad Z X,Y,Z

以及允许选择的三元组集合:

T ⊆ X × Y × Z T\subseteq X\times Y\times Z T⊆X×Y×Z

问:能否从 T T T 中选出若干三元组,使每个元素恰好出现一次?

也就是说:

  • 每个三元组分别从 X , Y , Z X,Y,Z X,Y,Z 中取一个元素。
  • 不同三元组不能共享元素。
  • 三个集合中的所有元素都恰好使用一次。
举例

X = { x 1 , x 2 } X=\{x_1,x_2\} X={x1,x2}

Y = { y 1 , y 2 } Y=\{y_1,y_2\} Y={y1,y2}

Z = { z 1 , z 2 } Z=\{z_1,z_2\} Z={z1,z2}

假设允许的三元组包括:

( x 1 , y 1 , z 1 ) (x_1,y_1,z_1) (x1,y1,z1)

( x 2 , y 2 , z 2 ) (x_2,y_2,z_2) (x2,y2,z2)

选择这两个三元组后,每个元素都恰好出现一次。

因此答案为 YES。

记忆:三个集合,每次各取一个元素组成三元组,要求所有元素恰好匹配一次。

10. 3-COLOR(三着色问题)

问题定义

给定无向图:

G = ( V , E ) G=(V,E) G=(V,E)

问:能否使用最多 3 种颜色给所有顶点着色,使每条边连接的两个顶点颜色不同?

即构造着色函数:

c : V → { 1 , 2 , 3 } c:V\rightarrow\{1,2,3\} c:V→{1,2,3}

满足:

∀ ( u , v ) ∈ E , c ( u ) ≠ c ( v ) \forall (u,v)\in E,\quad c(u)\neq c(v) ∀(u,v)∈E,c(u)=c(v)

举例

假设图是一个三角形:

text 复制代码
      A(红)
     / \
    /   \
B(蓝)-- C(绿)

三个顶点两两相邻,因此需要使用 3 种不同颜色。

所以该图可以进行三着色。

记忆:最多使用 3 种颜色,相邻顶点不能同色。

注意:最多用 3 种颜色,而不是要求每种颜色都必须使用。


七、数值问题(Numerical Problems)

核心思想:从数字或物品中进行选择,满足给定的数值约束。

11. SUBSET-SUM(子集和问题)

问题定义

给定一组整数:

S = { a 1 , a 2 , ... , a n } S=\{a_1,a_2,\ldots,a_n\} S={a1,a2,...,an}

以及目标值 T T T。

问:是否存在一个子集,使其中所有元素之和恰好等于 T T T?

即是否存在:

x i ∈ { 0 , 1 } x_i\in\{0,1\} xi∈{0,1}

使得:

∑ i = 1 n a i x i = T \sum_{i=1}^{n}a_ix_i=T i=1∑naixi=T

其中:

  • x i = 1 x_i=1 xi=1:选择第 i i i 个数字。
  • x i = 0 x_i=0 xi=0:不选择第 i i i 个数字。
举例

S = { 2 , 3 , 7 , 8 } S=\{2,3,7,8\} S={2,3,7,8}

目标值:

T = 10 T=10 T=10

选择:

2 + 8 = 10 2+8=10 2+8=10

因此答案为 YES。

记忆:选择若干数字,使它们的和恰好等于目标值。

12. KNAPSACK(背包问题)

这里讨论经典的 0-1 背包判定问题。

问题定义

给定 n n n 件物品,每件物品具有:

  • 重量 w i w_i wi。
  • 价值 v i v_i vi。

另外给定:

  • 背包容量 W W W。
  • 目标价值 K K K。

问:是否存在一种物品选择方案,使总重量不超过 W W W,同时总价值至少达到 K K K?

数学表达为:

∑ i = 1 n w i x i ≤ W \sum_{i=1}^{n}w_ix_i\leq W i=1∑nwixi≤W

∑ i = 1 n v i x i ≥ K \sum_{i=1}^{n}v_ix_i\geq K i=1∑nvixi≥K

其中:

x i ∈ { 0 , 1 } x_i\in\{0,1\} xi∈{0,1}

举例
物品 重量 价值
A 2 5
B 3 6
C 4 8

假设:

W = 5 , K = 10 W=5,\quad K=10 W=5,K=10

选择 A 和 B:

总重量 = 2 + 3 = 5 \text{总重量}=2+3=5 总重量=2+3=5

总价值 = 5 + 6 = 11 \text{总价值}=5+6=11 总价值=5+6=11

满足:

5 ≤ W , 11 ≥ K 5\leq W,\qquad 11\geq K 5≤W,11≥K

因此答案为 YES。

记忆:背包重量不能超限,物品总价值必须达到目标。

SUBSET-SUM 与 KNAPSACK 的区别
问题 核心要求
SUBSET-SUM 数字之和恰好等于目标值
KNAPSACK 总重量不超过上限,总价值至少达到目标

八、12 个经典 NP 完备问题速记表

类别 英文名称 中文名称 一句话记忆
打包 SET-PACKING 集合打包 选至少 k k k 个两两不相交的集合
打包 INDEPENDENT-SET 独立集 选至少 k k k 个互不相邻的顶点
覆盖 SET-COVER 集合覆盖 用至多 k k k 个集合覆盖全集
覆盖 VERTEX-COVER 顶点覆盖 用至多 k k k 个顶点覆盖所有边
约束满足 SAT 布尔可满足性 给变量赋真假,使公式成立
约束满足 3-SAT 三可满足性 每个子句有 3 个文字的 SAT
排序与路径 HAMILTONIAN-CYCLE 哈密顿回路 经过全部顶点恰好一次并返回
排序与路径 TSP 旅行商问题 访问所有城市,总路程不超过 K K K
划分 3D-MATCHING 三维匹配 选择互不冲突的三元组覆盖所有元素
划分 3-COLOR 三着色 最多 3 种颜色,相邻顶点不同色
数值 SUBSET-SUM 子集和 选择若干数字,和恰好等于 T T T
数值 KNAPSACK 背包问题 重量不超限,价值达到目标

九、三个值得了解的复杂性问题

1. Factoring(整数因式分解)

给定一个整数,研究如何寻找它的非平凡因子。

例如:

15 = 3 × 5 15=3\times5 15=3×5

需要注意:整数因式分解的搜索问题与其判定版本应当区分,不应直接称为 NP 完备问题。

2. Graph Isomorphism(图同构)

给定两个图:

G 1 , G 2 G_1,\quad G_2 G1,G2

判断它们是否具有相同的结构。

即:能否通过重新编号顶点,使两个图的顶点连接关系完全一致?

图同构问题属于 NP,但目前尚未证明它属于 P 或 NP 完备。

3. Nash Equilibrium(纳什均衡)

纳什均衡是博弈论中的重要概念。

如果在某种策略组合下,任何参与者都无法通过单方面改变自己的策略获得更高收益,那么该策略组合就是纳什均衡。

一般有限博弈中的纳什均衡计算属于 PPAD 相关的复杂性研究,与标准 NP 完备判定问题不同。


十、考试重点总结

1. 必须记住的三组易混淆问题

第一组:SET-PACKING 与 SET-COVER

  • SET-PACKING:选出的集合不能重叠。
  • SET-COVER:选出的集合必须覆盖全集。

第二组:INDEPENDENT-SET 与 VERTEX-COVER

  • INDEPENDENT-SET:选中的顶点之间不能有边。
  • VERTEX-COVER:每条边至少有一个端点被选中。

第三组:SUBSET-SUM 与 KNAPSACK

  • SUBSET-SUM:选中数字之和必须恰好等于目标。
  • KNAPSACK:重量不超过容量,价值至少达到目标。

2. NP 完备问题中的常见关键词

关键词 常见对应问题
两两不相交的集合 SET-PACKING
顶点互不相邻 INDEPENDENT-SET
覆盖所有元素 SET-COVER
每条边至少一个端点被选中 VERTEX-COVER
布尔公式可满足 SAT
每个子句有 3 个文字 3-SAT
每个顶点访问一次并返回 HAMILTONIAN-CYCLE
最短旅行路线或费用限制 TSP
三元组、不重复匹配 3D-MATCHING
相邻顶点颜色不同 3-COLOR
数字之和恰好等于目标值 SUBSET-SUM
重量限制、价值要求 KNAPSACK

3. NP 完备性证明的基本步骤

如果要证明一个新问题 B B B 是 NP 完备的,通常需要:

第一步:证明 B ∈ N P B\in NP B∈NP。

说明给定一个候选解,可以在多项式时间内验证。

第二步:选择一个已知的 NP 完备问题 A A A。

第三步:构造多项式时间归约。

A ≤ p B A\leq_p B A≤pB

证明:

x ∈ A    ⟺    f ( x ) ∈ B x\in A\iff f(x)\in B x∈A⟺f(x)∈B

其中 f f f 可以在多项式时间内计算。

这样就证明了 B B B 是 NP-Hard。

结合第一步,即可得到:

B 是 NP-Complete \boxed{B\text{ 是 NP-Complete}} B 是 NP-Complete

特别注意归约方向:要证明 B B B 是 NP 完备的,应当从一个已知 NP 完备问题 A A A 归约到 B B B,而不是反过来。


总结

六大类 NP 完备问题分别是:

  1. Packing(打包):选择互不冲突的对象。
  2. Covering(覆盖):用有限对象覆盖全部目标。
  3. Constraint Satisfaction(约束满足):寻找满足全部约束的变量赋值。
  4. Sequencing(排序与路径):寻找满足条件的访问顺序。
  5. Partitioning(划分):对对象进行合理分组或分配。
  6. Numerical(数值):选择数字或物品满足数值要求。

复习时应重点理解每个问题的:

  • 输入是什么?
  • 需要判断什么?
  • 满足条件的解具有什么性质?
相关推荐
垆边人似月.1 小时前
分割数组的最大值最小化(200分 / 二分答案 + 贪心)
数据结构·算法·排序算法
CQU_JIAKE1 小时前
10.7【A】
算法
Dfreedom.2 小时前
分类算法的统一视角:从方差最大化到概率建模再到损失函数
算法·支持向量机·分类
Nebula_g2 小时前
JavaSE加强:Commons-io框架
java·开发语言·算法·javase
梦帮科技3 小时前
【3.0修订版】音乐权利 NFT:MusicRightsNFT 的确权思想与授权关联
网络协议·算法·web3·区块链·密码学·智能合约·零知识证明
Dfreedom.3 小时前
基于PCA的光谱物质识别分析
算法
强化湿件的技术神甫3 小时前
KS检验和Lilliefors正态性检验方法
算法
yi0113 小时前
DAY23: LeetCode 27 → 283:从移除元素到移动零,理解快慢指针的两种思路
人工智能·笔记·python·算法·leetcode·排序算法·双指针
怕浪猫3 小时前
多 Agent 系统面试怎么答?我总结了 4 种经典架构
人工智能·算法·面试