以简单组合优化为例讨论计算复杂性

news2024/11/27 5:39:36

此为课题组所指导本科生和低年级硕士生学习组合优化问题汇报
所用教材:北京大学屈婉玲教授《算法设计与分析》
课程资料:https://www.icourse163.org/course/PKU-1002525003
承诺不用于任何商业用途,仅用于学术交流和分享

  • 更多内容请关注课题组官方中文主页:https://JaywayXu.github.io/zh-cn/

1. 简单TSP(1.4)

  • 问题描述:有 n n n个城市, 已知任两个城市之间的距离. 求一条每个城市恰好经过 1 次的回路,使得总长度最小.
  • 实例:
    问题实例
  • 输入:有穷个城市的集合 C = { c 1 , c 2 , … , c n } C=\left\{c_1, c_2, \ldots, c_n\right\} C={c1,c2,,cn}, 距离 d ( c i , c j ) = d ( c j , c i ) ∈ Z + , 1 ≤ i < j ≤ n d\left(c_i, c_j\right)=d\left(c_j, c_i\right) \in \mathbf{Z}^{+}, \quad 1 \leq i<j \leq n d(ci,cj)=d(cj,ci)Z+,1i<jn
  • 解: 1 , 2 … , n 1,2 \ldots, n 1,2,n的排列 k 1 , k 2 , … , k n k_1, k_2, \ldots, k_n k1,k2,,kn使得:

min ⁡ { ∑ i = 1 n − 1 d ( c k i , c k i + 1 ) + d ( c k n , c k 1 ) } \min \left\{\sum_{i=1}^{n-1} d\left(c_{k_i}, c_{k_{i+1}}\right)+d\left(c_{k_n}, c_{k_1}\right)\right\} min{i=1n1d(cki,cki+1)+d(ckn,ck1)}

  • 现状:至今没找到有效的算法

2. 背包问题(knapsack Problem)(5.7)

  • 一个旅行者随身携带一个背包. 可以放入背包的物品有 n n n种, 每种物品的重量和价值分别为 w i , v i w_i, v_i wi,vi. 如果背包的最大重量限制是 b b b, 每种物品可以放多个. 怎样选择放入背包的物品以使得背包的价值最大?不妨设上述 w i , v i , b w_i, v_i, b wi,vi,b都是正整数.

建模

  • 解是 ⟨ x 1 , x 2 , … , x n ⟩ \left\langle x_1, x_2, \ldots, x_n\right\rangle x1,x2,,xn, 其中 x i x_i xi是装入背包的第 i i i种物品个数
  • 目标函数 max ⁡ ∑ i = 1 n v i x i \max \sum_{i=1}^n v_i x_i maxi=1nvixi
  • 约束条件 ∑ i = 1 n w i x i ≤ b , x i ∈   N \sum_{i=1}^n w_i x_i \leq b, x_i \in \mathrm{~N} i=1nwixib,xi N
  • 线性规划问题: 由线性条件约束的线性函数取最大或最小的问题
  • 整数规划问题: 线性规划问题的变量 x \boldsymbol{x} x都是韭负整数

2.1. 0-1背包(1.4)

* 0 − 1 0-1 01背包问题: 有 n \boldsymbol{n} n个件物品要装入背包,第 i i i件物品的重量 w i w_i wi, 价值 v i , i = 1 , 2 , … , n v_i, i=1,2, \ldots, n vi,i=1,2,,n. 背包最多允许装入的重量为 B \boldsymbol{B} B,问如何选择装入背包的物品, 使得总价值达到最大? (每种物品只能装一件)

  • 实例:n=4, B=6, 物品的重量和价值如下:
     标号  1 2 3 4  重量  w i 3 4 5 2  价值  v i 7 9 9 2 \begin{array}{|c|c|c|c|c|} \hline \text { 标号 } & \mathbf{1} & \mathbf{2} & \mathbf{3} & \mathbf{4} \\ \hline \text { 重量 } \boldsymbol{w}_{\boldsymbol{i}} & \mathbf{3} & \mathbf{4} & \mathbf{5} & \mathbf{2} \\ \hline \text { 价值 } \boldsymbol{v}_{\boldsymbol{i}} & 7 & 9 & 9 & 2 \\ \hline \end{array}  标号  重量 wi 价值 vi137249359422

问题建模

  • 问题的解:0-1向量 < x 1 , x 2 , … , x n > <x_1, x_2, \ldots, x_n> <x1,x2,,xn> x i = 1 ⇔ x_i=1 \Leftrightarrow xi=1物品 i i i装入背包
  • 目标函数: max ⁡ ∑ i = 1 n v i x i \max \sum_{i=1}^n v_i x_i maxi=1nvixi
  • 约束条件: ∑ i = 1 n w i x i ≤ B \sum_{i=1}^n w_i x_i \leq B i=1nwixiB, x i = 0 , 1 , i = 1 , 2 , … , n x_i=0,1, i=1,2, \ldots, n xi=0,1,i=1,2,,n

2.2. 简单最优装载问题(7.4)

  • 问题描述: n n n个集装箱 1 , 2 , … , n 1,2, \ldots, n 1,2,,n装上轮船, 集装箱 i i i的重量 w i w_i wi, 轮船装载重量限制为 C C C, 无体积限制. 问如何装使得上船的集装箱最多?不妨设每个箱子的重量 w i ≤ C w_i \leq C wiC.
  • 问题分析:该问题是 0 − 1 0-1 01背包问题的子问题. 集装箱相当于物品, 物品重量是 w i w_i wi, 价值 v i v_i vi都等于 1 , 轮船载重限制 C C C相当于背包重量限制 b \boldsymbol{b} b.

问题建模

  • < x 1 , x 2 , … , x n > < x_1, x_2, \ldots, x_n> <x1,x2,,xn>表示解向量, x i = 0 , 1 x_i=0,1 xi=0,1, x i = 1 x_i=1 xi=1当且仅当第 i i i个集装箱装上船

  • 目标函数 max ⁡ ∑ i = 1 n x i \max \sum_{i=1}^n x_i maxi=1nxi

  • 约束条件 ∑ i = 1 n w i x i ≤ C , x i = 0 , 1 i = 1 , 2 , … , n \sum_{i=1}^n w_i x_i \leq C, x_i=0,1 \quad i=1,2, \ldots, n i=1nwixiCxi=0,1i=1,2,,n

2.3 背包问题分类(5.7)

  • 物品数受限背包: 第 i i i种物品最多用 n i n_i ni个 0 -1背包问题: x i = 0 , 1 , i = 1 , 2 , … , n x_i=0,1, i=1,2, \ldots, n xi=0,1,i=1,2,,n
  • 多背包问题: m m m个背包, 背包 j j j装入最大重量 B j , j = 1 , 2 , … , m B_j, j=1,2, \ldots, m Bj,j=1,2,,m. 在满足所有背包重量约束条件下使装入物品价值最大.
  • 二维背包问题: 每件物品有重量 w i \boldsymbol{w}_i wi和体积 t i , i = 1 , 2 , … , n \boldsymbol{t}_{\boldsymbol{i}}, \boldsymbol{i}=1,2, \ldots, n ti,i=1,2,,n, 背包总重不超过 b \boldsymbol{b} b,体积不超过 V V V, 如何选择物品以得到最大价值。

3. 简单调度问题

3.1 双机调度(1.4)

  • 问题描述:双机调度问题: 有 n n n项任务, 任务 i i i的加工时间为 t i , t i ∈ Z + , i = 1 , 2 , … , n t_i, t_i \in \mathbf{Z}^{+}, i=1,2, \ldots, n ti,tiZ+,i=1,2,,n. 用两台相同的机器加工, 从 0 时刻开始计时, 完成时间是后停止加工机器的停机时间. 问如何把这些任务分配到两台机器上, 使得完成时间达到最小?
  • 实例:假设有任务集合  任务集  S = { 1 , 2 , 3 , 4 , 5 , 6 } \text { 任务集 } S=\{1,2,3,4,5,6\}  任务集 S={1,2,3,4,5,6}, 任务时间: t 1 = 3 , t 2 = 10 , t 3 = 6 , t 4 = 2 , t 5 = 1 , t 6 = 7 t_1=3, t_2=10, t_3=6, t_4=2, t_5=1, t_6=7 t1=3,t2=10,t3=6,t4=2,t5=1,t6=7
  • 实例解:设有一解:机器 1 的任务: 1 , 2 , 4 1,2,4 1,2,4,机器 2 的任务: 3 , 5 , 6 3,5,6 3,5,6,则完成时间为: max ⁡ { 3 + 10 + 2 , 6 + 1 + 7 } = 15 \max \{3+10+2,6+1+7\}=15 max{3+10+2,6+1+7}=15

双机调度问题建模

1. 问题描述:

该问题属于经典的双机调度问题(Two-Machine Scheduling Problem),目标是将任务分配给两台机器,使得完成时间(即两台机器中最晚的完成时间)最小。

2. 模型建模:
  1. 决策变量
    定义 0-1 决策变量 x i x_i xi,其中:

    • x i = 1 x_i = 1 xi=1表示任务 i i i被分配到机器 1;
    • x i = 0 x_i = 0 xi=0表示任务 i i i被分配到机器 2;
    • i = 1 , 2 , … , n i = 1, 2, \dots, n i=1,2,,n,其中 n n n是任务的数量。
  2. 目标函数
    目标是最小化机器的最大完成时间(Makespan),即:

min ⁡ ( max ⁡ ( ∑ i = 1 n x i t i , ∑ i = 1 n ( 1 − x i ) t i ) ) \min \left( \max \left( \sum_{i=1}^{n} x_i t_i, \sum_{i=1}^{n} (1 - x_i) t_i \right) \right) min(max(i=1nxiti,i=1n(1xi)ti))

  • ∑ i = 1 n x i t i \sum_{i=1}^{n} x_i t_i i=1nxiti表示分配给机器 1 的总加工时间;
  • ∑ i = 1 n ( 1 − x i ) t i \sum_{i=1}^{n} (1 - x_i) t_i i=1n(1xi)ti表示分配给机器 2 的总加工时间;
  • 最大值函数 max ⁡ \max max取两台机器中加工时间较大的那个作为目标最小化的值。
  1. 约束条件
    • 每个任务 i i i都必须分配给一台机器上:
      x i ∈ { 0 , 1 } , i = 1 , 2 , … , n x_i \in \{0, 1\}, \quad i = 1, 2, \dots, n xi{0,1},i=1,2,,n
    • 加工时间是整数非负值:
      t i ∈ Z + , i = 1 , 2 , … , n t_i \in \mathbf{Z}^{+}, \quad i = 1, 2, \dots, n tiZ+,i=1,2,,n
当然,也可以不妨设机器 1 的加工时间 ≤ \leq 机器 2 的加工时间令 T = t 1 + t 2 + … + t n , D = ⌊ T / 2 ⌋ T=t_1+t_2+\ldots+t_n, D=\lfloor T / 2\rfloor T=t1+t2++tn,D=T/2, 机器 1 的加工时间不超过 D D D, 且达到最大.

另一种建模方式

问题描述:

我们有 n n n项任务,每项任务 i i i的加工时间为 t i t_i ti,两台相同的机器开始工作,目的是将任务分配给两台机器,使得满足约束条件的同时完成时间最小。完成时间是后停止加工的机器的停机时间

目标:

根据图片中的约束,目标是最大化机器 1 的加工时间,但其总加工时间不能超过 D = ⌊ T 2 ⌋ D = \left\lfloor \frac{T}{2} \right\rfloor D=2T,其中 T = t 1 + t 2 + ⋯ + t n T = t_1 + t_2 + \dots + t_n T=t1+t2++tn

模型建模:
  1. 决策变量
    定义 0-1 决策变量 x i x_i xi

    • x i = 1 x_i = 1 xi=1表示任务 i i i被分配到机器 1;
    • x i = 0 x_i = 0 xi=0表示任务 i i i被分配到机器 2;
    • 其中 i = 1 , 2 , … , n i = 1, 2, \dots, n i=1,2,,n n n n是任务的数量。
  2. 目标函数
    目标是最大化机器 1 的加工时间,但不能超过 D D D
    max ⁡ ( ∑ i = 1 n x i t i ) \max \left( \sum_{i=1}^{n} x_i t_i \right) max(i=1nxiti)
    满足:
    D = ⌊ T 2 ⌋ , T = t 1 + t 2 + ⋯ + t n D = \left\lfloor \frac{T}{2} \right\rfloor, \quad T = t_1 + t_2 + \dots + t_n D=2T,T=t1+t2++tn
    其中 T T T是所有任务总的加工时间。

  3. 约束条件

    • 约束 1:机器 1 的总加工时间不能超过 D D D
      ∑ i = 1 n x i t i ≤ D \sum_{i=1}^{n} x_i t_i \leq D i=1nxitiD
    • 约束 2:机器 1 和机器 2 共同完成所有任务,总任务时间应为 T T T
      ∑ i = 1 n x i t i + ∑ i = 1 n ( 1 − x i ) t i = T \sum_{i=1}^{n} x_i t_i + \sum_{i=1}^{n} (1 - x_i) t_i = T i=1nxiti+i=1n(1xi)ti=T
    • 决策变量的取值限制:
      x i ∈ { 0 , 1 } , i = 1 , 2 , … , n x_i \in \{0, 1\}, \quad i = 1, 2, \dots, n xi{0,1},i=1,2,,n
总结:

该模型的目标是在机器 1 的加工时间尽量大的前提下,不超过给定的阈值 D D D,剩余的任务则分配到机器 2。通过这个建模方法,任务被合理分配,以实现优化目标。

3.2 最小延迟调度(7.5)

  • 问题描述:客户集合 A , ∀ i ∈ A , t i A, \forall i \in A, t_i A,iA,ti为服务时间(即需要为客户i服务的工时), d i d_i di为要求完成时间(即客户要求的任务完成DDL), t i , d i t_i, d_i ti,di为正整数. 一个调度 f : A →   N , f ( i ) f: A \rightarrow \mathrm{~N}, f(i) f:A N,f(i)为客户 i i i的开始时间. 求最大延迟达到最小的调度(每个任务的延迟-即为其实际开始时间+工时-约定的DDL。而所有任务中最大的延迟即为这个问题的最大延迟。目标是使这个任务集合的最大延迟最小), 即求 f f f使得:

min ⁡ f { max ⁡ i ∈ A { f ( i ) + t i − d i } } ∀ i , j ∈ A , i ≠ j , f ( i ) + t i ≤ f ( j )  or  f ( j ) + t j ≤ f ( i ) \begin{aligned} & \min _f\left\{\max _{i \in A}\left\{f(i)+t_i-d_i\right\}\right\} \\ & \forall i, j \in A, i \neq j, f(i)+t_i \leq f(j) \\ & \text { or } f(j)+t_j \leq f(i) \end{aligned} fmin{iAmax{f(i)+tidi}}i,jA,i=j,f(i)+tif(j) or f(j)+tjf(i)

  • 实例:
  1. 按照任务的顺序进行安排,例如:
    顺序安排
  • 在任务顺序 A = { 1 , 2 , 3 , 4 , 5 } A = \{1, 2, 3, 4, 5\} A={1,2,3,4,5}下,每个任务的执行时间 T = ⟨ 5 , 8 , 4 , 10 , 3 ⟩ T = \langle 5, 8, 4, 10, 3 \rangle T=5,8,4,10,3,截止时间 D = ⟨ 10 , 12 , 15 , 11 , 20 ⟩ D = \langle 10, 12, 15, 11, 20 \rangle D=10,12,15,11,20。我们根据以下步骤计算每个任务的完成时间和延迟。
完成时间 f 1 ( i ) f_1(i) f1(i)

任务 i i i的完成时间是前面所有任务的累计执行时间:

  • f 1 ( 1 ) = 5 f_1(1) = 5 f1(1)=5
  • f 1 ( 2 ) = 5 + 8 = 13 f_1(2) = 5 + 8 = 13 f1(2)=5+8=13
  • f 1 ( 3 ) = 13 + 4 = 17 f_1(3) = 13 + 4 = 17 f1(3)=13+4=17
  • f 1 ( 4 ) = 17 + 10 = 27 f_1(4) = 17 + 10 = 27 f1(4)=17+10=27
  • f 1 ( 5 ) = 27 + 3 = 30 f_1(5) = 27 + 3 = 30 f1(5)=27+3=30
延迟 L ( i ) = max ⁡ { f 1 ( i ) − D i , 0 } L(i) = \max\{f_1(i) - D_i, 0\} L(i)=max{f1(i)Di,0}

延迟是完成时间与截止时间的差,如果差为负则延迟为 0。

  • 任务 1: L ( 1 ) = max ⁡ { 5 − 10 , 0 } = max ⁡ { − 5 , 0 } = 0 L(1) = \max\{5 - 10, 0\} = \max\{-5, 0\} = 0 L(1)=max{510,0}=max{5,0}=0
  • 任务 2: L ( 2 ) = max ⁡ { 13 − 12 , 0 } = max ⁡ { 1 , 0 } = 1 L(2) = \max\{13 - 12, 0\} = \max\{1, 0\} = 1 L(2)=max{1312,0}=max{1,0}=1
  • 任务 3: L ( 3 ) = max ⁡ { 17 − 15 , 0 } = max ⁡ { 2 , 0 } = 2 L(3) = \max\{17 - 15, 0\} = \max\{2, 0\} = 2 L(3)=max{1715,0}=max{2,0}=2
  • 任务 4: L ( 4 ) = max ⁡ { 27 − 11 , 0 } = max ⁡ { 16 , 0 } = 16 L(4) = \max\{27 - 11, 0\} = \max\{16, 0\} = 16 L(4)=max{2711,0}=max{16,0}=16
  • 任务 5: L ( 5 ) = max ⁡ { 30 − 20 , 0 } = max ⁡ { 10 , 0 } = 10 L(5) = \max\{30 - 20, 0\} = \max\{10, 0\} = 10 L(5)=max{3020,0}=max{10,0}=10
最大延迟:

所有任务的延迟为 { 0 , 1 , 2 , 16 , 10 } \{0, 1, 2, 16, 10\} {0,1,2,16,10},其中最大延迟为 16(任务 4)。

更优的调度方法:按截止时间从前到后安排

按截止时间安排

按照截止时间从前到后排序的任务调度

数据:

  • 任务集合: A = { 1 , 2 , 3 , 4 , 5 } A = \{1, 2, 3, 4, 5\} A={1,2,3,4,5}
  • 执行时间: T = ⟨ 5 , 8 , 4 , 10 , 3 ⟩ T = \langle 5, 8, 4, 10, 3 \rangle T=5,8,4,10,3
  • 截止时间: D = ⟨ 10 , 12 , 15 , 11 , 20 ⟩ D = \langle 10, 12, 15, 11, 20 \rangle D=10,12,15,11,20
  • 排序后任务顺序: 1 , 4 , 2 , 3 , 5 1, 4, 2, 3, 5 1,4,2,3,5

完成时间 f 2 ( i ) f_2(i) f2(i)

  • f 2 ( 1 ) = 5 f_2(1) = 5 f2(1)=5, f 2 ( 2 ) = 15 f_2(2) = 15 f2(2)=15, f 2 ( 3 ) = 23 f_2(3) = 23 f2(3)=23, f 2 ( 4 ) = 27 f_2(4) = 27 f2(4)=27, f 2 ( 5 ) = 30 f_2(5) = 30 f2(5)=30

延迟 L ( i ) = max ⁡ { f 2 ( i ) − D i , 0 } L(i) = \max\{f_2(i) - D_i, 0\} L(i)=max{f2(i)Di,0}

  • L ( 1 ) = max ⁡ { 5 − 10 , 0 } = 0 L(1) = \max\{5 - 10, 0\} = 0 L(1)=max{510,0}=0
  • L ( 4 ) = max ⁡ { 15 − 11 , 0 } = 4 L(4) = \max\{15 - 11, 0\} = 4 L(4)=max{1511,0}=4
  • L ( 2 ) = max ⁡ { 23 − 12 , 0 } = 11 L(2) = \max\{23 - 12, 0\} = 11 L(2)=max{2312,0}=11
  • L ( 3 ) = max ⁡ { 27 − 15 , 0 } = 12 L(3) = \max\{27 - 15, 0\} = 12 L(3)=max{2715,0}=12
  • L ( 5 ) = max ⁡ { 30 − 20 , 0 } = 10 L(5) = \max\{30 - 20, 0\} = 10 L(5)=max{3020,0}=10

结果:

  • 各任务延迟: { 0 , 11 , 12 , 4 , 10 } \{0, 11, 12, 4, 10\} {0,11,12,4,10}
  • 最大延迟: 12(任务 3)

4. RNA二级结构预测(6.6)

  • RNA的一级结构是由核苷酸(A、C、G、U)组成的线性序列
    * A − C − C − G − C − C − U − A − A − G − C − C − G − U − C − C − U − A − A − G − A-C-C-G-C-C-U-A-A-G-C-C-G-U-C-C-U-A-A-G- ACCGCCUAAGCCGUCCUAAG
  • 而二级结构描述了这些核苷酸之间的碱基配对形成的二维拓扑结构。这些配对大多数遵循沃森-克里克配对规则(A-U 和 C-G),也可能存在少量其他配对形式(如G-U)。
  • RNA二级结构通常由发夹环、内环、茎和多分支环等结构组成,这些特征在RNA分子功能中起关键作用。

匹配原则

匹配原则

匹配结构

匹配结构

  • 给定RNA的一条链(一级结构), 预测它的可能的稳定的二级结构。
  • 稳定二级结构满足的条件
  • 生物学条件: 具有最小自由能
  • 简化条件:具有最多的匹配对数
  • 问题: 给定RNA链, 求具有最多匹配对数的二级结构, 即最优结构.

NP-hard问题

  • 这样的问题有数千个,大量存在于各个应用领域.
  • 至今没有人能够证明对于这类问题不存在多项式时间的算法.
  • 至今没找到有效算法:现有的算法的运行时间是输入规模的指数或更高阶函数.
  • 从是否存在多项式时间算法的角度看,这些问题彼此是等价的. 这些问题的难度处于可有效计算的边界.

P=NP?

P=NP 问题的解释

背景:
  1. P 类问题:P(Polynomial time)是多项式时间可解问题的集合,代表了那些可以在多项式时间内被求解的决策问题。也就是说,对于给定输入,可以在合理的时间内(即,时间复杂度是输入规模的某个多项式)找到解决方案的所有问题。

    • 例子:排序问题(如快速排序)、图的最短路径问题(如 Dijkstra 算法)等。
  2. NP 类问题:NP(Nondeterministic Polynomial time)是非确定性多项式时间问题的集合,代表了那些解法可以在多项式时间内验证的问题。也就是说,如果我们给出一个候选解,可以在多项式时间内验证这个解是否正确。

    • 例子:旅行商问题、整数分解、数独等问题。对于这些问题,可能我们不知道如何快速找到解,但一旦给出解,验证这个解是否正确是比较快的。
P vs NP 问题:
  • P 表示所有可以在多项式时间内求解的问题。
  • NP 表示所有可以在多项式时间内验证的问题。

P=NP 的含义是:是否所有能够在多项式时间内验证正确解的问题,也能在多项式时间内找到解?

换句话说:

  • P = NP:如果某个问题的解能够快速验证(属于 NP 类问题),那么它也能被快速求解(属于 P 类问题)。
  • P ≠ NP:有些问题虽然解的验证很快(属于 NP 类问题),但找到解的过程非常慢,甚至可能没有有效的多项式时间算法。
为什么这个问题重要?
  • 如果 P = NP,那么很多目前被认为非常困难的问题(如密码学中的整数分解、旅行商问题等)将变得可以高效解决。这将对计算机科学、密码学、经济学等各个领域产生巨大影响。
  • 如果 P ≠ NP,则说明有很多问题虽然解可以快速验证,但无法高效求解,这解释了为什么我们无法找到某些问题的快速解法。
目前的状况:
  • 目前,大多数计算机科学家认为 P ≠ NP,但这一点尚未被证明。因此,P vs NP 问题仍然是一个悬而未决的难题,也是克雷数学研究所的七大千禧年问题之一,如果有人证明了 P = NP 或 P ≠ NP,便可以获得一百万美元的奖励。
举例:

假设你有一个很复杂的密码锁(例如由一组数字组成),这个锁只有一个正确的密码。你不知道如何高效地找到密码(这属于 NP 类问题),但是如果有人告诉你正确的密码,你可以立即检查这个密码是否能打开锁(这是验证问题)。问题是:你能不能既快速验证,又快速找到正确的密码?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2219471.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

centOS实用命令

一、查看进程&#xff0c;端口占用 netstat命令(window和linux通用&#xff0c;细节不同) 查看端口占用(linux) netstat -ano |grep 8080查看端口占用(window) netstat -ano |findstr 8080ps命令 可以直接使用ps aux查看所有用户的进程信息 一些参数 参数解释-p根据进程P…

【git】如何快速准确的回退(revert)已经合并(merge)主分支(master)的新提交代码

文章目录 前言一、merge模式二、回滚步骤总结 前言 我们在做一些需求&#xff0c;正常流程经过开发&#xff0c;测试到最后和代码上线。但是有时候就会发生一些小插曲&#xff0c;比如产品说老板说某某某你的代码要延后上线&#xff01;&#xff01;或者你写的不合格预发环境出…

(成功解决)ubuntu22.04不小心更新成了atzlinux12.7.1,右上角出现红色错误符号

文章目录 &#x1f315;问题&#x1f315;查看系统版本&#x1f315;为什么更新更成了atzlinux&#x1f315;通过修复依赖关系尝试解决右上角红色错误符号&#x1f315;把源换成ubuntu的源&#x1f315;删除atzlinux源和自定义的第三方源&#x1f315;重新创建/etc/os-release文…

AJAX——服务端响应 JSON 数据

网页文件中&#xff1a; js 文件中&#xff1a; 本文分享到此结束&#xff0c;欢迎大家评论区相互讨论学习&#xff0c;下一篇继续分享AJAX中AJAX 请求超时与网络异常处理的学习。

吴伟仁《英国文学史及选读》第一二册课后答案PDF

新经典高等学校英语专业系列教材《英国文学史及选读》根据英国文学历史的顺序结合作品选读编写而成&#xff0c;在历史部分&#xff0c;对英国文学史的每个阶段作了简明扼要的概述&#xff0c;而在作品选读部分则尽可能遴选了文学史上的重要作家和重要作品。教材内容丰富&#…

python机器人编程——用python调用API控制wifi小车的实例程序

目录 一、前言二、一个客户端的简单实现2.1 首先定义一个类及属性2.2 其次定义连接方法2.3 定义一些回调函数2.4 定义发送小车指令方法2.5 定义一个正常关闭方法 三、python编程控制小车的demo实现四、小结PS.扩展阅读ps1.六自由度机器人相关文章资源ps2.四轴机器相关文章资源p…

vue elementui table编辑表单时,弹框增加编辑明细数据

需求: 前端进行新增表单时&#xff0c;同时增加表单的明细数据。明细数据部分&#xff0c;通过弹框方式增加或者编辑。 效果图&#xff1a; 代码&#xff1a; <!-- 新增主表弹窗 Begin --><el-dialog:title"titleInfo"top"5vh"centerwidth"…

从零开始学PHP之输出语句变量常量

一、 输出方式 在 PHP 中输出方式&#xff1a; echo&#xff0c;print&#xff0c;print_r&#xff0c;var_dump 1、echo和print为php的输出语句 2、var_dump&#xff0c;print_r为php的输出函数 &#xff08;这里不做介绍&#xff09;echo 和 print 区别 1、echo - 可以输出…

Python学习的自我理解和想法(15)

学的是b站的课程&#xff08;千锋教育&#xff09;&#xff0c;跟老师写程序&#xff0c;不是自创的代码&#xff01; 今天是学Python的第15天&#xff0c;从今天开始&#xff0c;每天一到两个常用模块&#xff0c;更完恢复到原来的&#xff0c;开学了&#xff0c;时间不多&am…

StarRocks大批量数据导入方案-使用 Routine Load 导入数据

本文详细介绍如何使用Routine Load 导入数据 一、准备工作 1.1 安装基础环境 主要是安装StarRocks和Kafka&#xff0c;本文直接跳过不做详细介绍~ 二、概念及原理 2.1 概念 导入作业&#xff08;Load job&#xff09; 导入作业会常驻运行&#xff0c;当导入作业的状态为 R…

【数据结构与算法】链表(上)

记录自己所学&#xff0c;无详细讲解 无头单链表实现 1.项目目录文件 2.头文件 Slist.h #include <stdio.h> #include <assert.h> #include <stdlib.h> struct Slist {int data;struct Slist* next; }; typedef struct Slist Slist; //初始化 void SlistI…

算法专题八: 链表

目录 链表1. 链表的常用技巧和操作总结2. 两数相加3. 两两交换链表中的节点4. 重排链表5. 合并K个升序链表6. K个一组翻转链表 链表 1. 链表的常用技巧和操作总结 常用技巧 画图!!! 更加直观形象, 便于我们理解引入虚拟头节点, 方便我们对链表的操作, 减少我们对边界情况的考…

《欢乐饭米粒儿》第九季热播中,今晚精彩继续!

由鲜博士独家冠名播出的独创小品剧《欢乐饭米粒儿》第九季正在辽宁卫视热播&#xff0c;本期节目将于今晚20:50在辽宁卫视继续为观众带来欢笑与感动。本周节目亮点纷呈&#xff0c;三个小品故事不仅延续了节目一贯的幽默风格&#xff0c;更在欢笑中传递了深刻的社会价值和情感共…

Java 8 Stream API:从基础到高级,掌握流处理的艺术

一、Stream&#xff08;流&#xff09;基本介绍 Java 8 API 添加了一个新的抽象称为Stream&#xff08;流&#xff09;&#xff0c;可以让你以一种声明的方式处理数据&#xff0c;这种风格将要处理的元素集合看做一种流&#xff0c;元素流在管道中传输&#xff0c;并在管道中间…

Kamailio-Sngrep 短小精悍的利器

一个sip的抓包小工具&#xff0c;在GitHub上竟然能够积累1K的star&#xff0c;看来还是有点东西&#xff0c;当然官方的友链也是发挥了重要作用 首先送上项目地址&#xff0c;有能力的宝子可以自行查看 经典的网络抓包工具有很多&#xff0c;比如&#xff1a; Wireshark&…

vue实现文件预览和文件上传、下载、预览——多图、模型、dwg图纸、文档(word、excel、ppt、pdf)

整体思路&#xff08;模型特殊不考虑&#xff0c;别人封装不具备参考性&#xff09; 图片上传采用单独的组件&#xff0c;其他三种类型采用一个上传组件&#xff08;仅仅文件格式不同&#xff09;文件上传采用前端直接上传阿里云的方式图片预览使用elementUI自带的image预览dw…

双目标定的原理

标定目的&#xff1a;建立相机成像几何模型并矫正透镜畸变。 建立相机成像几何模型&#xff1a;计算机视觉的首要任务就是要通过拍摄到的图像信息获取到物体在真实三维世界里相对应的信息&#xff0c;于是&#xff0c;建立物体从三维世界映射到相机成像平面这一过程中的几何模…

ssm剧本杀预约系统+vue

系统包含&#xff1a;源码论文 所用技术&#xff1a;SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习&#xff0c;获取源码请私聊我 需要定制请私聊 目 录 第1章 绪论 1 1.1 课题背景 1 1.2 课题意义 1 1.3 研究内容 2 第2章 开发环境与技术 3 2.1 Java语言…

【p2p、分布式,区块链笔记 Blockchain】truffle002 unleashed_rentable_nft 项目

上一篇&#xff1a;【p2p、分布式&#xff0c;区块链笔记 Blockchain】truffle001 以太坊开发框架truffle初步实践 项目结构 项目实现了一个简单的可租赁的 NFT 系统&#xff0c;用户可以铸造和销毁 NFT。这是作者写的项目介绍&#xff08;后边看issue才发现的&#xff09;&a…

xtrabackup工具介绍、安装及模拟数据库故障使用xtrabackup工具恢复数据等操作详细说明

一、xtrabackup工具介绍 Percona XtraBackup Percona XtraBackup是一个适用于MySQL的开源热备份工具&#xff0c;它在备份期间不锁表。它可以备份InnoDB、XtraDB以及MyISAM存储引擎的表。 2.4版本支持MySQL5.1、5.5、5.6以及5.7。 它有两个实用命令&#xff0c;分别是xtraback…