mirror of
https://github.com/autistic-symposium/master-algorithms-py.git
synced 2025-04-29 12:16:14 -04:00
Update README.md
This commit is contained in:
parent
802c4c9d5a
commit
3d8e44eef9
@ -10,15 +10,15 @@
|
||||
|
||||
* a set structure where we would implement `insert`, `delete`, and `get_random` at `O(1)` time.
|
||||
|
||||
* this type of structure widely used in statistical algorithms such as markov chain monte carlo and metropolis-hastings algorithms, which needs sampling from a probability distribution when it's difficult to compute the distribution itself.
|
||||
* this type of structure is widely used in statistical algorithms such as markov chain monte carlo and metropolis-hastings algorithms, which needs sampling from a probability distribution when it's difficult to compute the distribution itself.
|
||||
|
||||
* candidates for `O(1)` average insert time are:
|
||||
* **hashmaps (or hashsets)**: to be able to implement `get_random` at `O(1)` (choose a random index and to retrieve narandom element), we would have to convert hashmap keys in a list, which is `O(N)`. a solution is to build a list of keys aside and use this list to compute `get_random` in `O(1)`.
|
||||
* **hashmaps (or hashsets)**: to be able to implement `get_random` at `O(1)` (choose a random index and retrieve a random element), we would have to convert hashmap keys in a list, which is `O(N)`. a solution is to build a list of keys aside and use this list to compute `get_random` in `O(1)`.
|
||||
* **array lists**: we would have `O(N)` with `delete`. the solution would be delete the last value (first swap the element to delete with the last one, then pop the last element out). for that, we need to compute an index of each element in `O(N)`, and we need a hashmap that stores `element -> index`.
|
||||
|
||||
* either way, we need the same combination of data structures: a hashmap and an array.
|
||||
* an array keeps the values appended in order. `delete` always replace elements to the end.
|
||||
* an dictionary maps the values (key) to the corresponding length of the array (their index) so it guarantees `O(1)` lookup and provide a list for `random.choice()`.
|
||||
* an dictionary maps the values (key) to the corresponding length of the array (their index) so it guarantees `O(1)` lookup and provides a list for `random.choice()`.
|
||||
|
||||
<br>
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user