Леонид Ильич Брежнев wrote:
Так вот у меня вопросы к теоретикам CS
1) насколько insert в мап хуже/лучше чем в дерево. По-моему, для мапа это будет О(n), a для дерева какой-нибудь O(n * log(n))
2) насколько мап на отдельной машине (скажем 1/50 всех логов) будет меньше/больше, дерева построенного из тех же данных?
3) насколько "склеивать" с полсотни мапов сложнее чем с полсотни деревьев?
Вопрос неправильно поставлен, т.к. map может быть реализован с помощью дерева. Если мы говорим про hash table имплементацию vs классическое бинарное дерево, то вставка в hash table будет O(n) в худшем случае, average - это вопрос интересный, потому что мы тут его как-то рассматривали в скроллере из 10 страниц.
Теоретически, когда мы знаем распределение ключей и их кол-во, подборкой hash-function и размер bucket'ов, можно предположить, что вставка будет константой. В нашем конкретном случае можно проблема будет не в сложности вставки, а в том, что, скорее всего, придется hash map дробить заранее. Размер дерева нам будет трудно соптимизировать, потому что придется тратить место на ссылки между элементами. И, кстати, какое дерево мы строим? На больших данных, которые не влезают в память. с большим кол-вом модификаций эффективнее перейти на B-tree.
Дробить и то и другое одинаково легко.