Python: .isAlpha 的时间复杂度
Python: Time complexity of .isAlpha
所以我找不到关于(字符串模块的)isalpha 方法是如何编写的官方文档,但我想使用的算法应该是:
1).将有问题的 char 转换为 int.
2)。将它与较大的 alpha-ascii 值(即 90 或 122)进行比较,看看它是否小于或等于这些值。
3)。将它与较大的 alpha-ascii 值进行比较,即 55 或 97,具体取决于使用的上限(如果小于 90 使用 55...),看看它是否大于或等于这些值。
我对 isalpha 方法的评估是否正确,还是完全不同?如果是这样,它的复杂度是 O(3) 吗?
Python 将文本作为 unicode 处理。因此,哪些字符是字母的,哪些不是,取决于字符 unicode 类别,包括在与 Python 一起编译的 unicode 版本上定义的所有字符。那是数以万计的字符和数百个脚本等……每个都有自己的字母范围。虽然这一切都归结为可以使用其他算法进行比较的代码点的数字范围,但几乎可以肯定所有字符都被迭代,并且字符 unicode 类别被检查。如果你想要复杂性,那就是 O(n)
.
(实际上,在您的示例中也是 O(n),因为必须检查所有字符。对于单个字符,Python 使用字典或类似字典的 table从字符到它的类别信息,也就是O(1))
所以我找不到关于(字符串模块的)isalpha 方法是如何编写的官方文档,但我想使用的算法应该是:
1).将有问题的 char 转换为 int.
2)。将它与较大的 alpha-ascii 值(即 90 或 122)进行比较,看看它是否小于或等于这些值。
3)。将它与较大的 alpha-ascii 值进行比较,即 55 或 97,具体取决于使用的上限(如果小于 90 使用 55...),看看它是否大于或等于这些值。
我对 isalpha 方法的评估是否正确,还是完全不同?如果是这样,它的复杂度是 O(3) 吗?
Python 将文本作为 unicode 处理。因此,哪些字符是字母的,哪些不是,取决于字符 unicode 类别,包括在与 Python 一起编译的 unicode 版本上定义的所有字符。那是数以万计的字符和数百个脚本等……每个都有自己的字母范围。虽然这一切都归结为可以使用其他算法进行比较的代码点的数字范围,但几乎可以肯定所有字符都被迭代,并且字符 unicode 类别被检查。如果你想要复杂性,那就是 O(n)
.
(实际上,在您的示例中也是 O(n),因为必须检查所有字符。对于单个字符,Python 使用字典或类似字典的 table从字符到它的类别信息,也就是O(1))