algorithm - 二次时间顶点覆盖验证
问题描述
假设给定一个无向图
G
,其n
顶点和m
边由n x n
邻接矩阵表示A
,并且还给您一个顶点子集S
(由大小为 的数组表示m
)。你如何检查是否S
是G
具有二次时间和空间复杂度的顶点覆盖?
根据顶点覆盖的定义,我知道我们要求每条边都必须与包含在S
.
我可以很容易地想出一个三次算法:迭代邻接矩阵;每个1
代表一条边(u, v)
。检查u
是否v
在S
. 如果没有,答案是否定的。如果我们到达邻接矩阵的末尾,答案是肯定的。
但我怎样才能O(n^2)
及时做到这一点?我想到目前为止我所做的唯一真正的“观察”是,如果我们已经在S
. 但是,这对我帮助不大。
有人可以帮助我(或指出我正确的方向)吗?
谢谢
解决方案
构造一个数组T
,它是所有不在的元素的位置S
。
进而:
for i in T:
for j in T:
if A[i][j] == 1:
return False
return True
推荐阅读
- verilog - 在verilog中表示二进制值问题的verilog
- javascript - 是否可以让 HTML 滑块的初始值取决于变量?
- webpack - 如何让 webpack 不解析 css 文件中的路径?
- javascript - 为什么我不能使用 Express 提供静态文件?
- shell - Runuser 未返回预期结果
- d3.js - 基于 vega lite API 的具有定量和标称属性的交叉过滤器
- java - Java:无法获得“好的”随机索引号
- sql - 尝试将两个表连接在一起以使 unit_price 根据日期而变化
- java - 我无法使用 Java PDFWriter 将₺(土耳其里拉)图标添加到文件中
- python - Raspberry Pi 麦克风出现语音识别错误