簡體   English   中英

您如何證明一個簡單的無意義代碼是否可計算?

[英]How do you prove whether a simple unmeaningful code is computable or not?

可計算問題的特征是:

  • 完整意味着它涵蓋了所有情況;
  • 機械意味着它是精確的;
  • 確定性意味着如果輸入相同的輸入,將提供相同的 output。

如果我錯了,請糾正我,我發現通過研究,除了deterministic之外,我並不完全知道它的實際含義。

所以,我試圖證明一個簡單的代碼,例如:

int i = 0;
do{
    int j = 0;
    do{
        printf("Hello\n");
        j++;
    }while (j < n);
    printf("Hello\n");
    i++;
}while (i < n);

是可計算的。

我知道如何證明它是確定性的,因為它相當明顯,但我不確定如何證明它是機械的或完整的。

Complete特征,據我了解,它更像是“有沒有什么方法可以使代碼無法執行或作為錯誤返回?” 例如打開一個文本文件有可能文件不存在,因為輸入了錯誤的文件名或輸入了錯誤的位置等。

但是對於上面的代碼片段,我應該如何證明它是完整的呢?

至於機械論“是否 1 + 1 = 2 而不是 3?”。

同樣,對於上面的代碼片段,我如何證明它是精確的,因為代碼本身並沒有解決任何問題,它只是根據 n 值打印“hello”? 在這種情況下,n^2 + n 個“你好”。

你混淆了一些東西。

首先,你提供了一段代碼,問如何證明它是可計算的。 但這沒有任何意義 - 一段代碼無法計算或不可計算。

一個(數學)集合可以是可計算的,也可以是不可計算的。 基於此,其他所有內容也是一個集合:例如語言(一組字符串)、決策問題(一組接受的輸入)或function (一組鍵值對)。

其次,您提到的“特征”沒有定義可計算的問題。 我不知道你從哪里得到它們,但它們充其量只是對用於解決可計算問題的算法的某些方面的非常非正式的描述。 所以我認為你不是在談論可計算的問題,而是在談論算法 但鑒於您的特征是非正式的,您無法證明它們。

因此,這里有一些可能會有所幫助的稍微更精確(但仍不正式)的陳述:

  • 一個問題是可計算的,當且僅當存在解決它的算法。
  • 算法解決問題當且僅當
    • 它可以在標准的 model 計算中表達(例如圖靈機或標准編程語言);
    • 就問題而言是合理的:算法產生的任何答案都屬於問題的答案集;
    • 就問題而言是完整的:問題答案集的任何元素都由算法生成;
    • 算法在所有輸入上停止。

現在這些特征足夠精確,您可以實際使用它們來證明問題是可計算的,或者算法可以解決特定問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM