DisjointSets и SuffixTree
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 05.11.16 10:09
Оценка:
Сабжи до сих пор лежат в Experimental. Насколько оно стабильно? Может пора в основную ветку перетаскивать?
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re: DisjointSets и SuffixTree
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 05.11.16 10:09
Оценка:
Касательно CompositeRanges тот же вопрос
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[2]: DisjointSets и SuffixTree
От: Sinix  
Дата: 05.11.16 10:51
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Касательно CompositeRanges тот же вопрос

По CompositeRanges — можно перенести, если устраивает, что потом могут быть блокирующие изменения (только на бинарном уровне, при перекомпиляции всё ок).

Мне сильно не нравится текущий подход с логикой, спрятанной в extension methods, но ничего лучше я пока придумать не могу.

Затык в необходимости делать перегрузки и .Contains<T>(T value), и .Contains<TRange>(TRange range) where TRange:IRange<T>

Тупо генерить все комбинации (а диапазонов у нас в итоге 4 класса) не тянет, извращаться с интерфейсами без генериков == боксинг (диапазоны структурами сделаны). В общем, сам себя в ловушку загнал
Re[3]: DisjointSets и SuffixTree
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 05.11.16 13:28
Оценка: 48 (1)
Здравствуйте, Sinix, Вы писали:

AVK>>Касательно CompositeRanges тот же вопрос

S>По CompositeRanges — можно перенести, если устраивает, что потом могут быть блокирующие изменения (только на бинарном уровне, при перекомпиляции всё ок).

Перенес. Пришлось изрядно поковыряться с таргетингом.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[3]: DisjointSets и SuffixTree
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 08.11.16 23:21
Оценка:
Здравствуйте, Sinix, Вы писали:

AVK>>Касательно CompositeRanges тот же вопрос

S>По CompositeRanges — можно перенести, если устраивает, что потом могут быть блокирующие изменения (только на бинарном уровне, при перекомпиляции всё ок).

CompositeRangeInternal.cs с 40 по 72 строку — три internal метода, которые нигде не используются. Да еще и тщательно прокомментированные. Это вообще зачем?
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[4]: DisjointSets и SuffixTree
От: Sinix  
Дата: 09.11.16 05:52
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>CompositeRangeInternal.cs с 40 по 72 строку — три internal метода, которые нигде не используются. Да еще и тщательно прокомментированные. Это вообще зачем?


А, я их (все четыре в смысле) в хелперы хочу вытащить. Только пока не соображу, куда приткнуть с учётом того, что у нас уже есть Lower/UpperBoundary().
Re: DisjointSets и SuffixTree
От: Lexey Россия  
Дата: 09.11.16 13:01
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Сабжи до сих пор лежат в Experimental. Насколько оно стабильно? Может пора в основную ветку перетаскивать?


Если по существующему API SuffixTree вопросов нет, то его можно перетащить.
К DisjointSet'у, помнится, претензии были.
"Будь достоин победы" (c) 8th Wizard's rule.
Отредактировано 09.11.2016 13:02 Lexey . Предыдущая версия .
Re[2]: DisjointSets и SuffixTree
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 09.11.16 14:36
Оценка:
Здравствуйте, Lexey, Вы писали:

L>Если по существующему API SuffixTree вопросов нет, то его можно перетащить.


У меня нет (емнип, у меня было только пожелание впраралель реализовать еще и interval tree на базе наших же Ranges). Если в процессе перетаскивания появятся — напишу.

L>К DisjointSet'у, помнится, претензии были.


И? Ты их собираешься учесть или забить?
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[3]: DisjointSets и SuffixTree
От: Sinix  
Дата: 09.11.16 15:00
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>У меня нет (емнип, у меня было только пожелание впраралель реализовать еще и interval tree на базе наших же Ranges). Если в процессе перетаскивания появятся — напишу.


О, такой вопрос: нам нужен просто interval tree с поиском по границам с-по, или полноценный аналог CompositeRange?

Я пока не уверен, что второй вариант нам нужен, если есть доводы за — это будет отлично. Почему так:


В текущем CompositeRange поддиапазоны всегда хранятся отсортированными по левой границе, т.е. мы можем сделать простой поиск по левой границе за O(log n), но эффективного пересечения с единичным диапазоном не будет.

Для меня это неактуально абсолютно, т.к.
1. В наших сценариях в диапазоне никогда не было больше нескольких сотен поддиапазонов, в большинстве случаев — пара десятков значений.
2. Почти во всех операциях оба операнда — составные диапазоны, т.е. всё равно скатываемся к O(M+N).

Если есть реальные сценарии для универсального класса диапазонов поверх interval tree — отлично, если нет — можем пока отложить.
Re[4]: DisjointSets и SuffixTree
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 09.11.16 15:04
Оценка:
Здравствуйте, Sinix, Вы писали:

S>О, такой вопрос: нам нужен просто interval tree с поиском по границам с-по, или полноценный аналог CompositeRange?


ХЗ. Лично мне, наверное, хватило бы простого, а как остальным не знаю.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[2]: DisjointSets и SuffixTree
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 09.11.16 15:18
Оценка:
Здравствуйте, Lexey, Вы писали:

L>Если по существующему API SuffixTree вопросов нет, то его можно перетащить.


Вопросы по SuffixTree
1) Допиши комментарий к параметрам BuildFor.
2) Названия методов FindBranchingPoint и CreatePendingLink как то не очень коррелируют с void
3) В FindBranch наверное лучше поменять Tuple на ValueTuple или специализированную структурку
4) Насколько необходим implicit operator string(Suffix suffix)?
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[5]: DisjointSets и SuffixTree
От: Sinix  
Дата: 09.11.16 16:04
Оценка:
Здравствуйте, AndrewVK, Вы писали:

S>>О, такой вопрос: нам нужен просто interval tree с поиском по границам с-по, или полноценный аналог CompositeRange?

AVK>ХЗ. Лично мне, наверное, хватило бы простого, а как остальным не знаю.

Ну тогда я предлагаю сделать (по крайней мере пока) банальный Interval tree без всего функционала CompositeRange, просто поверх Range<T>.

Centered interval tree не будет работать для произвольных типов данных, к примеру у диапазона "от одного исключительно до двух исключительно, тип данных — int" вообще нет представимых как int значений. Остаётся только augmented-вариант, как понимаю.

И да, нам именно interval trees нужны?
Re[6]: DisjointSets и SuffixTree
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 09.11.16 16:25
Оценка:
Здравствуйте, Sinix, Вы писали:

S>И да, нам именно interval trees нужны?


Ну, лично мне нужно именно "which of these intervals contains a given point".
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[7]: DisjointSets и SuffixTree
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 09.11.16 16:26
Оценка:
AVK>Ну, лично мне нужно именно "which of these intervals contains a given point".

Дополнительный момент — неплохо было бы иметь какую то балансировку для неравномерного распределения интервалов. Но как это алгоритмически обеспечить — отдельный большой вопрос.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[7]: DisjointSets и SuffixTree
От: Sinix  
Дата: 09.11.16 16:42
Оценка:
Здравствуйте, AndrewVK, Вы писали:

S>>И да, нам именно interval trees нужны?


AVK>Ну, лично мне нужно именно "which of these intervals contains a given point".

Угу, сделаю для CompositeRange, но там по сути O(n) будет. Отсечь "интервалы начинаются после заданной точки" легко, чтоб найти которые заканчиваются до — надо все оставшиеся перебирать.

Как вариант можем рядышком хранить массив "правая граница диапазона; индекс диапазона в основном массиве" и делать бинарный поиск ещё и по нему (сортировать по границе, понятно). По эффективности будет всяко лучше, чем btree на ссылках.

Поиск получается 2*log(n), любые операции — что-то в районе (m+n)*log(n), если правильно прикинул.
Re[8]: DisjointSets и SuffixTree
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 09.11.16 17:24
Оценка: +1
Здравствуйте, Sinix, Вы писали:

S>Угу, сделаю для CompositeRange, но там по сути O(n) будет.


O(n) не интересно, это простой перебор дает. Интересно O(logn).
AVK Blog
Re[8]: DisjointSets и SuffixTree
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 09.11.16 17:31
Оценка: +1
Здравствуйте, Sinix, Вы писали:

S>Как вариант можем рядышком хранить массив "правая граница диапазона; индекс диапазона в основном массиве" и делать бинарный поиск ещё и по нему (сортировать по границе, понятно). По эффективности будет всяко лучше, чем btree на ссылках.

S>Поиск получается 2*log(n), любые операции — что-то в районе (m+n)*log(n), если правильно прикинул.

Выбор подходящего алгоритма это отдельный большой вопрос и он сильно зависит от данных. На малых количествах интервалов (прикидочно 5-10) тупой перебор сортированного массива будет быстрее всего. Если диапазон на целых числах и суммарный диапазон невелик, но диапазонов относительно много, то быстрее всего будет простейшая таблица. Если суммарный диапазон большой, а диапазонов мало, то неплохо будет работать хеш-индекс. А вот если диапазонов много и суммарный диапазон большой, тот тут будет рулить interval tree.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[3]: DisjointSets и SuffixTree
От: Lexey Россия  
Дата: 11.11.16 12:06
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>И? Ты их собираешься учесть или забить?


Они были из разряда: "нет реальных юз-кейсов". К сожалению, тут я ничего сделать пока не могу, ибо мне хватало того, что есть, а сценариев, по которым можно было бы придумать другое API, нет.
"Будь достоин победы" (c) 8th Wizard's rule.
Re[3]: DisjointSets и SuffixTree
От: Lexey Россия  
Дата: 11.11.16 12:15
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Вопросы по SuffixTree

AVK>1) Допиши комментарий к параметрам BuildFor.

AVK>2) Названия методов FindBranchingPoint и CreatePendingLink как то не очень коррелируют с void


Есть предложения по другим названиям?

AVK>3) В FindBranch наверное лучше поменять Tuple на ValueTuple или специализированную структурку


Вроде я менял Tuple на ValueTuple везде, где видел в этом смысл. Но мог и забыть.

AVK>4) Насколько необходим implicit operator string(Suffix suffix)?


Не необходим. Но мне подумалось, что он может быть удобен, поскольку чаще всего пользователю будет нужна именно строка суффикса, а не его полное представление. Если думаешь, что лучше его убрать, то уберу.

В целом, на выходных посмотрю/поправлю.
"Будь достоин победы" (c) 8th Wizard's rule.
Re[4]: DisjointSets и SuffixTree
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 11.11.16 18:40
Оценка:
Здравствуйте, Lexey, Вы писали:

AVK>>2) Названия методов FindBranchingPoint и CreatePendingLink как то не очень коррелируют с void

L>Есть предложения по другим названиям?

Для этого надо вникать в сам алгоритмы. А я чисто внешне, по возникшим WTF при просмотре кода.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.