определена на уровне типов, так что можно всякие прикольные штуки доказывать, но я никогда не видел, чтобы создавался массив (не связанный список) и на уровне типов какие-то штучки гарантировались. Так вот вопрос, даже два:
1) Можно ли сделать самому (с нуля) на голом Haskell тип массив, в котором доступ к элементам был за O(1) (а не O(n) как в списке)
2) Можно ли к такому массиву прикрутить длину на уровне типов?
Можно
вектор? или sequence?
1) реализовать массив чуть ниже голого Хаскеля можно (primitive) и чуть выше можно (vector), просто на Хаскеле нельзя 2) да, конечно, не вижу, какие тут могут быть препятствия
1) Haskell Report 2010 требует, чтобы все имплементации включали в себя Data.Array, https://www.haskell.org/onlinereport/haskell2010/haskellch14.html#x22-20100014
технически, не обещает доступа за O(1), это может быть дерево
в теоретической «другой имплементации хаскелля»
интересно, спасибо
дерево тоже может быть O(1), но не всегда, конечно
на практике у вас не может более 2^64 узлов (а на самом деле сильно меньше), значит, у двоичного дерева высота ограничена сверху константой 64
ну кам он. на практике в связном списке не может быть больше 2^64 узлов, поэтому его длина ограничена сверху константой 2^64.
нет, 64 гораздо меньше, а если 4-битные маски использовать, то вообще 3-4 хопа в худшем случае. такой константой можно пренебречь. 2^64 нельзя пренебречь
да, log(N) это очень хорошо. поэтому и можно сказать rapid.
Обсуждают сегодня