伪多项式时间 Pseudo-polynomial time

2018-03-15 14:20:08

伪多项式时间:如果一个算法的传统时间复杂度是多项式时间的,而标准时间复杂度不是多项式时间的,则我们称这个算法是伪多项式时间的。

想要理解“伪多项式时间”,我们需要先给出“多项式时间”的一个清楚的定义。

对于“多项式时间”,我们的直观概念是时间复杂度,其中是一常数。比如,选择排序的时间复杂度是,是多项式时间;暴力解决TSP问题的时间复杂度是,不是多项式时间。我们称这种时间复杂度为“传统时间复杂度”

我们通常认为传统时间复杂度中的变量表示数据的输入规模。比如,选择排序中,指待排序数组中元素的个数;TSP问题中表示图中节点的数量。但是,这些所谓的输入规模,仅仅是直观的定义,并不足够严谨。为了标准化这些,在计算标准时间复杂度时,我们给出了输入规模的标准定义:

一个问题的输入规模是保存输入数据所需要的bit位数。

了解了输入规模的定义,我们来看“多项式时间”的标准定义:

对于一个问题,在输入规模为x的情况下,如果一个算法能够在O()时间内解决此问题,则我们称此算法是多项式时间的,其中为一常数。

排序问题:用选择排序对元素个数为的数组进行排序时,传统时间复杂度为。输入规模,因此,得到的标准时间复杂度是,仍然是多项式时间。因为这的n是只输入数据的数目。

素数测试:给定数字 n,通过从 2 到根号 n 的整数遍历,判断 n 是否为素数。看似时间复杂度是O(n),但是这里的n是输入数字的大小,真实的输入规模为 x = logn,因此实际的时间复杂度是O(x ^ 2),是指数级的时间复杂度。这就是个伪多项式时间复杂度。

原文地址:https://www.cnblogs.com/TIMHY/p/8573472.html

时间: 2024-10-31 09:17:29

伪多项式时间 Pseudo-polynomial time的相关文章

【伪多项式时间】

Stack Overflow上有人关于这个概念(Pseudo-polynomial time)进行过详细解释. 原答案: algorithm - What is pseudopolynomial time? How does it differ from polynomial time? 我大概翻译一下: 想要理解"伪多项式时间",我们需要先给出"多项式时间"的一个清楚的定义. 对于"多项式时间",我们的直观概念是时间复杂度,其中是一常数.比如,

伪多项式时间算法Pseudo-polynomial Algorithms-----geeksforGeek 翻译

什么是伪多项式? 当一个算法的最坏时间复杂度是依据输入的数量级的时候,我们就称算法的时间复杂偶是伪多项式时间(给一个wiki上的解释可能更好理解 若一个数值算法的时间复杂度可以表示为输入数值规模N的多项式,但其运行时间与输入数值规模N的二进制位数呈指数增长关系,则称其时间复杂度为伪多项式时间.这是由于,N的值是N的位数的幂,故该算法的时间复杂度实际上应视为输入数值N的位数的幂from wiki ) 例如:统计一个数组中所有正数的出现频率.算法是先找到最大的数max,然后从1到max遍历没一个数,

CSS 伪类和伪元素--pseudo

总结在前: 0. 参考资料 1. 伪类和伪元素是不同的两种东西. 2. 伪类和伪元素都属于CSS选择器. 3. CSS引入伪类和伪元素是为了实现基于文档树之外的信息,i.e. 段落的第一行,的格式化. 4. 伪类和伪元素都不出现在源文件和文档树中. 伪类:一开始单单只是用来表示一些元素的动态状态,典型的是<a>的 LVHA四个状态,CSS2标准扩展了概念范围, 使其成为了所有逻辑上存在,但在文档树中却无须标识的分类. 伪元素:代表某个元素的子元素,虽然这个子元素在逻辑上存在, 但是不存在于文档

CSS3伪类和伪元素的特性和区别

本文转自:http://www.cnblogs.com/ihardcoder/p/5294927.html 今天复习css时发现::的css选择器,查了一下,知道有伪元素和伪类这件事,他们的区别是什么呢?很幸运已经有人总结好了! CSS3伪类和伪元素的特性和区别 前端er们大都或多或少地接触过CSS伪类和伪元素,比如最常见的:focus,:hover以及<a>标签的:link.visited等,伪元素较常见的比如:before.:after等. 其实上面提到的这些伪类和伪元素都是CSS1和CS

linux的终端,网络虚拟终端,伪终端(转)

转自http://www.xuebuyuan.com/877887.html 2013年09月07日 ⁄ 综合 ⁄ 共 4047字 ⁄ 字号 小 中 大 ⁄ 评论关闭 Linux上许多网络服务应用,如l2tp.pptp.telnet,都用到了伪终端.有朋友在问这方面的概念,把偶知道的写下来,以供讨论. 一.终端要理解伪终端(Pseudo Terminal),先来看看什么是“终端”(Terminal). 终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备. 1.串行端口终端

css中伪类和伪元素的区别

转载:http://www.cnblogs.com/ihardcoder/p/5294927.html CSS3伪类和伪元素的特性和区别 前端er们大都或多或少地接触过CSS伪类和伪元素,比如最常见的:focus,:hover以及<a>标签的:link.visited等,伪元素较常见的比如:before.:after等. 其实上面提到的这些伪类和伪元素都是CSS1和CSS2中的概念,CSS1和CSS2中对伪类的伪元素的区别比较模糊,甚至经常有同行将:before.:after称为伪类.CSS3

linux的终端,网络虚拟终端,伪终端

linux的终端,网络虚拟终端,伪终端 转自:http://www.xuebuyuan.com/877887.html Linux上许多网络服务应用,如l2tp.pptp.telnet,都用到了伪终端.有朋友在问这方面的概念,把偶知道的写下来,以供讨论. 一.终端要理解伪终端(Pseudo Terminal),先来看看什么是“终端”(Terminal). 终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备. 1.串行端口终端(/dev/ttySx)串行端口终端(Seria

Linux 伪终端(pty)

通过<Linux 终端(TTY)>一文我们了解到:我们常说的终端分为终端 tty1-6 和伪终端.使用 tty1-6 的情况一般为 Linux 系统直接连了键盘和显示器,或者是使用了 vSphere console 等虚拟化方案,其它情况下使用的都是伪终端.本文将介绍伪终端的基本概念.本文中演示部分使用的环境为 ubuntu 18.04. 伪终端 伪终端(pseudo terminal,有时也被称为 pty)是指伪终端 master 和伪终端 slave 这一对字符设备.其中的 slave 对

深入理解getComputedStyle

jQuery的css()的底层实现就用到了getComputedStyle这个方法,也许我们用到的很少,但是不得不说这时一个非常强大的函数,下面让我们一探究竟! 第一部分:基本语法 在mdn上,我们可以看到它是这样定义的: The Window.getComputedStyle() method gives the values of all the CSS properties of an element after applying the active stylesheets and re