Pawel
25.09.2017
10:00:17
@gsomix, смущает дублирование семантики - index это как мы знаем тоже key.
@fillpackart
> Операции поиска по чему угодно - не больше O(log n) (в этом вся соль).
> Но за это платим долгой инициализацией/добавлением/удалением
Ну вот видишь, это всё подтверждает тезис, который я выше озвучил.
sortedmap, dictionary: сложность поиска не больше O(log N), но вставка/удаление - опять таки O(log n), а не O (N), как в sorted list. Если нужно оптимизировать поиск и можно забить на вставку удаление, то какие преимущества у sortedlist ты видишь перед dictionary, у которой поиск и вовсе O(1) ?
> byKey и byIndex - они имеют разный смысл
стесняюсь спросить, а зачем byKey, когда есть byIndex ?
Fill
25.09.2017
10:01:20
это как я в dictionnary по value буду искать не за On?
Pawel
25.09.2017
10:02:14
Vasily
25.09.2017
10:03:28
На самом деле кейс интересный
Google
Fill
25.09.2017
10:03:36
стесняюсь спросить, а зачем byKey, когда есть byIndex ?
у меня есть список объектов, которые являются командами. Я хочу добавлять их в коллекцию по ключу "commandName"
будут кейсы, когда мне нужна будет команда сключом "-start", и будут кейсы, когда мне нужна третья по порядку команда [2]
Vasily
25.09.2017
10:03:55
Надо смотреть, как внутри словаря хранятся значения
Evgeniy
25.09.2017
10:04:02
@gsomix, смущает дублирование семантики - index это как мы знаем тоже key.
@fillpackart
> Операции поиска по чему угодно - не больше O(log n) (в этом вся соль).
> Но за это платим долгой инициализацией/добавлением/удалением
Ну вот видишь, это всё подтверждает тезис, который я выше озвучил.
sortedmap, dictionary: сложность поиска не больше O(log N), но вставка/удаление - опять таки O(log n), а не O (N), как в sorted list. Если нужно оптимизировать поиск и можно забить на вставку удаление, то какие преимущества у sortedlist ты видишь перед dictionary, у которой поиск и вовсе O(1) ?
> byKey и byIndex - они имеют разный смысл
стесняюсь спросить, а зачем byKey, когда есть byIndex ?
Меня, пожалуй, только by key немного смущает. Потому что обращение по индексу может быть полезно, например, если я захочу быстро медиану считать. :)
Pawel
25.09.2017
10:04:38
Fill
25.09.2017
10:04:44
Vasily
25.09.2017
10:04:45
Если массивы, то поиск по значению действительно O(n)
Evgeniy
25.09.2017
10:05:10
Vasily
25.09.2017
10:05:35
или я не понимаю какой-то магии
Fill
25.09.2017
10:05:44
Pauline
25.09.2017
10:08:15
Evgeniy
25.09.2017
10:10:04
Тем, что он не sorted.
Думаю, чаще хочется более простую структуру, не key-value, а просто отсортированный список значений. С индексацией.
Google
Pawel
25.09.2017
10:10:37
Evgeniy
25.09.2017
10:11:24
Vasily
25.09.2017
10:12:43
Evgeniy
25.09.2017
10:13:38
Возможно, это какая-то экономия на спичках для тех, кому не подходит SortedDictionary, но хочется key-value.
> SortedList<TKey, TValue> uses less memory than SortedDictionary<TKey, TValue>.
> If the list is populated all at once from sorted data, SortedList<TKey, TValue> is faster than SortedDictionary<TKey, TValue>.
Ну, такое.
Roman
25.09.2017
10:14:27
Sorted list в гуях полезно
Pawel
25.09.2017
10:14:32
Evgeniy
25.09.2017
10:14:46
Fill
25.09.2017
10:15:28
У SortedDictionnary есть индексы?
Pawel
25.09.2017
10:15:55
а зачем индексы в b-tree?
Vasily
25.09.2017
10:16:13
Кстати да,справедливый вопрос
Fill
25.09.2017
10:16:28
т.е. в sortedDictionnary как я получу предыдущий элемент?
за O(logN)
а в SortedList - за O1
Vasily
25.09.2017
10:17:22
Ну зависит от задачи
Если тебе индекс нужен, то лучше SortedList, наверное
Evgeniy
25.09.2017
10:17:41
Fill
25.09.2017
10:18:03
Google
Evgeniy
25.09.2017
10:18:23
Пример чего?
Зачем может быть нужно получать предыдущий элемент.
Fill
25.09.2017
10:18:35
я приводил
т.е. это типичный кейс, оплачиаем скорость лишней памятью
Evgeniy
25.09.2017
10:27:45
вот тут
Я все равно не понял кейс про третью команду. :)
Vasily
25.09.2017
10:29:30
Кейс с третьей командой странный, да
Fill
25.09.2017
10:29:37
Ты не понял, зачем это вообще нужно - получать следующую. Нужно за тем же, зачем и по ключу - из условий задачи
выполняем команду по ключу, потом следующую, потом следующую - не сошлось, вернулись на две назад, заново выполняем
Evgeniy
25.09.2017
10:31:16
Ок, надо просто хорошую задачу придумать.
Fill
25.09.2017
10:31:27
у меня была такая
юзер заполняет анкету, каждый ответ - команда на запись, при ответе может перейти к любому вопросу, перейти к следующему и предыдущему
в каком-то тестовом задании правда, но была
Pawel
25.09.2017
10:34:01
Fill
25.09.2017
10:35:07
в том кейсе было около 10)
Evgeniy
25.09.2017
10:35:09
Fill
25.09.2017
10:35:26
у вопросов есть номера
по ним юзер и ходит
Pawel
25.09.2017
10:36:06
Fill
25.09.2017
10:37:09
это так, спортивный интерес. Было бы миллионов 20 - тогда да
Google
Fill
25.09.2017
10:38:11
в любом случае, не очень хорошо искать по On, когда можно O1 или OlogN
Pawel
25.09.2017
10:38:33
если N мизерный - то по фиг вообще
Fill
25.09.2017
10:39:31
использование sortedList - не сложней, чем массив, dictionnary или лист,а профит в скорости есть. Why not?
Astmatik
25.09.2017
10:41:31
Извините
Evgeniy
25.09.2017
10:44:42
Вы сегодня какие-то агрессивные.
Fill
25.09.2017
10:45:58
просто структуры данных - очень интимная тема для нас всех
Vlad
25.09.2017
10:46:27
Pawel
25.09.2017
10:49:02
использование sortedList - не сложней, чем массив, dictionnary или лист,а профит в скорости есть. Why not?
профита в скорости нет, уже разобрались благодаря @gsomix . см. выше. есть мизерный профит по памяти в сравнении с sortedmap за счёт адской деградации вставки/удаления.
Первоначальный вопрос остаётся - на хрена это всё, где оно реально полезно и зачем кому-то вообще про это знать? допускаю, всякое бывает, может и чёрт с рогами прегодиться. Но в этом случае нормальный человек скорее возьмёт массив и сделает для него индекс в виде хэша или b-tree, чем будет разбираться в каком-то мутном контейнере. Вот ты же не разобрался как вяснилось ?
Fill
25.09.2017
10:54:55
Диджитал
25.09.2017
10:56:04
System.Containers.Generic.Ridiculous
Pawel
25.09.2017
10:59:36
скорость чего?
вставки - относительно всего, поиска по индексу - относительно массива, поиска по ключу - относительно деревьев
Fill
25.09.2017
11:01:30
ну. Так все эти коллекции являются комбинациями этих скоростей. Нужно быстро искать по ключу - dictionnary. по индексу - массив. По ключу и по индексу - SortedDictionnary. По ключу, по индексу и по value (получение ключа/индекса объекта) - sortedList. Или я чего-то не понимаю?
Andrew
25.09.2017
11:12:37
https://mobile.twitter.com/dsyme/status/911198651808133121?ref_src=twsrc%5Etfw&ref_url=https%3A%2F%2Fsergeytihon.com%2F2017%2F09%2F24%2Ff-weekly-38-be-on-the-safe-stack-today%2F
В чем тут big step?
Просто создали сайт со ссылками на существующие технологии
Или я чего-то не понял?
Google
Pawel
25.09.2017
11:14:42
Evgeniy
25.09.2017
11:15:09
Fill
25.09.2017
11:17:52
Pawel
25.09.2017
11:23:28
"какого хера из коробки нет такой-то структуры данных!?!" - вот честно, за такие фразы хочется начать бить уже сейчас, а вы говорите "чего агрессивные"))
Впрочем, я согласен. В ru-коллективах с вежливостью и корректностью всё ужасно. прошу прощения, если кого-то чем-то обидел
Dmitry
25.09.2017
11:26:00
Внезапно нарисовалась интересная задачка:
Есть произвольное дерево, у каждого листа есть некоторый вес.
Надо разбить дерево на множество деревьев, чтоб сумма весов листьев в каждом дереве не превышала лимит.
А потом собрать дерево в первоначальном виде
Убрав абстракции:
дерево = html-документ
листья = текст в параграфах, спанах, дивах, заголовках...
вес = длинна текста
преобразование = перевот текста с языка на язык
у меня постепенно в голове решение проявляется, но может есть какой-то типовой алгоритм?
Vasily
25.09.2017
11:26:41
пока получается, что есть два дерева условно
Roman
25.09.2017
11:28:25
Я как-то хотел нечто подобное сделать
https://github.com/ninjarobot/FSharp.Text.Docker
Pawel
25.09.2017
11:34:25
== разбить дерево на множество деревьев, чтоб сумма весов листьев в каждом дереве не превышала лимит
сгруппировать dom-узлы по длине текста или что?
Dmitry
25.09.2017
11:35:12
Andrew
25.09.2017
11:37:57
Коммерческая поддержка.
Прочел и заметку в блоге https://compositional-it.com/blog/2017/09-22-safe-release/index.html. Но нигде не увидел явно о коммерческой поддержке. Из чего это следует?
Pawel
25.09.2017
11:46:35
Andrew
25.09.2017
11:47:31
Pawel
25.09.2017
11:48:18
Evgeniy
25.09.2017
11:49:48
Pavel
25.09.2017
11:52:02
Именно. https://safe-stack.github.io/ Смотри последний пункт на сайте
По оброзу и подобию MEAN stack. Это на самом деле большой шаг вперед. Будет годный гайдлайн по созданию веб и мобильных приложений на F# с поддержкой компаний и сообщества.
Andrew
25.09.2017
11:57:27
Смотрю. Заголовок: "куда мне обратиться за помощью". Отмечены 2 компании : Compositional IT, Lambda Factory. Под коммерческой поддержкоя я понимаю, когда компания тратит деньги на развитие проекта, правку багов, предоставляет платную техподдержку и быстрое реагирование на запросы клиентов. Т.е. это нечто большее для меня, чем просто коммерческие компании, использующие и развивающие технологии из стека.
По мне это все же больше как маркетинг и популяризация выглядит. Что конечно тоже полезно.
Pavel
25.09.2017
11:58:30
Это не какой-то продукт
да, в первую очередь маркетинг
есть вопросы - пишешь этим компаниям, все решается в индивидуальном порядке