如何解决计数的时间复杂度是多少?
我有 n
本书的列表,例如 books = ["1984","Harry Potter","Hamlet"]
。
此外,我有一个列表列表,其中每个内部列表代表已经阅读了某些书籍(可能是全部或没有)的某个人,可能是 0
或多次,因此,例如,我可以有类似 readings = [["1984","Harry Potter"],["Hamlet",[],"Hamlet","Hamlet"]]
的东西。
对于 readings
,我需要计算每本书的阅读次数。就编码而言,这似乎是一个微不足道的操作(创建 title : number of readings
的字典,迭代每个内部列表并增加键值对中的值),但我很难理解该计数的复杂性。
想法№1:由于有n
本书,时间复杂度为O(n)
想法№2:由于n
中有m
本书和readings
人,因此时间复杂度为O(nm)
想法№3:由于每本书都可以阅读有限的次数,例如n
次、n^2
次甚至n^n
次,我不知道时间复杂度是多少,因为我不知道我们应该在这里选择的 n
的最大幂是多少,看起来是无穷大。
那么计算所有书籍的阅读次数的时间复杂度是多少?
解决方法
您建议的字典方法听起来是个好主意。如果我们可以假设字典访问是一个恒定时间的操作,那么列表中的书籍数量 (n
) 将无关紧要。
您描述的算法的时间复杂度为 O(k),k 是所有读数的总大小。这很容易看出,如果您想像遍历所有阅读中的所有书籍并为它们更新字典。
不管你知道什么,这都是正确的。如果没有关于此列表大小的更多信息,您将无法获得更精确的算法时间复杂度表达式。
但是,如果您确实了解更多,则可以用更有用的方式表达。例如:
- 如果每个人的平均阅读次数是r。那么,复杂度是 O(rm),其中 m 是
readings
中的人数。 - 一个人阅读同一本书的次数是有上限的。如果该值是有界的,则可以将其视为常量。然后,就像您建议的那样,您的复杂性是 O(nm)。 (这个界限不太可能取决于 n。)
似乎您确实了解时间复杂度的概念,但只是对您被允许/期望如何表达它感到困惑。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。