Python复杂性参考?

 我很丑但我可以很温柔 发布于 2023-01-29 12:08

是否有任何Python复杂性参考?例如,在cppreference中,对于许多函数(例如std :: array :: size或std :: array :: fill),有一个复杂性部分,用容器大小的线性常量来描述它们的运行复杂性..

我希望在python网站上出现相同的信息,或许至少对于CPython实现.例如,在列表引用中,list.insert我希望看到复杂性:线性 ; 我知道这种情况(和许多其他容器相关的操作)在这里,但许多其他情况不是.这里有一些例子:

什么是复杂性tuple.__le__?似乎在比较两个大小的元组时n,k复杂性是关于O(min(n,k))(然而,对于小n的它看起来不同).

什么是复杂性random.shuffle?它似乎是O(n).它也出现了复杂random.randintO(1).

__format__字符串方法的复杂性是什么?它看起来与输入字符串的大小呈线性关系; 然而,当数也增长有关生长参数(比较("{0}"*100000).format(*(("abc",)*100000))("{}"*100000).format(*(("abc",)*100000))).

我知道(a)这些问题中的每一个都可以单独回答,(b)可以查看这些模块的代码(即使有些是用C语言编写的),(c)StackExchange不是python邮件用户请求列表.所以:这不是文档功能请求,只是两个部分的问题:

    你知道这样的资源是否存在吗?

    如果没有,你知道要求的地方是什么,或者你能说出我不需要的地方吗?

Eevee.. 5

CPython非常适合它的算法,并且操作的时间复杂度通常是您对优秀标准库的最佳期望.

例如:

元组排序必须是O(min(n,m)),因为它通过比较元素来工作.

random.shuffleO(n),因为这是现代Fisher-Yates shuffle的复杂性.

.format是线性的,因为它只需要通过模板字符串进行一次扫描.至于你看到的差异,CPython可能只是足够聪明,可以缓存两次使用的相同格式代码.

文档确实提到了时间复杂性,但通常只有当它不是你所期望的时候 - 例如,因为a deque是用双向链表实现的,所以明确提到它O(n)在中间有索引.

文档是否会受益于在任何地方都适当的时间复杂性?我不确定.文档通常通过它们应该用于的内容来构建,并且具有针对这些用例优化的实现.强调时间复杂性似乎是无用的噪音或鼓励开发人员猜测Python实现本身.

1 个回答
  • CPython非常适合它的算法,并且操作的时间复杂度通常是您对优秀标准库的最佳期望.

    例如:

    元组排序必须是O(min(n,m)),因为它通过比较元素来工作.

    random.shuffleO(n),因为这是现代Fisher-Yates shuffle的复杂性.

    .format是线性的,因为它只需要通过模板字符串进行一次扫描.至于你看到的差异,CPython可能只是足够聪明,可以缓存两次使用的相同格式代码.

    文档确实提到了时间复杂性,但通常只有当它不是你所期望的时候 - 例如,因为a deque是用双向链表实现的,所以明确提到它O(n)在中间有索引.

    文档是否会受益于在任何地方都适当的时间复杂性?我不确定.文档通常通过它们应该用于的内容来构建,并且具有针对这些用例优化的实现.强调时间复杂性似乎是无用的噪音或鼓励开发人员猜测Python实现本身.

    2023-01-29 12:10 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有