## Stream: new members

### Topic: fast data structures?

#### Kevin Lacker (Oct 27 2020 at 18:14):

While trying to clean up this implementation of rewrite_search I am trying to figure out which data structures are the fastest and had a couple questions. I would expect that it's the ones implemented in the VM. It looks like d_array is supposed to be, for example. My first question is, does this work quickly as I'd expect? When I look at the code some of the methods don't seem like they would be efficient. For example from https://github.com/leanprover-community/lean/blob/0ec2a19/library/init/data/array/basic.lean#L11:

/-- write a i v sets the ith member of a to be v. Has builtin VM implementation. -/
def write (a : d_array n α) (i : fin n) (v : α i) : d_array n α :=
{data := λ j, if h : i = j then eq.rec_on h v else a.read j}


That implementation looks like it will be O(n) to evaluate a read after doing n writes. Is it actually being replaced with something else more efficient by the VM?

My second question is whether there are other efficient data structures. In particular a good map structure like a hashmap or a treemap would be nice. There are a bunch of different tree-like structures lying around and I was wondering if there's conventional wisdom on which are the best to use.

#### Mario Carneiro (Oct 27 2020 at 18:46):

Is it actually being replaced with something else more efficient by the VM?

yes

#### Mario Carneiro (Oct 27 2020 at 18:46):

There is an array-based hashmap implementation in mathlib

#### Bryan Gin-ge Chen (Oct 27 2020 at 18:46):

The conversation moved here

Last updated: May 15 2021 at 00:39 UTC