Runtime complexity of getting the length of a string in different representations

你说的曾经没有我的故事 提交于 2020-01-01 19:26:13

问题


In Swift 2, given a string s, what's the runtime complexity of these statements:

s.characters.count
s.endIndex
s.utf8.count
s.utf16.count
s.unicodeScalars.count

Also, if I know a string contains alphabets only, what's the most efficient way of getting the n-th character?


回答1:


OK, I'm trying to answer my own question. Feel free to correct me if I'm wrong.

s.characters.count  // O(N)
s.endIndex // O(1)
s.utf8.count // O(N)
s.utf16.count // O(N)
s.unicodeScalars.count // O(N)

Apple's documentation on CollectionType.count says "Complexity: O(1) if Index conforms to RandomAccessIndexType; O(N) otherwise." Since none of the Index of CharacterView, UnicodeScalarView, UTF16View or UTF8View conforms to RandomAccessIndexType, accessing their counts are all O(N).




回答2:


If you don't have access to the source code for those expressions (you don't, unless you work for Apple), and the documentation doesn't mention the complexity (it doesn't, I've checked), it might be worth actually benchmarking the operations with strings of size 1, 10, 100, 1000 and so on.

The resulting data, while not definitive, would at least give you an indication of the time complexity for each.

In terms of getting the correct character at a given index of a string, that's already covered here. Whatever method Apple will have chosen for indexing a string is going to be as fast as they can make it (they're not in the business of preferring slow code over fast, all other things being equal).



来源:https://stackoverflow.com/questions/33094432/runtime-complexity-of-getting-the-length-of-a-string-in-different-representation

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!