算法设计与分析--随机算法作业

  • 随机算法作业
    • 1. 顶点覆盖问题
      • 问题描述
      • 参考答案
      • 解答
    • 2. 负载均衡算法
      • 问题描述
      • 参考答案
      • 解答
    • 3. MAX 3-SAT
      • 题目描述
      • 参考答案
      • 解答

随机算法–徐小华

随机算法作业

1. 顶点覆盖问题

问题描述

考虑下述 顶点覆盖问题 的简单随机算法:

开始时 S = ∅
While S 不是一个顶点覆盖
          选择一条没有被 S 覆盖的边 e
          随机地选择 e 的一个端点(每一个端点的可能性相等)
          把选中的结点加入 S
Endwhile

(a)这个算法是 最小权顶点覆盖问题 c c c-近似算法吗?其中 c c c 是某个常数。证明你的答案。

(b)这个算法是 最小规模顶点覆盖问题 c c c-近似算法吗?其中 c c c 是某个常数。证明你的答案。

(提示:用 P e P_e Pe 表示在这个算法中边 e e e 作为未覆盖的边被选的概率。你能够用这些概率表示解的期望值吗?为了用这些概率给出最优值的上界,尝试给出所有与给定结点 v v v 关联的边的概率之和的上界,即 ∑ e 与 v 关联 P e ∑_{e 与 v 关联}P_e ev关联Pe 的上界)

参考答案

在这里插入图片描述
在这里插入图片描述

解答

(a)不是。

一个反例是仅由一条边 ( u , v ) (u,v) (u,v) 组成,假设顶点 u u u 的权值为 1,顶点 v v v 的权值大于 2 c 2c 2c,那么最小权顶点覆盖是 1,但是该近似算法选择顶点 v v v 的概率是 1 / 2 1/2 1/2,所以用概率表示解的期望值大于 1 / 2 ∗ 2 c 1/2 * 2c 1/22c 即大于 c c c

(b)是。

p e p_e pe 表示在这个算法中边 e e e 被选的概率,注意到算法中没有指定边的选择规则,可以随机选择未覆盖的边,也可以通过最小索引等进行选择,概率 p e p_e pe 显然取决于所使用的选择规则。但任何选择规则都会产生概率。

现在注意两个事实:

  • 首先, ∑ e ∈ E p e \displaystyle \sum_{e\in E}p_e eEpe 就是算法选择的顶点的期望个数。因为每次选择一条边 e e e 时,就把它的一个端点加入到顶点覆盖中。

  • 接下来,考虑与一个顶点 v v v 相邻的边的概率 p e p_e pe 的和。

    δ ( v ) \delta(v) δ(v) 表示与顶点 v v v 相邻的边的集合,考虑 ∑ e ∈ δ ( v ) p e \displaystyle \sum_{e\in \delta(v)}p_e eδ(v)pe,这正是选择的与顶点 v v v 相邻的边的期望个数。设 S ( v ) S(v) S(v) 是选择的与顶点 v v v 相邻的边的随机变量,有 E x p ( ∣ S ( v ) ∣ ) = ∑ e ∈ δ ( v ) p e Exp(|S(v)|)=\displaystyle \sum_{e\in \delta(v)}p_e Exp(S(v))=eδ(v)pe。这个期望值最多是 2,因为每次选择 δ ( v ) δ(v) δ(v) 中的一条边,以 1 / 2 1/2 1/2 的概率用顶点 v v v 覆盖边 e e e,然后 δ ( v ) δ(v) δ(v) 中的所有边都被覆盖了,不会再有这个集合中的边被选择。为了使这个论证严密,用 E i E_i Ei 表示至少有 i i i 条与顶点 v v v 相邻的边被选择的事件。现在有以下不等式来表示选择的边的期望个数:
    E x p ( ∣ S ( v ) ∣ ) = ∑ i i P r o b ( E i − E i + 1 ) = ∑ i P r o b ( E i ) ≤ 1 + ∑ i > 1 2 i − 1 ≤ 2. Exp(|S(v)|)=\sum_i iProb(E_i-E_{i+1})=\sum_i Prob(E_i)\leq1+\sum_{i>1}2^{i-1}\leq2. Exp(S(v))=iiProb(EiEi+1)=iProb(Ei)1+i>12i12.
    不等式 P r o b ( E i ) ≤ 2 i − 1 Prob(E_i)≤2^{i−1} Prob(Ei)2i1 对于 I > 1 I>1 I>1 成立,因为每次选择与顶点 v v v 相邻的一条边后,以 1 / 2 1/2 1/2 的概率把 v v v 加入到顶点覆盖中。现在准备好了用期望的顶点覆盖的大小来限制最优解。设 S ∗ S^* S 是一个最优的顶点覆盖。
    ∑ e p e ≤ ∑ v ∈ S ∗ ∑ e ∈ δ ( v ) p e ≤ ∑ v ∈ S ∗ 2 = 2 ∣ S ∗ ∣ , \sum_e p_e\leq \sum_{v\in S*}\sum_{e\in \delta(v)}p_e\leq\sum_{v\in S*}2=2|S*|, epevSeδ(v)pevS2=2∣S,
    第一个不等式成立是因为 S ∗ S^* S 是一个顶点覆盖,所以第二个求和必须覆盖每一条边 e e e

综上,该算法是 最小规模顶点覆盖问题 2 2 2-近似算法。

E x p ( ∣ S ( v ) ∣ ) = ∑ e ∈ δ ( v ) p e Exp(|S(v)|)=\displaystyle \sum_{e\in \delta(v)}p_e Exp(S(v))=eδ(v)pe。(如果对每条边 e e e 都以概率 p e p_e pe 选择它,那么与顶点 v v v 相邻的边被选择的期望个数就是所有相邻边的概率之和。)

2. 负载均衡算法

问题描述

并行和分布式系统的 负载均衡算法 试图把一组计算任务分散到多台机器上。用这种方式,没有一台机器成为“热点”。如果能够进行某种集中的协调,那么负载可能被分散得近乎理想。如果任务来自各种不能协调的来源,那怎么办?正如我们在 13.10 节(参考教材)中看到的,一种可能的做法是把它们随机地分配给机器,并希望这种随机化能防止不均衡。显然,一般地这不能做得像集中解决那样理想,但它可能是相当有效的。现在我们打算分析 13.10 节(参考教材)中考虑的一种简单的负载均衡启发式算法的几个变形与推广。

假设有 k k k 台机器和 k k k 项要处理的任务。每一项任务被独立地随机分配给一台机器(每台机器的可能性相等)。

(a)设 N ( k ) N(k) N(k)表示没有接受到任务的机器的期望数,因而 N ( k ) / k N(k)/k N(k)/k 是无事可做的机器的期望比例。极限 l i m k → ∞ N ( k ) / k lim_{k→\infty}N(k)/k limkN(k)/k 是多少?证明你的答案。

(b)假设机器不能让剩余的任务排队等候,因而随机分配把一件以上的任务送给机器 M M M,那么 M M M 将做它接受到的第一项任务并拒绝其余的任务。设 R ( k ) R(k) R(k) 是被拒绝的任务的期望数,因而 R ( k ) / k R(k)/k R(k)/k 是被拒绝的任务的期望比例。极限 l i m k → ∞ R ( k ) / k lim_{k\rightarrow \infty}R(k)/k limkR(k)/k 是多少?证明你的答案。

(c)现在假设机器有稍微大一点的缓冲器,每一台机器能做它接受的前两项任务并拒绝其他更多的任务。设 R 2 ( k ) R_2(k) R2(k) 表示在这个规则下被拒绝的任务的期望数。极限 l i m k → ∞ R 2 ( k ) / k lim_{k→\infty}R_2(k)/k limkR2(k)/k 是多少?证明你的答案。

参考答案

在这里插入图片描述
在这里插入图片描述

解答

(a) 1 / e 1/e 1/e

给定一台机器 p p p,为了使其没有任务,每个任务必须分配给不同的机器。由于任务是随机均匀分配的,给定的任务 j j j 不被分配给 p p p 的概率是 ( 1 − 1 k ) (1 - \frac{1}{k}) (1k1),因此 p p p 没有被分配任何任务的概率是 ( 1 − 1 k ) k (1-\frac{1}{k})^k (1k1)k,因此没有任务的机器的期望数量是 N ( k ) = k ( 1 − 1 k ) k N(k) = k(1- \frac{1}{k})^k N(k)=k(1k1)k

因此 N ( k ) / k = ( 1 − 1 k ) k N(k)/k = (1 -\frac{1}{k})^k N(k)/k=(1k1)k,故 l i m k → ∞ N ( k ) / k = 1 / e lim_{k→\infty}N(k)/k = 1/e limkN(k)/k=1/e。这也说明,在极限下,没有任务的机器数量为 k / e k/e k/e

(b) 1 / e 1/e 1/e

注意到被拒绝的任务数量(用 N r e j N_{rej} Nrej 表示)等于总任务数 k k k 减去被接受的任务数 N a c c N_{acc} Nacc(即 N r e j = k − N a c c N_{rej} = k - N_{acc} Nrej=kNacc)。被接受的任务数等于 k k k 减去没有任务的机器数 N n o j o b N_{nojob} Nnojob,因为剩下的机器都会分配一个工作。因此 N r e j = k − N a c c = k − ( k − N n o j o b ) = N n o j o b N_{rej} = k - N_{acc} = k - (k - N_{nojob}) = N_{nojob} Nrej=kNacc=k(kNnojob)=Nnojob。因此问题(b)的答案与问题(a)的答案相同。

(c) 10.4 % 10.4\% 10.4%

这部分将涉及轻微的计算。

  • 由(a)知没有任务的机器数量是 k / e k/e k/e

  • 先计算只有一个任务的机器数量。给定一台机器 p p p。给定任务 j j j 被分配给 p p p 的概率是 1 / k 1/k 1/k,剩余任务不被分配给 p p p 的概率是 ( 1 − 1 k ) k − 1 (1-\frac{1}{k})^{k-1} (1k1)k1。最后,选择“给定”任务 j j j k k k 种选法。因此,只有一个任务被分配给该机器的概率是:

k 1 k ( 1 — 1 k ) k − 1 k\frac{1}{k}(1— \frac{1}{k})^{k-1} kk1(1—k1)k1

注意这也在极限 1 / e 1/e 1/e 内,因此只有一个任务的机器数量也是 k / e k/e k/e

  • 所以,剩下的机器均执行两个任务,机器数为 k − 2 k e k - \frac{2k}{e} ke2k

最终 k / e k/e k/e 台机器每台有一个任务,以及 k − 2 k e k - \frac{2k}{e} ke2k 台机器每台有两个任务。从 k k k(总工作数)中减去这个数量,
R 2 ( k ) = k − k e − 2 ( k − 2 k e ) = k ( 3 − e ) e . R_2(k) = k-\frac{k}{e} - 2(k-\frac{2k}{e})=\frac{k(3-e)}{e}. R2(k)=kek2(ke2k)=ek(3e).
因此, l i m k → ∞ R 2 ( k ) / k = 3 − e e = 10.4 % lim_{k→\infty}R_2(k)/k = \frac{3-e}{e}=10.4\% limkR2(k)/k=e3e=10.4%

3. MAX 3-SAT

题目描述

在 13.4 节(参考教材)我们设计了 M A X 3 − S A T MAX 3-SAT MAX3SAT 题的一个近似到 7/8 因子的近似算法,在那里我们假设每一个子句有与 3 个不相关联的项。现在要考虑一个类似的 MAX SAT 问题,给定变量集 X = { x 1 , … , x n } X = \{x_1, … , x_n\} X={x1,,xn} 上的一组子集 C 1 , … , C k C_1, … , C_k C1,,Ck,求一个真值赋值满足尽可能多的子句。每一个子句至少有一个项,一个子句中的所有变量是不同的,除此之外对子句的长度没有做任何假设,可能有一些子句有很多变量,而另一些可能只有一个变量。

(a)首先考虑我们用于 MAX 3-SAT 的随近算法,以概率 1/2 独立地一个量为真或假。证明这个随机赋值满足的期望子句数不小于 k / 2 k/2 k/2,即所有的子句中至少期望地有一半被满足。给出一个例子说明存在 MAX SAT 实例使得任何赋值满足的子句都不超过所有子句的一半。

(b)如果有一个只由一项成的子句(例如,仅由 x 1 , x ˉ 2 x_1,{\bar x_2} x1,xˉ2 构成的子句),那只有唯一的方法满足它:必须以适当的方式给对应的变量赋值。如果有两个子句,其中一个仅由 x i x_i xi 构成,而另一个仅由它的否定项 x ˉ i \bar x_i xˉi 构成,那么这是一个相当直接的矛盾。假设实例不含这种“冲突的子句”对,即没有变量 x i x_i xi 使得有一个子句 C = { x i } C=\{x_i\} C={xi},又有一个子句 C ′ = { x ˉ i } C'=\{\bar x_i \} C={xˉi},修改上面的随机算法把近似因子从 1/2 改进到 0.6,即修改算法使得被满足的期望子句数至少为 0.6 k 0.6k 0.6k

(c)试给一个一般 MAX SAT 题的多项式时间随机算法,使得算法满足的期望子句数不少于最大可能的 0.6。

(注意,根据部分(a)中的例子,存在不可能满足多于 k / 2 k/2 k/2 个子句的实例,这里的要点是仍可指望得到一个有效的算法,它能够期望地满足最优赋值能够满足的最大子句数的 0.6。)

参考答案

在这里插入图片描述
在这里插入图片描述

解答

(a)考虑一个具有 n n n 个变量的子句 C i C_i Ci。该子句不满足的概率为 1 2 m \frac{1}{2^m} 2m1,因此满足的概率为 1 − 1 2 m 1-\frac{1}{2^m} 12m1。最坏情况是当 C i C_i Ci 只有一个变量时,即 n = 1 n=1 n=1,此时子句被满足的概率为 1 2 \frac{1}{2} 21。由于有 k k k 个子句,被满足的子句的期望数量至少为 k 2 \frac{k}{2} 2k。考虑两个子句 x 1 x_1 x1 x ˉ 1 \bar x_1 xˉ1。显然只有其中一个可以被满足。

(b)对于出现在单变量子句中的变量,假设使变量满足子句的概率为 p ≥ 1 2 p \geq \frac{1}{2} p21。对于所有其他变量,概率与之前一样为 1 2 \frac{1}{2} 21。现在对于一个具有 n n n 个变量的子句 C i C_i Ci n ≥ 2 n \geq 2 n2,满足它的概率最差为 ( 1 − 1 2 n ) ≥ ( 1 − p 2 ) (1 - \frac{1}{2^n}) \geq (1 - p^2) (12n1)(1p2),因为 p ≥ 1 2 p \geq \frac{1}{2} p21。现在要解出 p p p,使所有子句都满足,解方程 p = 1 − p 2 p = 1 - p^2 p=1p2 得到 p ≈ 0.62 p \approx 0.62 p0.62。因此,预计满足的子句数量为 0.62 n 0.62n 0.62n

(c)令总子句数为 k k k。对于每对单一变量冲突的子句,即 x i x_i xi x ˉ i \bar x_i xˉi,从子句集中移除其中一个。假设移除了 m m m 个子句,那么最多可以满足的子句数为 k − m k - m km。现在将之前问题中描述的算法应用于最初没有冲突的 k − 2 m k - 2m k2m 个子句,以这种方式满足子句的期望数为 0.62 ∗ ( k − 2 m ) 0.62 * (k-2m) 0.62(k2m)。除此之外,还可以满足 2 m 2m 2m 个冲突子句中的 m m m 个子句,因此满足的子句数为 0.62 ∗ ( k − 2 m ) + m ≥ 0.62 ∗ ( k − m ) 0.62 * (k - 2m) + m \geq 0.62 * (k - m) 0.62(k2m)+m0.62(km),这是期望的目标。因为每个子句只考虑一次,所以该算法在变量和子句数目上是多项式级别的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Pico和MicroPython点亮ws2812彩色灯带

基于Pico和MicroPython点亮ws2812彩色灯带 文章目录 基于Pico和MicroPython点亮ws2812彩色灯带IntroductionPracticeConclusion Introduction 点亮发光的LED灯是简单有趣的实验,点亮多个ws2812小灯串联起来的灯带,可对多个彩色小灯进行编程,…

上位机图像处理和嵌入式模块部署(mcu 项目1:上位机编写)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面,我们说过要做一个报警器。如果只是简单做一个报警器呢,这个基本上没有什么难度。这里,我们就适当提高一下…

敏捷开发笔记(第9章节)--开放-封闭原则(OCP)

目录 1:PDF上传链接 9.1 开放-封闭原则(OCP) 9.2 描述 9.3 关键是抽象 9.3.1 shape应用程序 9.3.2 违反OCP 糟糕的设计 9.3.3 遵循OCP 9.3.4 是的,我说谎了 9.3.5 预测变化和“贴切的”结构 9.3.6 放置吊钩 1.只受一次…

qt实现打开pdf(阅读器)功能用什么库比较合适

关于这个问题,网上搜一下,可以看到非常多的相关博客和例子,可以先看看这个总结性的博客(https://zhuanlan.zhihu.com/p/480973072) 该博客讲得比较清楚了,这里我再补充一下吧(qt官方也给出了一些…

深度之眼(二十八)——神经网络基础知识(三)-卷积神经网络

文章目录 一、前言二、卷积操作2.1 填充(padding)2.2 步长2.3 输出特征图尺寸计算2.4 多通道卷积 三、池化操作四、Lenet-5及CNN结构进化史4.1 Lenet-5 一、前言 卷积神经网络–AlexNet(最牛)-2012 Lenet-5-大规模商用(1989) 二、…

合并排序的数组

题目链接 合并排序的数组 题目描述 注意点 A的末端有足够的缓冲空间容纳BA和B都是排序的 解答思路 最初想到的是双指针,从小到大找到合并B时应该A相应位置应该插入的元素,因为在插入的过程中B的元素会替换A原有位置的元素,所以需要先将A…

YOLOv8目标检测在RK3588部署全过程

一,前言 这是一个关于从电脑安装深度学习环境到实现YOLOv8目标检测在RK3588上部署的全过程。 本人配置: 1,一台笔记本 2,一个香橙派5s 二,深度学习环境配置 2.1 安装anaconda 使用清华镜像源下载https://mirror…

巴黎成为欧洲AI中心 大学开始输出AI创始人

来自Dealroom 的数据显示,在欧洲和以色列AI创业公司中,法国的AI创业公司资金最充裕。Mistral、Owkin、Hugging Face等法国企业已经融资23亿美元,比英国、德国AI创业公司都要多。 一名大学生走出校门凭借聪明才智和一个黄金点子成为富豪&#…

使用matlab开发stm32总结,stm32-matlab常见的问题处理以及报错合集

1,问题:本来是好的,突然编译运行报错,说是确少包, 解决方案:重启以后好了 2,有完美的马鞍波,为什么不能够转动呢? 原因是我这里模型的问题,我计算出来的是占…

考试选择题改写代码到编译器正确运行

1. 尝试变换形式,如果*p &a>>>>>>>不正确>>>>>>>>尝试先定义指针p>>>>>再写 pa 或者 *p &a[0] p所指向的是第一个首元素的地址 >>>>>>>之后最快的方式是把四个选项一…

Python 面试【★★★★】

欢迎莅临我的博客 💝💝💝,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

计算神经网络中梯度的核心机制 - 反向传播(backpropagation)算法(1)

计算神经网络中梯度的核心机制 - 反向传播(backpropagation)算法(1) flyfish 链式法则在深度学习中的主要应用是在反向传播(backpropagation)算法中。 从简单的开始 ,文本说的就是链式法则 R …

【Stable Diffusion】创意与科技的完美结合:AI绘画副业让美术老师月入2w+

前言 艺术与科技一直以来都是两个看似独立的领域,但如今,随着人工智能的发展,这两个领域正迎来一次前所未有的融合。在这个数字化时代,AI绘画成为了一项引人注目的副业,为美术老师们带来了新的机遇和收入。 儿童画 …

650V 1200V 碳化硅MOS TO247 封装 内阻30毫欧 40 80毫欧

650V 1200V 碳化硅MOS TO247 封装 内阻30毫欧 40 80毫欧

matlab 计算导数

边界提取 一、算法原理1、主要函数2、参考文献二、代码实现三、结果展示四、参考链接本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 1、主要函数 Y = diff(X)计算沿大小不等于 1 的第一个数组维度的 X X…

计算机网络 —— 基本概念

基本概念 1. 通信协议2. 面向连接 v.s. 面向无连接3. 电路交换 v.s. 分组交换4. 单工通信 v.s. 双工通信 1. 通信协议 通信协议就是计算机与计算机之间通过网络实现通信时事先达成的一种“约定”。这种“约定”使那些由不同厂商的设备、不同的CPU 以及不同的操作系统组成的计算…

黑芝麻科技A1000简介

文章目录 1. A1000 简介2. 感知能力评估3. 竞品对比4. 系统软件1. A1000 简介

pdf合并,pdf合并成一个pdf,pdf合并在线网页版

在处理pdf文件的过程中,有时我们需要将多个pdf文件合并成一个pdf文件。作为一名有着丰富计算机应用经验的技术博主,我将为您详细介绍如何将多个pdf文件合并成一个pdf文件。 pdf合并方法:使用, “轻云处理pdf官网” 打开 “轻云处…

有序充电在新能源行业的前景与应用

作为新能源汽车的基础动力装置,交流充电桩也是可以促使新能源汽车正常行驶的关键内容。近年来我国新能源汽车的增长速度出现明显的上升趋势,但是其充电桩的发展还比较缓慢。目前在充电桩系统设计期间仍存在一些问题,主要表现在充电设施短缺、…

负载均衡器有什么用?

负载均衡器有什么用? 负载均衡器是一种在多个服务器之间分配网络或应用程序流量的设备或软件应用程序。其主要目的是确保没有一台服务器承担过多的需求,从而提高应用程序的响应速度和可用性。 在计算机发展的早期,负载均衡是一个手动过程。…