什么是伪多项式时间算法
首先一定要搞清楚下面的定義。
輸入規模:一個問題的輸入規模是保存輸入數據所需要的bit位數。
(不理解“偽多項式時間”,可能很大程度上是由于對“輸入規模”的誤解。輸入規模不是指輸入的大小,也不是指多少,而是指在2進制下保存它們需要的位數!)
多項式時間算法:在輸入規模為x的情況下,算法能夠在O(xk) 時間(k為常數)內解決該問題。
偽多項式時間算法:算法的時間復雜度是輸入數據大小的多項式時間表達,但卻是輸入數據長度(輸入規模)的指數時間表達。
對比下面兩個例子。
冒泡排序:給定 n 個32位的數字,將數字從小到大排序。輸入規模增長與數字大小無關,輸入規模 = 32n。輸入規模為x時,n = x / 32,算法用時為O((x/32)2)= O(x2)。
素數判定:給定數字 n,判斷 n 是否為素數。增長規模與數字大小相關,輸入規模 = logn 。輸入規模為x時,n = 2x,算法用時為O(2x)。
所以冒泡排序為多項式時間算法,素數判定則是偽多項式時間算法。
處理圖論、鏈表、數組、樹等問題時,一般是多項式時間算法;處理背包問題、與數論有關的問題時,有時就是偽多項式時間算法了。
參考資料:
什么是偽多項式時間算法? - 詹宇的回答 - 知乎
https://www.zhihu.com/question/20013122/answer/44460397
什么是偽多項式時間算法? - 唐燕琳的回答 - 知乎
https://www.zhihu.com/question/20013122/answer/13786174
總結
以上是生活随笔為你收集整理的什么是伪多项式时间算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ArrayList实现自定义排序
- 下一篇: 【软件工程】几种常见的软件开发模型:(瀑