算法设计与分析--近似算法作业及答案

news2024/11/26 15:49:58

  • 近似算法作业
    • 题目 1 k-center 近似算法
      • 题目描述
      • 参考答案
      • 解答
    • 题目 2 均衡负载算法
      • 题目描述
      • 参考答案
      • 解答
    • 题目 3 多项式归约
      • 题目描述
      • 参考答案
      • 解答

近似算法–徐小华

近似算法作业

题目 1 k-center 近似算法

题目描述

问题 1:假设给定 n n n 个指定的城市在一个平面图上,想要在不同的城市选择 k k k 个城市建立 k k k 个仓库,目标是最小化每个城市到最近仓库的最大距离。这意味着找到一组 k k k 个顶点的集合,任意点到其集合中顶点的最大距离最小。给定一个算法来确定这 k k k 个顶点的位置,该算法最多是最优解的 3 3 3 倍,并且运行时间是 O ( n ) O(n) O(n)

参考答案

在这里插入图片描述

解答

【贪心算法】反复选择 离任何现有中心最远的 site 作为下一个中心,其中,Center 必须在 site 中选择

在这里插入图片描述

k = 1 k=1 k=1 时,即 第一个中心 Center随机 从所有 site 中选择。

【时间复杂度】这个算法的运行时间是 O ( n k ) O(nk) O(nk)

  • 因为每次选择新的中心需要遍历所有的点,计算它们到已有中心的距离,然后找出最大的一个。
  • 这个过程需要重复 k k k 次,所以总的时间复杂度是 O ( n k ) O(nk) O(nk)

如果 k k k 是一个常数,那么这个算法的运行时间就是 O ( n ) O(n) O(n)

【3-近似 证明】

假设 r ( C ∗ ) < 1 2 r ( C ) r(C^*) < \frac{1}{2}r(C) r(C)21r(C)

对于 C C C 中的每个site c i c_i ci,考虑其周围半径为 1 2 r ( C ) \frac{1}{2}r(C) 21r(C) 的球,

(1) 如果一个球里面没有 C ∗ C^* C 中的中心 c ∗ c^* c,那么 c i c_i ci 就不在 C ∗ C^* C 中任何中心的 1 2 r ( C ) \frac{1}{2}r(C) 21r(C) 内,这与 r ( C ∗ ) < 1 2 r ( C ) r(C^*)<\frac{1}{2}r(C) r(C)21r(C) 的假设相矛盾,因此每个球 至少有一个 c ∗ c^* c

(2) 这些球是不相交的,每个球至少包含一个 c ∗ c^* c,并且 ∣ c ∣ = ∣ c ∗ ∣ |c|=|c^*| c=c,所以每个球 至多有一个 c ∗ c^* c

由 (1)、(2) 可知,每个球正好有一个 c i ∗ c_i^* ci

c i c_i ci 为与 c i ∗ c^*_i ci 配对的 site,考虑 C ∗ C^* C 中的任何 site s s s 及其最近的中心 c i ∗ c_i^* ci

s s s c i c_i ci 的距离可以用 三角不等式 分解为 s s s c i ∗ c_i^* ci 的距离加上 c i ∗ c_i^* ci c i c_i ci 的距离,而这两个距离都不会超过 r ( C ∗ ) r(C^*) r(C),因为 c i ∗ c_i^* ci s s s c i c_i ci 最近的中心,因此

d i s t ( s , C ) ≤ d i s t ( s , c i ) ≤ d i s t ( s , c i ∗ ) + d i s t ( c i ∗ , c i ) ≤ 2 r ( C ∗ ) dist(s, C) ≤ dist(s, c_i) ≤ dist(s, c_i^*) + dist(c_i^*, c_i) ≤ 2r(C^*) dist(s,C)dist(s,ci)dist(s,ci)+dist(ci,ci)2r(C)

r ( C ) ≤ 2 r ( C ∗ ) r(C) ≤ 2r(C^*) r(C)2r(C),这与假设矛盾,因此 r ( C ∗ ) ≥ 1 2 r ( C ) r(C^*) ≥ \frac{1}{2}r(C) r(C)21r(C),即 r ( C ) ≤ 2 r ( C ∗ ) r(C) ≤ 2r(C^*) r(C)2r(C),那么 r ( C ) ≤ 3 r ( C ∗ ) r(C) ≤ 3r(C^*) r(C)3r(C)

所以贪心算法是 Center selection problem 的 2-近似 算法,也是 3-近似 算法。

题目 2 均衡负载算法

题目描述

问题 2:假设有一个由 m m m 个慢速机器和 k k k 个快速机器。快速机器在单位时间内执行的工作量是慢速机器的两倍。现在你有一组 n n n 个作业,每个作业 i i i 需要时间 t i t_i ti 在慢速机器上处理,在快速机器上处理时间只需要 t i / 2 t_i/2 ti/2。你想将每个作业分配给一台机器,目标是最小化完成时间。给出一种 O ( n ) O(n) O(n) 时间的 3 3 3 倍近似算法。

参考答案

在这里插入图片描述

解答

【算法】

当每个作业到达时,将其放在当前最快结束的机器(需要考虑机器的速度)上。这是一个3-近似 算法。

【近似因子证明】

为了证明该算法的近似度,首先证明最优 makespan T ∗ T^* T 的一些下界。

  • T ∗ ≥ 1 2 t i . \displaystyle T^*\geq \frac{1}{2} t_i. T21ti.

证明:必定存在一台机器处理最耗时的作业。

  • T ∗ ≥ ∑ i t i m + 2 k . \displaystyle T^*\geq\frac{\sum_it_i}{m+2k}. Tm+2kiti.

证明:所有作业的总时间为 ∑ i t i \sum_i t_i iti。设
t = ∑ i t i m + 2 k t=\frac{\sum_i t_i}{m+2k} t=m+2kiti
假设作业可以分配给所有机器,使得每台慢速机器都有一组求和小于 t t t 的作业,而每台快速机器都有一群求和小于 2 t 2t 2t 的作业,那么就会得到
∑ i t i < m t + 2 k t = ∑ i t i \sum_it_i<mt+2kt=\sum_it_i iti<mt+2kt=iti
矛盾。因此,一些机器至少运行 t t t 时间的作业,因此
T ∗ ≥ ∑ i t i m + 2 k T^*\geq\frac{\sum_it_i}{m+2k} Tm+2kiti
考虑瓶颈机器 j j j 的负载 T [ j ] T[j] T[j],令 k k k 是机器 j j j 上的最后一个作业,安排作业 k k k 时,机器 j j j 的负载是最小的,如果该机器为快机器,则安排作业 k k k 前的负载为
T [ j ] − t k 2 ≤ ∑ i t i m + 2 k ≤ T ∗ T[j]-\frac{t_k}{2} \leq \frac{\sum_i t_i}{m+2k}\leq T^* T[j]2tkm+2kitiT
那么,
T = T [ j ] = ( T [ j ] − t k 2 ) + t k 2 ≤ T ∗ + T ∗ = 2 T ∗ . \begin{aligned} T=T[j]&=(T[j]-\frac{t_k}{2})+\frac{t_k}{2}\\ &\leq T^*+T^*\\ &=2T^*. \end{aligned} T=T[j]=(T[j]2tk)+2tkT+T=2T.
如果该机器为慢机器,则安排作业 k k k 前的负载为
T [ j ] − t k ≤ ∑ i t i m + 2 k ≤ T ∗ T[j]-t_k \leq \frac{\sum_i t_i}{m+2k}\leq T^* T[j]tkm+2kitiT
那么,
T = T [ j ] = ( T [ j ] − t k ) + t k ≤ T ∗ + 2 T ∗ = 3 T ∗ . \begin{align*} T=T[j]&=(T[j]-t_k)+t_k\\ &\leq T^*+2T^*\\ &=3T^*. \end{align*} T=T[j]=(T[j]tk)+tkT+2T=3T.

【时间复杂度说明】

算法的时间复杂度是 O ( n l o g n ) O(nlogn) O(nlogn),这是因为每次作业到达时,需要找到当前最快结束的机器,这需 O ( l o g n ) O(logn) O(logn) 的时间(如果使用优先队列或堆来存储机器)。因此,对于 n n n 个作业,总的时间复杂度是 O ( n l o g n ) O(nlogn) O(nlogn)

题目 3 多项式归约

题目描述

问题 3:证明以下命题。

命题 1: T S P TSP TSP 问题是 N P − h a r d NP-hard NPhard 问题

命题 2:最大加权独立集问题是 N P − h a r d NP-hard NPhard 问题

参考答案

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

解答

命题 1 证明:

  • TSP 问题是指给定一系列城市和每对城市之间的距离,求解经过每一座城市一次并回到起始城市的最短回路。
  • 哈密顿回路问题是指给定一个无向图,判断是否存在一条经过每个顶点一次并回到起点的回路。

要证明 TSP 问题是 NP−hard 问题,利用归约,将哈密顿回路问题转化为 TSP 问题,从而说明 TSP 问题的难度不低于哈密顿回路问题。

具体步骤如下:

  • 首先,给定一个哈密顿回路问题的实例,即一个无向图 G = ( V , E ) G=(V,E) G=(V,E),其中 V V V 是顶点集, E E E 是边集。

  • 然后,构造一个 TSP 问题的实例,即一个城市集合 C = V C=V C=V ,和一个距离矩阵 D D D,其中 D i j D_{ij} Dij 表示城市 i i i 和城市 j j j 之间的距离,定义如下:

    • 如果 ( i , j ) ∈ E (i,j)∈E (i,j)E,则 D i j = 1 D_{ij}=1 Dij=1
    • 如果 ( i , j ) ∉ E (i,j) \notin E (i,j)/E,则 D i j = n + 1 D_{ij}=n+1 Dij=n+1,其中 n = ∣ V ∣ n=∣V∣ n=∣V 是顶点的个数。
  • 最后,证明这个转化是有效的,即如果 G G G 有一个哈密顿回路,那么 C C C 有一个长度为 n n n 的最短回路;反之,如果 C C C 有一个长度为 n n n 的最短回路,那么 G G G 有一个哈密顿回路。

  • 充分性证明:如果 G G G 有一个哈密顿回路,那么可以沿着这个回路访问每个城市一次,并返回出发城市,这样的回路的长度为 n n n,因为每条边的距离都是 1;

  • 必要性证明:如果 C C C 有一个长度为 n n n 的最短回路,那么可以根据这个回路构造一个哈密顿回路,这样的回路一定存在,因为如果有任何一条边的距离大于 1,那么回路的长度就会超过 n n n

可证,由于哈密顿回路是 N P − h a r d NP-hard NPhard 问题,所以 T S P TSP TSP 问题是 N P − h a r d NP-hard NPhard 问题。

命题 2 证明:

为了证明最大加权独立集是 NP-hard,我们将其约化为最大独立集(已知是 NP-hard 的问题)。

假设我们有一个图 G = ( V , E ) G = (V, E) G=(V,E) 和一个整数 k k k,定义权重函数 w : V → R w: V \rightarrow \mathbb{R} w:VR 如下:
∀ v ∈ V : w ( v ) = 1 , \forall v \in V:w(v)=1, vV:w(v)=1,
约化的结果是
⟨ G ′ = ( V , E , w ) , k ⟩ . \langle G'=(V,E,w),k\rangle. G=(V,E,w),k.
如果图 G G G有一个大小至少为 k k k 的独立集 S S S,那么 S S S是图 G ′ G' G上的独立集,并且
∑ v ∈ S w ( v ) = ∑ v ∈ S 1 = ∣ S ∣ ≥ k . \sum_{v \in S} w(v) = \sum_{v \in S}1 = |S| \geq k. vSw(v)=vS1=Sk.
因此, G ′ G' G 有一个顶点权重之和至少为 k k k 的独立集。

相反地,如果图 G ′ G' G 有一个独立集 S ′ S' S,满足
∑ v ∈ S ′ w ( v ) ≥ k , \sum_{v \in S'}w(v) \geq k, vSw(v)k,
那么,可以看出 S ′ S' S 也是图 G G G 上的独立集,并且
∣ S ′ ∣ = ∑ v ∈ S ′ 1 = ∑ v ∈ S ′ w ( v ) ≥ k . |S'|=\sum_{v \in S'}1 = \sum_{v \in S'}w(v)\geq k. S=vS1=vSw(v)k.
因此,图 G G G 有一个大小至少为 k k k 的独立集。

这样,我们证明了如果我们能解决最大加权独立集问题,就能解决最大独立集问题;反之亦然。因此,最大加权独立集问题是 NP-hard 的。

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

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

相关文章

findfont: Generic family ‘sans-serif‘ not found because none of the ...: SimHei

警告过程 python代码在使用matplotlib画图时&#xff0c;如果在title&#xff0c;xlabel&#xff0c;ylabel中出现了中文&#xff0c;则会出现字体警告&#xff0c;中文字符显示为方框 例如代码&#xff1a; # matplotlib画图# 设置色带plt.imshow(data, cmapplt.cm.YlGn) #…

Python基于逻辑回归分类模型、决策树分类模型、随机森林分类模型和XGBoost分类模型实现乳腺癌分类预测项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 在当今医疗健康领域&#xff0c;乳腺癌作为威胁女性健康的主要恶性肿瘤之一&#xff0c;其早期诊断与精…

仓库管理系统16--入库管理

原创不易&#xff0c;打字不易&#xff0c;截图不易&#xff0c;多多点赞&#xff0c;送人玫瑰&#xff0c;留有余香&#xff0c;财务自由明日实现。 1、创建物资入库用户控件 <UserControl x:Class"West.StoreMgr.View.InStoreView"xmlns"http://schema…

市场拓展招聘:完整指南

扩大招聘业务会给你带来很多挑战&#xff0c;更不用说你已经在处理的问题了。助教专业人士每周花近13个小时为一个角色寻找候选人。此外&#xff0c;客户的需求也在不断变化&#xff0c;招聘机构之间的竞争也在加剧。毫无疑问&#xff0c;对增长有战略的方法会有很大的帮助。一…

RocketMq源码解析九:刷盘机制及过期文件删除

一、刷盘机制 刷盘策略在不同时间进行刷写磁盘。RocketMQ的存储是基于JDK NIO的内存映射机制(MappedByteBuffer)的,消息存储首先将消息追加到内存,再根据配置的刷写磁盘 同步刷盘表示消息追加到内存后,立即将数据刷写到文件系统中。代码的调用链如下: submi…

web使用cordova打包Andriod

一.安装Gradel 1.下载地址 Gradle Distributions 2.配置环境 3.测试是否安装成功 在cmd gradle -v 二.创建vite项目 npm init vitelatest npm install vite build 三.创建cordova项目 1.全局安装cordova npm install -g cordova 2. 创建项目 cordova create cordova-app c…

学习过程中遇到的 部分问题及解决办法

1.安装build wheel时报错&#xff1a; The detected CUDA version (12.1) mismatches the version that was used to compile PyTorch (11.7). Please make sure to use the same CUDA versions. 由于cuda版本和 当前虚拟环境中的pytorch-cudatoolkit版本不同&#xff0c; 解…

梦想CAD二次开发

1.mxdraw简介 mxdraw是一个HTML5 Canvas JavaScript框架&#xff0c;它在THREE.js的基础上扩展开发&#xff0c;为用户提供了一套在前端绘图更为方便&#xff0c;快捷&#xff0c;高效率的解决方案&#xff0c;mxdraw的实质为一个前端二维绘图平台。你可以使用mxdraw在画布上绘…

【系统架构设计师】五、计算机网络(概念|通信技术|网络技术)

目录 一、计算机网络概念 二、通信技术 三、网络技术 3.1 局域网(LAN) 3.1.1 局域网拓扑结构 3.1.2 局域网协议 3.2 无线局域网(WLAN) 3.3 广域网(WAN) 3.4 城域网&#xff08;MAN) 3.5 移动通信网 四、组网技术 4.1 OSI七层模型 4.1.1 交换机 4.1.2 路由器 4.2…

idea Error running ‘Application‘

1、Error running ‘Application’ Error running ApplicationError running Application. Command line is too long.Shorten the command line via JAR manifest or via a classpath file and rerun.找到 .idea/libraies/workspace.xml 中的 PropertiesComponent 属性&#…

python数据分析与可视化二

公共部分 # 引入数据分析工具 Pandas import pandas as pd # 引入数据可视化工具 Matplotlib import matplotlib.pyplot as plt # 引入科学计算库numpy import numpy as np from scipy import stats #解决输出时列名对齐问题 pd.set_option(display.unicode.east_asian_wid…

《数据结构与算法基础 by王卓老师》学习笔记——2.2线性表的案例引入

案例一&#xff1a;一元多项式的运算 案例二&#xff1a;稀疏多项式的运算 案例三&#xff1a;图书信息管理系统 总结

慢动作视频怎么制作?5种方法,轻松制作慢动作视频

在短视频风靡的当下&#xff0c;慢动作视频凭借其独特的视觉效果和引人入胜的节奏感&#xff0c;成为了吸引观众眼球的利器。你是否也想知道如何制作这种令人心动的慢动作视频呢&#xff1f;下面教大家5种能够制作出慢动作视频的方法&#xff0c;一起来学习下吧。 方法一&#…

Nginx反向代理实现Vue跨域注意事项

1、通过搜索引擎访问Nginx官网——免费使用——NGINX开源版(免费下载)或者通过以下链接直接访问Nginx下载页面下载对应的版本(下载页面)。以下以1.24.0为例 2、修改nginx的配置文件&#xff0c;在conf文件夹下&#xff0c;文件名为nginx.conf&#xff1b;以下是我修改完的配置…

2024我们该学习大模型吗?

一、引言 在快速变化的科技行业中&#xff0c;人工智能&#xff08;AI&#xff09;大模型已成为研究和应用的热点。随着AI技术的不断进步&#xff0c;特别是在自然语言处理、计算机视觉和机器学习平台等领域&#xff0c;许多专业人士开始将目光投向AI大模型的开发和应用。 二…

MobPush iOS端海外推送最佳实现

推送注册 在AppDelegate里进行SDK初始化&#xff08;也可以在Info.plist文件中进行AppKey&#xff0c;AppSecret的配置&#xff09;并对通知功能进行注册以及设置推送的环境和切换海外服务器等&#xff0c;参考如下步骤代码&#xff1a; <span style"background-colo…

[漏洞复现] MetInfo5.0.4文件包含漏洞

[漏洞复现] MetInfo5.0.4文件包含漏洞 MetInfo5.0.4 漏洞代码审计 漏洞出现在about/index.php中&#xff0c;因为利用了动态地址&#xff0c;所以存在漏洞。 漏洞检查语句&#xff08;&#xff01;192.168.109.100是我的服务器ip&#xff0c;需要换成自己的&#xff09;&…

[BUUCTF从零单排] Web方向 02.Web入门篇之『常见的搜集』解题思路(dirsearch工具详解)

这是作者新开的一个专栏《BUUCTF从零单排》&#xff0c;旨在从零学习CTF知识&#xff0c;方便更多初学者了解各种类型的安全题目&#xff0c;后续分享一定程度会对不同类型的题目进行总结&#xff0c;并结合CTF书籍和真实案例实践&#xff0c;希望对您有所帮助。当然&#xff0…

jupyter安装及使用

引言 之前安装了anaconda&#xff0c;然后conda的环境管理里面就有jupyter&#xff0c;但是我一直没用过。 但是我用过colab&#xff0c;从使用体验上来说&#xff0c;非常相似&#xff0c;这次给服务器装了一个jupyter&#xff0c;然后我本地连接远程的来用&#xff0c;还挺…

一种502 bad gateway nginx/1.18.0的解决办法

背景:上线的服务突然挂掉了 step1&#xff0c;去后端日志查看&#xff0c;发现并无异常&#xff0c;就是请求无法被接收 step2&#xff0c;查看了nginx的错误日志&#xff0c;发现该文件为空 step3&#xff0c;查看了niginx的运行日志&#xff0c;发现了以下问题 [error] 38#…