我们在阅读paper时,经常会看到NP-hard,NP-complete等问题。我也是慢慢学习发现到这些问题的趣味,下面我们一起来探讨一下P,NP,NP-hard,NP-complete这些问题吧!在正式进入之前,先简单列出一波常见的概念。
1.时间复杂度
在遇到算法问题时,就不可避免的需要讨论算法的时间复杂度。算法的时间复杂度可以用来度量算法的运行时间。算法的时间复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大程度上能很好反映出算法的优劣程度。说白了,时间复杂度也就可以表示为对于高速处理数据的计算机来说,处理某一个特定数据的效率不能衡量一个程序的好坏,而应该看当这个数据的规模变大到数百(或万)倍后,程序运行时间是否还是一样,或者也跟着慢了数百(或万)倍。
每个问题有自己的规模,假设n为问题的规模,当n不断变化时,时间频度T(n)也会不断变化。一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。
通常复杂度被分为两种级别,一种是多项式级复杂度(形如O(1),O(log(n)),O(n^a)),另一种是非多项式级复杂度(形如O(a^n),O(n!))。一般来说我们选择的算法通常都需要是多项式级的复杂度,非多项式级的复杂度需要的时间太多,往往会超时,除非是数据规模非常小。
2.什么是P问题、NP问题?
首先,简单直观的说什么是P问题?如果一个问题可以找到一个能在多项式的时间里解决它的算法,那么这个问题就属于P问题。P问题也叫做多项式问题。

本文深入浅出地解析了算法复杂度、P问题、NP问题、NP-hard问题及NPC问题的概念,揭示了这些概念之间的关系,以及它们在算法设计和分析中的重要性。
?&spm=1001.2101.3001.5002&articleId=108187284&d=1&t=3&u=a58ad7d2c2014d8897da7c3813a3e0b2)
3906

被折叠的 条评论
为什么被折叠?



