mojo icon indicating copy to clipboard operation
mojo copied to clipboard

[Docs] Adding runtime complexity to relevant functions

Open hoxha-saber opened this issue 1 year ago • 1 comments

Where is the problem?

https://docs.modular.com/mojo/stdlib/utils/vector.html#setitem__-2

What can we do better?

Throughout the documentation, there are several functions that are used to manipulate data structures. I think it would be helpful as a developer to know runtime complexity of using these functions. For example, in the documentation for unordered_map at cppreference there is a short description of the asymptotic complexity of the insert method.

Complexity
1-6) Average case: O(1), worst case O(size())
7,8) Average case: O(N), where N is the number of elements to insert. Worst case: O(N*size()+N)
9,10) Average case: O(1), worst case O(size())```

Whereas for std::map::insert we have something like

Complexity
1-3) Logarithmic in the size of the container, O(log(size())).
4-6) Amortized constant if the insertion happens in the position just after (until C++11)before (since C++11) pos, logarithmic in the size of the container otherwise.
7,8) O(N·log(size() + N)), where N is the number of elements to insert.
9) Logarithmic in the size of the container, O(log(size())).
10) Amortized constant if the insertion happens in the position just before pos, logarithmic in the size of the container otherwise.

As Mojo evolves and new data structures are added it would be helpful as a developer to get a basic idea of the runtimes for different functions/data structures.

Anything else?

I put a link to __setitem__ function of DynamicVector but it really applies to any/all non-trivial functions.

hoxha-saber avatar Oct 04 '23 04:10 hoxha-saber

Thanks for this suggestion! This is definitely something to consider, but Mojo is still very young and changing quickly, so I think we should revisit this when the language and library is more mature. I believe writing this sort of documentation now will be a maintenance problem, and there are a lot of other pressing demands.

scottamain avatar Oct 06 '23 21:10 scottamain