: → AyuniD: 以第三個例子來講,Python 的整數是無限精度,那是不是你 11/25 09:50
: → AyuniD: 這個題目又變回 O(1) 了?因為都可以用 Python 的整數去 11/25 09:50
: → AyuniD: 存啊?還是說因為用 CPython 所以底下還是有大小之分?當 11/25 09:50
: → AyuniD: 年課堂上教時間複雜度是用 pseudo code 算,硬要跟任何一 11/25 09:50
: → AyuniD: 種程式語言掛鉤,怪怪的餒,重點是邏輯吧 11/25 09:50
這其實就要看你的計算模型怎麼定義的
你的模型規定整數都是 O(1) 空間,那就會得到 O(1) 的結果
不過即使是 Python,把這個無限精度的整數當成 O(1) 空間恐怕沒什麼人會同意
例子就是,我可以把所有東西都化成整數再計算
像是給定一個陣列 A = [a_1, a_2, ..., a_n]
我可以定義 N_A = 2^{a_1} * 3^{a_2} * ... * P_n^{a_n},
其中 P_n 是第 n 個質數
這樣的對應是唯一的,因此你就可以把一個陣列轉成整數
如果想計算 A[0] 就去計算 N_A 能除幾次 2
這樣任何對 A 的操作就都在 O(1) 空間內完成,顯然很不合理
以實際的角度來看,你用 sys.getsizeof() 去計算一個整數在機器上的大小
也會發現這會隨著整數的大小而上升
不過你說的對,不需要跟程式語言掛鉤
在我那個例子就是,把 index 都當 O(1) 其實大家不太會去質疑
畢竟實際上就不太可能有多大