簡體   English   中英

c++ 中字符串拆分/對象創建的時間/空間復雜度

[英]Time/space complexity of string splitting/object creation in c++

我正在努力弄清楚我擁有的一段代碼的時間復雜度,該代碼從 1 行獲取用戶輸入,例如打開 1 0,並通過空格分割輸入,然后允許用戶創建一個新的“帳戶”object在堆上。 我認為這是一個 O(n^2) 操作,因為它包含 2 個 while 循環,加上一個額外的 function 調用,這可能是完全錯誤的。

int main(){

    std::vector <std::string> parameters;
    std::string userCommand;

    // Make a new account manager object for a new user
    AccountManager accounts = AccountManager();

    while (userCommand != "exit"){

        parameters.clear(); // Clear ready for next command
        std::cout << std::endl << ">>> ";

        std::getline(std::cin, userCommand);
        char* cstr = new char[userCommand.length() + 1];
        strcpy(cstr, userCommand.c_str());

        char* token;
        token = strtok(cstr, " ");

        while (token != nullptr){
            parameters.push_back(token);
            token = strtok(nullptr, " ");
        }

        // This calls a function that creates a creates a new object on the heap
        accounts.openAccount(parameters[1], parameters[2]);
    }
}

復雜度在空間和時間上的用戶輸入總長度是線性的。

所有單獨的操作僅在恆定的時間內迭代用戶輸入,包括內部循環。 因此,在用戶輸入時間的總長度為n的情況下,時間復雜度為Theta(n)

同樣,memory 僅用於存儲用戶輸入長度的恆定倍數,這意味着Theta(n)空間復雜度。


這是假設您沒有詳細說明的AccountManager操作不占主導地位。

假設n是用戶提交輸入的次數。

時間復雜度:

對於每個n我們都在迭代多個參數,我們稱它們為m ,但是在上面提供的示例代碼中,您似乎只期望兩個參數,這意味着這里的迭代始終是恆定的。 如果參數的數量是變化的和/或增加時間復雜度將是O(n*m) ,但如果m = 2O(2*n)變為O(n)線性時間。

空間復雜度:

對於每個用戶輸入n我們正在創建一個新account ,從提供的代碼中如何創建或存儲新帳戶是不明確的,但很明顯,對於每個用戶輸入我們創建一個新account ,這意味着這里的空間復雜度也是O(n) 所有其他變量的空間復雜度都是恆定的,因此不會影響整體空間復雜度。

注意: openAccount方法可以使用數據結構存儲帳戶,具體取決於哪個數據結構,時間復雜度會受到影響。

暫無
暫無

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

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