algorithm - 了解获得多项式时间算法的几何改进方法
问题描述
我正在阅读 Network Flows - Theory, Algorithms, and Applications 并且我坚持以下定理的证明(第 3 章,第 67 页):
定理。假设 ^ 是算法第 ℎ 次迭代中某个最小化问题的某个解的目标函数值,而 ^∗ 是最小目标函数值。此外,假设算法保证对于每次迭代,
(1) (^ - ^(+1)) ≥ (^ - ^∗)
(即,迭代 + 1 处的改进至少是总可能改进的倍数)对于 0 < < 1 的某个常数(与问题数据无关)。然后算法在 (()/) 迭代中终止,其中 是最大和最小目标函数值之间的差。
证明。数量 (^ − ^∗) 表示 ℎ 迭代后目标函数值的总可能改进。考虑从 iteration 开始的 2/ 次迭代的连续序列。如果算法的每次迭代将目标函数值至少提高 (^ − ^∗)/2 个单位,则算法将在这 2/ 次迭代中确定最优解。相反,假设在某个迭代 + 1 时,算法将目标函数值提高了小于 (^ − ^∗)/2 个单位。换句话说,
(2) ^ - ^(+1) ≤ (^ - ^∗)/2。
不等式 (1) 意味着
(3) (^ - ^∗) ≤ ^ - ^(+1)
不等式 (2) 和 (3) 意味着
(^ − ^∗) ≤ (^ − ^∗)/2,
因此该算法已将总可能改进 (^ - ^∗) 减少了至少 2 倍。因此,我们已经证明,在 2/ 次连续迭代内,该算法要么获得最优解,要么将总可能改进减少 1 倍至少 2。由于是最大可能的改进,并且每个目标函数值都是整数,因此算法必须在 (()/) 次迭代内终止。
为什么作者关注2/a迭代?
解决方案
我认为这样写是为了让计算机科学家更容易理解我们每 2/α 轮将一个整数减半,因此 2/α 轮超轮的数量将为 O(log)。没有特别的原因我们不能更直接地做数学:
T(n) is the gap between the nth solution and an optimal solution.
T(n) ≤ (1 - α) T(n-1) [assumption]
n
T(n) ≤ T(0) (1 - α) [by induction]
-α n x
< T(0) (e ) [by 1 + x < e for x ≠ 0]
-α (ln T(0))/α
T((ln T(0))/α) < T(0) e
= 1,
所以(ln T(0))/α
回合就足够了。
推荐阅读
- vue.js - 我想在axios get方法中将id调用到兄弟组件中,并在vue客户端表中显示输出数据
- python - 熊猫每行的条件替换
- c# - 将 Dotfuscator 与 Fody/Costura 一起使用
- pear - 如何仅在 1 行中从多行转换国际象棋移动?
- flutter - Flutter CheckboxListTile 辅助小部件功能
- python - 为什么 Psycopg2 很难在 CSV 中解析我的逗号
- angular - Angular 4 - 获取在 url 标头中发送的信息
- docker - 同一 Docker 网络中的 OAuth2 服务器和客户端
- python-2.7 - 我们可以在相同的代码中编写另一个解析方法来解析来自新生成的 url 的数据......?
- spring-boot - Spring boot 2 和 AWS DynamoDB 健康端点