Re: [闲聊] 关于LeetCode题目的复杂度

楼主: fxfxxxfxx (爱丽丝)   2022-11-25 11:28:24
: → 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) 其实大家不太会去质疑
毕竟实际上就不太可能有多大
作者: twosheep0603 (两羊)   2022-11-25 11:31:00
让我想到费波那契数列公式解O(1)的故事
作者: Apache (阿帕契)   2022-11-25 11:33:00
因为int64寻址太大了 即使拿来index storage都不太会爆掉

Links booklink

Contact Us: admin [ a t ] ucptt.com