Questions tagged «pseudo-polynomial»

3
为什么不采用数值算法中数字的一元表示形式呢?
伪多项式时间算法是对输入值(幅度)具有多项式运行时间,而对输入大小(位数)具有指数运行时间的算法。 例如,测试数字是否为质数,需要循环从2到数字,并检查 mod是否为零。如果mod花费O(1)时间,则总时间复杂度将为O(n)。n - 1 n innnn−1n−1n-1nnn iii 但是,如果让为写入输入所需的位数,则(二进制),因此,问题的运行时间将是指数的O()。x = 日志n n = 2 x 2 xxxxx=lognx=log⁡nx = \log nn=2xn=2xn = 2^x2x2x2^x 我的问题是,如果我们考虑输入的一元表示形式,则始终为,则伪多项式时间将等于多项式时间复杂度。那么为什么我们从不这样做呢?x = nnnnx=nx=nx=n 此外,由于存在背包的伪多项式时间算法,因此通过取,背包将成为多项式,结果P = NPx=nx=nx=n

1
难道这是一个NP完全问题?
考虑以下问题陈述: 给定一个初始数字,您和您的朋友轮流从中减去一个完美的平方。第一个获得零胜利的人。例如: 初始状态:37 玩家1减去16。状态:21 玩家2减去8。状态:13 玩家1减去4。状态:9 玩家2减去9。状态:0 Player2获胜! 编写一个程序,该程序给出一个初始状态,并返回最佳动作,即可以确保赢得比赛的动作。如果没有任何可能的举动会导致您进入获胜状态,请返回-1。 使用动态规划可以在伪多项式时间内解决此问题。这个想法只是用最佳移动从下往上填充长度为n(其中n是初始状态)的数组,如果没有移动导致获胜,则为-1。这将花费O(n * sqrt(n)),因为对于每个数字,我们都需要考虑减去每个可能的小于它的理想平方(其中有〜sqrt(n)个)。但是,这是伪多项式运行时复杂性,因为运行时实际上相对于二进制(用于表示数字的位数)的大小与输入大小成比例关系。 谁能想到解决这个问题的多项式算法?如果没有,那么它可以是NP-Complete吗?为什么?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.