某些软件包冲突,因此无法一次安装所有可用软件包。给定系统的可安装包的最大可能数量是多少?蛮力的试错方法是:
getData()
dglob -a > list
。在我的系统slist1 slist2 slist3 ...
上返回 91327 ,这需要unfeasibly large number( 1.467×10 ^ 27492 )files。dglob -a | wc -l
,并apt-get install
生成冲突的内容。rm
。容易,但资源太重,所以也许有一些更可行的方法。
随后出现各种相关问题,例如:
给定一个包'foo',如何找到与'foo'不冲突的最大可安装包数?
对于所有可能的包,它具有最小的最大值,(使其成为最“争吵”的包)?
(注意:这个问题适用于Debian,Red Hat以及任何带有打包程序冲突的打包系统的发行版或操作系统。任何适用平台的答案都是有效的。)
背景:
Debian 拥有数以万计的软件包。 wc -l slist* | head -n -1 | sort -g | tail -1
(来自 debian-goodies 包)可以方便快速计算:
dglob
示例输出(两个数字在更新和升级后可能会定期波动,并且会因系统而异):
# show how many packages installed and available on the current system
echo $(dglob | wc -l) packages installed of \
$(dglob -a | wc -l) packages.
数字 5107 当然不是最大值,但必须有最大值。
答案 0 :(得分:1)
在这种情况下,蛮力选项是唯一的选择。此处 a paper 将深入描述原因,但问题是包安装和依赖项/冲突解决是 NP-Complete 问题。
如果每个 TRUE
答案都有一个易于检查的多项式大小的解释,那么问题就是 NP。在这种情况下,这可以通过列出已安装的软件包和可用的软件包来完成。
如果问题的有效解决方案可以适用于 NP 中所有其他问题的有效解决方案,则 Debian 软件包安装是 NP 难的。我将遵循上面列出的论文,因为在这里证明有点复杂,但它可以编码为 3-SAT。
由于 Debian 软件包安装在 NP 和 NP-hard 中,因此它是 NP-complete。
以下是 APT 中的 default
求解器试图避免 NP 完备性的一些方法:
基本上,约束必须专门设计为使问题落入已知的易处理类,以解决像 HORN-SAT 这样的 NP-Complete 问题
不幸的是,find the maximum possible number of installable packages for a given system
几乎排除了我所知道的所有已知的易处理类。
所以蛮力是唯一的选择,而且在发现合适的易处理类或有人证明 P=NP 之前,这是一种昂贵的选择。
答案 1 :(得分:-2)
apt list > tmp.file
vi tmp.file
然后在vi中按G键。这将为您提供可用的软件包数量,但不幸的是它不能解决冲突。