Re[9]: [Голосование] Нужен ли binary tree если есть hash таблица
От: alex_public  
Дата: 19.06.17 21:42
Оценка:
Здравствуйте, Gattaka, Вы писали:

G>Просто предположение. Было у нас как-то соревнование между программистами нужно сделать было сервер по ТЗ. Так вот на NodeJS сделали его за час. C++ программиста за день не справились, т.к. надо ведь строчки парсить, кодировки мучать и пр. Начали писать свой nginx, в общем симптомы С++ налицо.


С учётом того, что сам Node.JS написан на C++, а его встроенный сервер работает через известную библиотеку, написанную вообще на C, это высказывание выглядит особо комично.
Re[5]: [Голосование] Нужен ли binary tree если есть hash таб
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 19.06.17 23:49
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

N>>Для дотнета есть, например, такая реализация полноценного дерева с поиском по неточному равенству. Наверняка же не просто так придумали


НС>Для дотнета есть даже штатная реализация R/B tree, называется SortedDictionary.


Я в курсе, но её способности ниже плинтуса — именно поисковые операции не включены.
The God is real, unless declared integer.
Отредактировано 19.06.2017 23:58 netch80 . Предыдущая версия .
Re[10]: [Голосование] Нужен ли binary tree если есть hash таблица
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 19.06.17 23:58
Оценка:
Здравствуйте, alex_public, Вы писали:

G>>Просто предположение. Было у нас как-то соревнование между программистами нужно сделать было сервер по ТЗ. Так вот на NodeJS сделали его за час. C++ программиста за день не справились, т.к. надо ведь строчки парсить, кодировки мучать и пр. Начали писать свой nginx, в общем симптомы С++ налицо.


_>С учётом того, что сам Node.JS написан на C++, а его встроенный сервер работает через известную библиотеку, написанную вообще на C, это высказывание выглядит особо комично.


Оно неуместно (никак не связано с моей репликой), но не комично. Нода выступила профильной библиотекой.
The God is real, unless declared integer.
Re[10]: [Голосование] Нужен ли binary tree если есть hash таблица
От: Gattaka Россия  
Дата: 20.06.17 02:54
Оценка:
Здравствуйте, netch80, Вы писали:

G>>Я имею наглость спросить может это косяк? Просто предположение.


N>Нет, не косяк.


Остается лишь только поверить. Но я не буду.
Re: [Голосование] Нужен ли binary tree если есть hash таблица
От: vsb Казахстан  
Дата: 20.06.17 03:52
Оценка:
Дерево даёт упорядоченность. Это и плюс (если она нужна) и минус (элементам нужен компаратор). Обе структуры нужны.

Вот вопрос — зачем нужен связный список, если есть массив, интересней. Теоретически на очень больших размерах связный список выиграет на O(1) операциях, но практически я до таких размеров не доходил. Массив практически всегда лучше.
Re[11]: [Голосование] Нужен ли binary tree если есть hash таблица
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 20.06.17 03:53
Оценка:
Здравствуйте, Gattaka, Вы писали:

G>>>Я имею наглость спросить может это косяк? Просто предположение.


N>>Нет, не косяк.


G>Остается лишь только поверить. Но я не буду.


Ну, теперь Вам осталось отменить результаты голосования. Под предлогом явной фальсификации.
The God is real, unless declared integer.
Re[3]: [Голосование] Нужен ли binary tree если есть hash таблица
От: vsb Казахстан  
Дата: 20.06.17 03:54
Оценка:
Здравствуйте, Gattaka, Вы писали:

G>>>Коллеги, создал голосование о необходимости выбора между binary tree и хэш таблицей. Если вы такой выбор осуществляли не могли бы вы описать код и ситуацию где это возникло.


N>>Скорее наоборот: сразу используется дерево (std::map). Если что-то не устраивает, то уже хэш таблица. У дерева есть очевидные преимущества: всегда доступен максимальный и минимальный элементы.


G>Ну это в вашем С++ мире. В дотнет я сколько не общался с коллегами все используют Dictionary. А это ведь скорость доступа в том числе. O(1) против O(log n)


На всякий случай напомню, что в реальном мире n вряд ли будет даже сравнима с 2^64. Обычно на много порядков меньше. Т.е. O(log N) можно ограничить O(1) для реальных задач и константа будет совсем не велика. А вот тот факт, что хеш-таблица может при вставке начать всё копировать в новую структуру, если старая забита, вносит определённую непредсказуемость.
Re[2]: [Голосование] Нужен ли binary tree если есть hash таб
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 20.06.17 04:02
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Дерево даёт упорядоченность. Это и плюс (если она нужна) и минус (элементам нужен компаратор). Обе структуры нужны.


[UPD] А для хэша нужен собственно hash code. Иногда получается, что сравнить элементы можно, а вот получить от элемента что-то, достойное для использования как хэш-код — дзуськи.

vsb>Вот вопрос — зачем нужен связный список, если есть массив, интересней. Теоретически на очень больших размерах связный список выиграет на O(1) операциях, но практически я до таких размеров не доходил. Массив практически всегда лучше.


Так надо померять доли операций (добавление/удаление в конец/в начало/в середину, etc.)
Тогда можно будет оценить влияние.
А ещё есть вариант массива массивов. А ещё его можно дорастить до дерева массивов
The God is real, unless declared integer.
Отредактировано 20.06.2017 5:36 netch80 . Предыдущая версия .
Re: [Голосование] Нужен ли binary tree если есть hash таблица
От: scf  
Дата: 20.06.17 05:47
Оценка:
Здравствуйте, Gattaka, Вы писали:

G>Голосование
Автор: Gattaka
Дата: 18.06.17
Вопрос: Как часто в реальных, рабочих проектах вы говорили: "Неее... здесь лучше использовать не хэш таблицу, а двоичное дерево". И это было действительно необходимо.


G>Коллеги, создал голосование о необходимости выбора между binary tree и хэш таблицей. Если вы такой выбор осуществляли не могли бы вы описать код и ситуацию где это возникло.


Двоичное дерево нужно, если:
— функции хеширования нет, а компаратор есть (к примеру, для сложных объектов)
— множество на двоичном дереве уже отсортировано (а мапа отсортирована по ключу)

А вообще equals/hashCode на каждом объекте — великое изобретение Java, значительно увеличивающее её быстродействие.
Re[4]: [Голосование] Нужен ли binary tree если есть hash таблица
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 20.06.17 05:53
Оценка:
Здравствуйте, vsb, Вы писали:

G>>>>Коллеги, создал голосование о необходимости выбора между binary tree и хэш таблицей. Если вы такой выбор осуществляли не могли бы вы описать код и ситуацию где это возникло.

N>>>Скорее наоборот: сразу используется дерево (std::map). Если что-то не устраивает, то уже хэш таблица. У дерева есть очевидные преимущества: всегда доступен максимальный и минимальный элементы.
G>>Ну это в вашем С++ мире. В дотнет я сколько не общался с коллегами все используют Dictionary. А это ведь скорость доступа в том числе. O(1) против O(log n)
vsb>На всякий случай напомню, что в реальном мире n вряд ли будет даже сравнима с 2^64. Обычно на много порядков меньше. Т.е. O(log N) можно ограничить O(1) для реальных задач и константа будет совсем не велика.

При необходимости неточного поиска — да. Иначе же оказывается, что хэш-таблицы дешевле. А где-то даже 5% может значить победу над конкурентами.

vsb> А вот тот факт, что хеш-таблица может при вставке начать всё копировать в новую структуру, если старая забита, вносит определённую непредсказуемость.


Incremental resizing не так редко — например, AFAIR, в MSVC STL оно вместе с двоичным размером таблицы.
The God is real, unless declared integer.
Re[12]: [Голосование] Нужен ли binary tree если есть hash таблица
От: Gattaka Россия  
Дата: 20.06.17 06:07
Оценка:
Здравствуйте, netch80, Вы писали:

N>Ну, теперь Вам осталось отменить результаты голосования. Под предлогом явной фальсификации.


Да ну что вы, я охотно допускаю наличие не только людей которые занимаются разработкой действительно критичных ко времени выполнения приложений. Но и большого числа говнокодеров, которые прочитали книгу по алгоритмам и теперь пытаются сверкать своими знаниями.
Re[13]: [Голосование] Нужен ли binary tree если есть hash таблица
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 20.06.17 06:09
Оценка: +1
Здравствуйте, Gattaka, Вы писали:

N>>Ну, теперь Вам осталось отменить результаты голосования. Под предлогом явной фальсификации.


G>Да ну что вы, я охотно допускаю наличие не только людей которые занимаются разработкой действительно критичных ко времени выполнения приложений. Но и большого числа говнокодеров, которые прочитали книгу по алгоритмам и теперь пытаются сверкать своими знаниями.


Ч.Т.Д.
Спасибо за откровенность.
The God is real, unless declared integer.
Re[14]: [Голосование] Нужен ли binary tree если есть hash таблица
От: Gattaka Россия  
Дата: 20.06.17 06:13
Оценка:
Здравствуйте, netch80, Вы писали:

N>Ч.Т.Д.

N>Спасибо за откровенность.

Ни одного реального примера в ветке так и не смогли привести. Это показатель.
Re[15]: [Голосование] Нужен ли binary tree если есть hash таблица
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 20.06.17 06:50
Оценка:
Здравствуйте, Gattaka, Вы писали:

G>Здравствуйте, netch80, Вы писали:


N>>Ч.Т.Д.

N>>Спасибо за откровенность.

G>Ни одного реального примера в ветке так и не смогли привести. Это показатель.


Я бы мог покопать, самому немного интересно, и время есть. Но после того, как ты вначале открыл голосование, а потом фактически обвинил в профессиональной некомпетентности (дословно: "большого числа говнокодеров, которые прочитали книгу по алгоритмам и теперь пытаются сверкать своими знаниями") проголосовавших против твоей позиции (на сейчас минимум 7+32+9 == 48%) — я сильно сомневаюсь, что стоит тебе отвечать конструктивно — это будет метание бисера перед сам знаешь кем.

Поэтому я лично приведу пример не раньше, чем ты в этой теме публично принесёшь извинения за фразу про "говнокодеров" и "пытаются сверкать".
The God is real, unless declared integer.
Re[16]: [Голосование] Нужен ли binary tree если есть hash таблица
От: Gattaka Россия  
Дата: 20.06.17 06:56
Оценка: +1 -9 :)))
Здравствуйте, netch80, Вы писали:

N>Поэтому я лично приведу пример не раньше, чем ты в этой теме публично принесёшь извинения за фразу про "говнокодеров" и "пытаются сверкать".


До чего у вас на Украине менталитет конфликтный. Казалось бы безобидный вопрос заданный еще в самом начале разговора остался не только без ответа, но еще подтянули минометы, танки, батальен Азов и понеслось. Прям ты приведешь пример, щаз.
Re: [Голосование] Нужен ли binary tree если есть hash таблица
От: Cyberax Марс  
Дата: 20.06.17 09:35
Оценка:
Здравствуйте, Gattaka, Вы писали:

G>Коллеги, создал голосование о необходимости выбора между binary tree и хэш таблицей. Если вы такой выбор осуществляли не могли бы вы описать код и ситуацию где это возникло.

Постоянно нужно. Для нескольких целей:
1) Запросы по диапазону ключей.
2) Упорядоченный перебор.
3) Подмножество пункта 2 — полностью воспроизводимые результаты. Т.е. чтобы два запуска с одними и теми же данными выдавали одинаковый результат.

Язык — Java.
Sapienti sat!
Re[3]: [Голосование] Нужен ли binary tree если есть hash таб
От: vsb Казахстан  
Дата: 20.06.17 10:12
Оценка:
Здравствуйте, netch80, Вы писали:

vsb>>Дерево даёт упорядоченность. Это и плюс (если она нужна) и минус (элементам нужен компаратор). Обе структуры нужны.


N>[UPD] А для хэша нужен собственно hash code. Иногда получается, что сравнить элементы можно, а вот получить от элемента что-то, достойное для использования как хэш-код — дзуськи.


Ну получить хэш код можно всегда, я по крайней мере не представляю, когда нельзя, разве что элемент это какой-то очень чёрный ящик, но это уже проблема архитектуры.
Re[2]: [Голосование] Нужен ли binary tree если есть hash таблица
От: vsb Казахстан  
Дата: 20.06.17 10:14
Оценка: +2
Здравствуйте, scf, Вы писали:

scf>А вообще equals/hashCode на каждом объекте — великое изобретение Java, значительно увеличивающее её быстродействие.


Можно раскрыть мысль? equals и hashCode из Object бесполезны чуть менее чем полностью. Мне никогда не нравилась эта куча мусора в Object.
Re[5]: [Голосование] Нужен ли binary tree если есть hash таблица
От: vsb Казахстан  
Дата: 20.06.17 10:18
Оценка:
Здравствуйте, netch80, Вы писали:

vsb>> А вот тот факт, что хеш-таблица может при вставке начать всё копировать в новую структуру, если старая забита, вносит определённую непредсказуемость.


N>Incremental resizing не так редко — например, AFAIR, в MSVC STL оно вместе с двоичным размером таблицы.


А как это работает? Индексы же меняются при изменении размера таблицы, даже если в 2 раза увеличивать, половину элементов нужно переставлять.
Re[6]: [Голосование] Нужен ли binary tree если есть hash таблица
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 20.06.17 10:29
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>>> А вот тот факт, что хеш-таблица может при вставке начать всё копировать в новую структуру, если старая забита, вносит определённую непредсказуемость.


N>>Incremental resizing не так редко — например, AFAIR, в MSVC STL оно вместе с двоичным размером таблицы.


vsb>А как это работает? Индексы же меняются при изменении размера таблицы, даже если в 2 раза увеличивать, половину элементов нужно переставлять.


Ну да, так оно и работает. На каждую изменяющую операцию с таблицей — берётся 1-2 элемента из старой таблицы, пересчитывается хэш и вставляется в новую в нужное место.
При этом по старой таблице ползёт такой себе чистильщик, убирающий из неё элементы из последовательных позиций массива.

В случае двоичных таблиц там эта передвижка в новую таблицу упрощается (если упрощается). Смутно помнится, что её могут так ресайзить на месте, тогда после одного собственно realloc на массив (дорогой) уже примерно половину элементов не надо переставлять в новую верхнюю половину таблицы, а другую примерно половину таки переносят. Что-то не могу нагуглить детали, так что всё по памяти.
The God is real, unless declared integer.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.