【计算理论】计算复杂性 ( 两个带子的图灵机的时间复杂度 )
文章目錄
- 一、兩個帶子的圖靈機的時間復雜度
一、兩個帶子的圖靈機的時間復雜度
討論兩個帶子的圖靈機的時間復雜度 ;
計算問題如下 :
給定語言 : A={0k1k:k≥0}\rm A = \{ 0^k1^k : k \geq 0 \}A={0k1k:k≥0}
構造 兩個帶子的 圖靈機 M3\rm M_3M3? 認識上述語言 ;
算法分析過程 : 假設字符串為 000111000111000111 , 最壞的情況 ;
開始時的狀態 : 第一個帶子是 000111000111000111 輸入字符 , 第二個帶子是空的 ;
第一步 : 讀頭一 讀取 帶子一 字符 000 , 讀頭二 將 000 字符寫入到 帶子二 中 ;
第二步 : 讀頭一 讀取 帶子一 字符 000 , 讀頭二 將 000 字符寫入到 帶子二 中 ;
第三步 : 讀頭一 讀取 帶子一 字符 000 , 讀頭二 將 000 字符寫入到 帶子二 中 ;
第四步 : 讀頭一 讀取 帶子一 字符 111 , 讀頭二 將 000 字符從當前帶子中抹掉 ;
第五步 : 讀頭一 讀取 帶子一 字符 111 , 讀頭二 將 000 字符從當前帶子中抹掉 ;
第六步 : 讀頭一 讀取 帶子一 字符 111 , 讀頭二 將 000 字符從當前帶子中抹掉 ; 此時帶子一讀取完畢 , 帶子二為空 , 此時進入接受狀態 ;
M3\rm M_3M3? 是兩個帶子的圖靈機 , 算法設計如下 :
M3=\rm M_3 =M3?= " 在輸入字符串 w\rm ww 上進行如下計算 :
① 掃描整個帶子上的字符串 , 查看 000 和 111 的順序 , 所有的 000 必須在所有的 111 前面 ; 如果順序錯誤 , 進入 拒絕狀態 ;
② 掃描 帶子一 上的 000 字符 , 直到遇到 111 字符 , 同時將 000 拷貝到 帶子二 中 ;
③ 掃描 帶子一 上的 111 字符 , 直到字符串結束 , 每讀取一個 111 字符 , 就刪除 帶子二 中的 000 字符 ;
④ 如果所有的 000 字符都被刪除 , 帶子一 中的 111 字符還沒有讀取完畢 , 進入 拒絕狀態 ; 如果 帶子一 中的字符讀取完畢 , 帶子二 中還有 000 字符剩余 , 進入 拒絕狀態 ; 如果 帶子二 中的 000 字符都被刪除 , 帶子一 正好讀取完畢 , 進入 接受狀態 ; "
計算上述算法的時間復雜度 :
首先檢查 010101 的相對順序 , 最壞的情況下是讀頭走 n\rm nn 步 , 其復雜度是 O(n)\rm O(n)O(n) ;
然后讀取帶子一 然后寫入擦除帶子二 操作 , 整體執行了 n\rm nn 步 , 的時間復雜度是 O(n)\rm O(n)O(n)
上述兩個步驟的時間復雜度是 : O(n)+O(n)=O(n)\rm O(n) + O(n) = O(n)O(n)+O(n)=O(n)
在 【計算理論】計算復雜性 ( 小 O 記號 | 嚴格漸進上界 | 分析算法的時間復雜度 ) 博客中 , 使用一個帶子的圖靈機 M1\rm M_1M1? 識別上述語言 , 時間復雜度是 O(n)+O(n2)=O(n2)\rm O(n) + O(n^2) = O(n^2)O(n)+O(n2)=O(n2) ;
兩個帶子的圖靈機 與 一個帶子的圖靈機 計算能力 是等價的 ,
計算能力 等價 指的是 可以 識別相同的語言 , 解決相同的計算問題 ,
但是兩種圖靈機的 計算效率不同 , 兩個帶子的圖靈機計算效率一般 高于 一個帶子的圖靈機的計算效率 ;
總結
以上是生活随笔為你收集整理的【计算理论】计算复杂性 ( 两个带子的图灵机的时间复杂度 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【JetPack】kotlin-andr
- 下一篇: 【计算理论】计算复杂性 ( 两个带子的图