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

  • 近似算法作业
    • 题目 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.mzph.cn/news/862524.shtml

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

相关文章

大模型ReAct:思考与工具协同完成复杂任务推理

ReAct: Synergizing Reasoning and Acting in Language Models Github&#xff1a;https://github.com/ysymyth/ReAct 一、动机 人类的认知通常具备一定的自我调节&#xff08;self-regulation&#xff09;和策略制定&#xff08;strategization&#xff09;的能力&#xff0…

vue 代理

一、常用的发送一个ajax请求&#xff1a; 1、xhr new XMLHttpRequest(),真正开发中不常用 2、jq&#xff0c;jq主要功能是获取dom&#xff0c;周边才是请求接口 3、axios&#xff08;大名鼎鼎的&#xff09; axios.get("url").then(response>{},error>{} )4、…

Python应用开发——30天学习Streamlit Python包进行APP的构建(11)

st.bokeh_chart 显示互动式虚化图。 Bokeh 是 Python 的一个图表库。此函数的参数与 Bokeh 的 show 函数的参数非常接近。有关 Bokeh 的更多信息,请访问 https://bokeh.pydata.org。 要在 Streamlit 中显示 Bokeh 图表,请在调用 Bokeh 的 show 时调用 st.bokeh_chart。 Fu…

二叉树的方法

目录 一、二叉树的定义 ​编辑 二、二叉树的创建 三、二叉树的遍历 1、前序遍历 2、中序遍历 3、后序遍历 4、层序遍历 四、二叉树遍历方法的使用 五、二叉树的操作 1、节点的个数 2、叶子节点的个数 3、第k层节点的个数 4、二叉树的高度 5、检查值为value的元素…

java生成excel,uniapp微信小程序接收excel并打开

java引包&#xff0c;引的是apache.poi <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.3</version></dependency> 写一个测试类&#xff0c;把excel输出到指定路径 public s…

快20倍还便宜 NVIDIA GPU的“掘墓人”出现了?

芯片初创公司Etched近日宣布推出了一款针对 Transformer架构专用的AISC芯片 “Sohu”&#xff0c;并声称其在AI大语言模型&#xff08;LLM&#xff09;推理性能方面击败了NVIDIA最新的B200 GPU&#xff0c;AI性能达到了H100的20倍。这也意味着Sohu芯片将可以大幅降低现有AI数据…

精密机器中的交叉导轨负荷与容许负荷的差异!

交叉导轨的设计和制造过程中&#xff0c;负荷及容许负荷是至关重要的参数&#xff0c;只有准确计算出交叉导轨的载荷&#xff0c;才能保证交叉导轨的稳定性和使用寿命。 负荷和容许载荷是两个不同的参数&#xff0c;那这两者的有什么差异呢&#xff1f; 交叉导轨的负荷是指其承…

微信群被恶意举报封了加新群的看这里

由于近期太忙&#xff0c;有时候手机被儿子拿玩看动漫了&#xff0c;被误删或是误踢的朋友说声抱歉。 感谢大家的理解和支持。

HarmonyOS Next开发学习手册——通过startAbilityByType拉起垂类应用

使用场景 开发者可通过特定的业务类型如导航、金融等&#xff0c;调用startAbilityByType接口拉起对应的垂域面板&#xff0c;该面板将展示目标方接入的垂域应用&#xff0c;由用户选择打开指定应用以实现相应的垂类意图。垂域面板为调用方提供统一的安全、可信的目标方应用&a…

REST API 中的 HTTP 请求参数

当我们在谈论现代 Web 开发时&#xff0c;REST API (Representational State Transfer Application Programming Interface) 扮演着至关重要的角色。它允许不同的系统以一种简洁且高效的方式进行通信。HTTP 请求参数是控制此通信流程中数据如何被发送和接收的重要组成部分。 H…

vue2使用wangEditor5搭建模拟文档的编辑器快速集成

如图 1、下载依赖 2、elm引入&#xff08;可省略&#xff09; main.js 或者 按需引入 3、cv <template><div style"background: #f1f3f4"><div style"width: 100%; height: 42px"><!-- 工具栏 --><Toolbarid"tool-conta…

AI产品经理需要懂的算法和模型

本篇希望以精准推荐模型为案例通过全面的撰写将AI产品经理需要懂的算法和模型进行了系统的入门讲解。 一个产品经理经常疑惑的概念&#xff1a; 算法和模型的关系&#xff0c;产品经理懂得解决问题时将问题抽象为模型&#xff0c;对模型求解用算法&#xff0c;没有谁大谁小&a…

博睿数据受邀出席GOPS全球运维大会北京站,分享《一体化可观测数据模型和AIOps的融合实践》

2024年6月28日&#xff0c;第二十三届 GOPS 全球运维大会暨 XOps 技术创新峰会在北京顺利召开。大会为期2天&#xff0c;侧重 BizDevOps、XOps、DevOps、持续测试、SRE、可观测性、云原生等热门技术领域。并特别设置大模型运维、银行/证券数字化转型、平台工程、DevOps/AIOps 最…

上海六十中学多功能气膜馆项目:轻空间全速推进

项目进展捷报频传 上海六十中学多功能气膜馆项目土建工作已基本完工&#xff0c;今天轻空间团队正式进场&#xff0c;展开气膜部分的施工。我们将为上海六十中学打造一个现代化、环保、高效的多功能气膜馆&#xff0c;提供优质的运动和活动场所。 现场施工一片繁忙 在施工现场&…

【uniapp】HBuilderx中uniapp项目运行到微信小程序报错Error: Fail to open IDE

HBuilderx中uniapp项目运行到微信小程序报错Error: Fail to open IDE 问题描述 uniapp开发微信小程序&#xff0c;在HBuilderx中运行到微信开发者工具时报错Error: Fail to open IDE 解决方案 1. 查看微信开发者工具端服务端口是否开放 打开微信开发者工具选择&#xff1…

onnx模型转rknn到部署

简介 最近开始用3568的板子&#xff0c;之前是在用3399&#xff0c;cpu的话3399比3568强&#xff0c;但是3568有1T的npu算力&#xff0c;所以模型移植过来用npu使用&#xff0c;之前用ncnn感觉太慢了&#xff0c;rk的npu使用没有开源&#xff0c;所以没法兼容&#xff0c;只能跑…

Redis集群部署合集

目录 一. 原理简述 二. 集群配置​​​​​​​ 2.1 环境准备 2.2 编译安装一个redis 2.3 创建集群 2.4 写入数据测试 实验一&#xff1a; 实验二&#xff1a; 实验三&#xff1a; 实验四&#xff1a; 添加节点 自动分配槽位 提升节点为master&#xff1a; 实验…

操作系统之《死锁与银行家算法》【知识点+详细解题过程】

知识点&#xff1a; 1、什么是死锁&#xff1f;&#xff08;别名"三角恋"&#xff0c;我喜欢你你喜欢他他喜欢我&#xff0c;明明都单身但是就是‘占有’不了&#xff09; 一组进程中&#xff0c;每个进程都无限等待被该组进程中另一进程所占有的资源,因而永远无法…

“AI+”时代,群核科技进化成了家居设计打工人理想的样子

6月&#xff0c;2024世界智能产业博览会上&#xff0c;人工智能大模型展团以“AI大模型驱动新质生产力”为主题&#xff0c;各家企业纷纷提到了基于不同行业场景的应用。 这透露出当前的行业发展趋势强调大模型落地核心行业&#xff0c;产生业务价值。其中&#xff0c;“AI图像…

软考《信息系统运行管理员》-1.4 常见的信息系统

1.4 常见的信息系统 常见的信息系统综述 财务系统 财务信息系统会计信息系统 办公自动化系统业务处理系统生产管理系统ERP系统客户关系管理系统人力资源系统 会计信息系统 主要任务是保证记账的正确性。 订单处理子系统库存子系统会计应收/应支系统总账子系统 财务信息系…