Re[16]: Правильный погромизд? А чем докажешь?
От: Stanislav V. Zudin Россия  
Дата: 07.06.23 07:12
Оценка:
Здравствуйте, Codealot, Вы писали:

S>>Правда, в случае C/C++/Rust для списков (особенно интрузивных) применимость может быть найдена, и как раз об этом было бы интересно побеседовать.


C>Вместо rope? А зачем?


На этот вопрос у меня есть заготовленный ответ
Там даже есть про богомерзкий разворот односвязного списка

https://rsdn.org/forum/job/7846366.1
Автор: Stanislav V. Zudin
Дата: 05.10.20

https://rsdn.org/forum/job/7846904.1
Автор: Stanislav V. Zudin
Дата: 06.10.20
_____________________
С уважением,
Stanislav V. Zudin
Re[16]: Правильный погромизд? А чем докажешь?
От: so5team https://stiffstream.com
Дата: 07.06.23 14:29
Оценка:
Здравствуйте, Codealot, Вы писали:

S>>Правда, в случае C/C++/Rust для списков (особенно интрузивных) применимость может быть найдена, и как раз об этом было бы интересно побеседовать.


C>Вместо rope? А зачем?


Про rope я наслышан только в контексте строк (т.е. последовательностей байт или символов). Тогда как связный список иногда может рассматриваться как замена контейнерам вроде vector или deque для любых T. Применительно к языкам вроде C++ у связных списков есть такие достоинства как:

— ссылки на содержимое не инвалидируются при модификации контейнера;
— в случае интрузивных списков и использования преаллоцированных элементов списка можно делать операции вставки в контейнер действительно noexcept.

Так же списки позволяют собирать в контейнер объекты, которые в принципе не Copyable и не Moveable. Тут, правда, все равно остается вопрос о том, на не будет ли vector<unique_ptr<T>> эффективнее, чем list<T>. Но это уже от условий зависит.

В общем, интрузивный список где-то раз в год, раз в полгода приходится применять.
Re[17]: Правильный погромизд? А чем докажешь?
От: Codealot Земля  
Дата: 07.06.23 15:29
Оценка:
Здравствуйте, so5team, Вы писали:

S>Про rope я наслышан только в контексте строк (т.е. последовательностей байт или символов).


Ничто не мешает использовать его с любым типом элементов.
Ад пуст, все бесы здесь.
Re[17]: Правильный погромизд? А чем докажешь?
От: Codealot Земля  
Дата: 07.06.23 15:29
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>На этот вопрос у меня есть заготовленный ответ

SVZ>Там даже есть про богомерзкий разворот односвязного списка

А что мешает использовать в этой задаче веревку?
Ад пуст, все бесы здесь.
Re[23]: Правильный погромизд? А чем докажешь?
От: Codealot Земля  
Дата: 07.06.23 15:50
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>и восстановление недостающих/кривых данных.


Это точно обычно не входит в парсинг.

SVZ>А просто парсер накарябать — это задача уровня курсовика для студента.


Как показывает практика, современные эксперты по сортировке гномов не в состоянии сделать даже окно, не налажав при этом. Так что это, кхм-кхм, крайне оптимистично.
Ад пуст, все бесы здесь.
Re[18]: Правильный погромизд? А чем докажешь?
От: Stanislav V. Zudin Россия  
Дата: 07.06.23 15:54
Оценка: +1
Здравствуйте, Codealot, Вы писали:

SVZ>>На этот вопрос у меня есть заготовленный ответ

SVZ>>Там даже есть про богомерзкий разворот односвязного списка

C>А что мешает использовать в этой задаче веревку?


Чем она лучше односвязного списка в приведённом примере?
Даже не так, как rope вообще применима в приведённом примере?

Список использовался, потому что нужно хранить упорядоченный набор элементов (вершин). Над каждым элементом можно производить манипуляции (изменение координат, добавление, удаление), не затрагивая соседние. Каждый элемент должен быть идентифицируемым. Списки делятся, объединяются очень легко.
Наконец, все операции должны поддерживать Undo/Redo.

Ну и как тут поможет rope, у которой очень специфичная область применения?
_____________________
С уважением,
Stanislav V. Zudin
Re[24]: Правильный погромизд? А чем докажешь?
От: Stanislav V. Zudin Россия  
Дата: 07.06.23 15:58
Оценка:
Здравствуйте, Codealot, Вы писали:

SVZ>>и восстановление недостающих/кривых данных.


C>Это точно обычно не входит в парсинг.


У нас это называлось "Импорт данных".

SVZ>>А просто парсер накарябать — это задача уровня курсовика для студента.


C>Как показывает практика, современные эксперты по сортировке гномов не в состоянии сделать даже окно, не налажав при этом. Так что это, кхм-кхм, крайне оптимистично.


Ну я слышал от своего быв. коллеги, что сейчас с молодыми программистами дело плохо. Ну что же, зато у нас всё хорошо.
Предложений хватает, зарплаты платят хорошие. Будем работать, пока не издохнем
_____________________
С уважением,
Stanislav V. Zudin
Re[19]: Правильный погромизд? А чем докажешь?
От: Codealot Земля  
Дата: 07.06.23 16:30
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>Чем она лучше односвязного списка в приведённом примере?


Как минимум, расход памяти намного меньше. Возможно, также и быстрее.

SVZ>Даже не так, как rope вообще применима в приведённом примере?


Список с эффективной вставкой и/или удалением. В чем разница?

SVZ>Список использовался, потому что нужно хранить упорядоченный набор элементов (вершин).


Упорядоченный в смысле отсортированный, или просто с известной позицией элементов?
Ад пуст, все бесы здесь.
Re[18]: Правильный погромизд? А чем докажешь?
От: so5team https://stiffstream.com
Дата: 07.06.23 16:37
Оценка: +1
Здравствуйте, Codealot, Вы писали:

S>>Про rope я наслышан только в контексте строк (т.е. последовательностей байт или символов).


C>Ничто не мешает использовать его с любым типом элементов.


Но зачем?

Фокус rope string в том, что это дерево, в листах которого расположены непрерывные блоки с CharT произвольного размера. И понятно откуда эти блоки берутся (как и понятно почему они могут быть сильно разными).

Тогда как в случае замены CharT на произвольный T смысл этой кухни теряется.

И непонятно в чем преимущество rope для T перед каким-нибудь условным списком чанков одинаковой емкости.

Как бы то ни было в контексте C++ rope вряд ли может дать те гарантии, какие дает список (они перечислялись выше).
Re[20]: Правильный погромизд? А чем докажешь?
От: Stanislav V. Zudin Россия  
Дата: 07.06.23 16:49
Оценка:
Здравствуйте, Codealot, Вы писали:

SVZ>>Чем она лучше односвязного списка в приведённом примере?


C>Как минимум, расход памяти намного меньше. Возможно, также и быстрее.


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

SVZ>>Даже не так, как rope вообще применима в приведённом примере?

C>Список с эффективной вставкой и/или удалением. В чем разница?

Логарифм в верёвке против константы в списке? Я всё-таки за список

SVZ>>Список использовался, потому что нужно хранить упорядоченный набор элементов (вершин).


C>Упорядоченный в смысле отсортированный, или просто с известной позицией элементов?


Упорядоченный в смысле фиксированный порядок элементов. В частности, вершины полигона или полилинии имеют определенный порядок. Т.е. ты можешь изменить координаты вершины, но взаимный порядок вершин при этом не меняется.
_____________________
С уважением,
Stanislav V. Zudin
Re[21]: Правильный погромизд? А чем докажешь?
От: Codealot Земля  
Дата: 07.06.23 17:06
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>Касательно расхода памяти дерево не будет эффективнее списка.


Если у тебя несколько элементов в каждом сегменте и маленькая глубина в дереве (а здесь большая глубина не нужна), то будет.

SVZ>Для больших элементов, когда накладные расходы пренебрежимо малы, по-сравнению с полезными данными, это роли не играет.


Это может быть, если они очень большие.

SVZ>Логарифм в верёвке против константы в списке? Я всё-таки за список


В худшем случае O(C), где C длина сегмента
Ад пуст, все бесы здесь.
Re[19]: Правильный погромизд? А чем докажешь?
От: Codealot Земля  
Дата: 07.06.23 17:06
Оценка:
Здравствуйте, so5team, Вы писали:

S>Но зачем?


Меньше расход памяти, и может быть быстрее.

S>И непонятно в чем преимущество rope для T перед каким-нибудь условным списком чанков одинаковой емкости.


А это не частный случай веревки?

S>Как бы то ни было в контексте C++ rope вряд ли может дать те гарантии, какие дает список (они перечислялись выше).


Веревка позволяет реализовать даже доступ по индексу, и использовать пул заранее выделенных сегментов никто не запрещает.
"ссылки на содержимое не инвалидируются при модификации контейнера" — ну гипотетически может быть полезно, но я не помню ни одного примера, когда мне это понадобилось бы.
Ад пуст, все бесы здесь.
Отредактировано 07.06.2023 17:09 Codealot . Предыдущая версия .
Re[20]: Правильный погромизд? А чем докажешь?
От: so5team https://stiffstream.com
Дата: 08.06.23 04:41
Оценка: +1 :)
Здравствуйте, Codealot, Вы писали:

S>>Но зачем?


C>Меньше расход памяти, и может быть быстрее.


На первый взгляд сомнительно. А есть какие-то примеры применения rope-структуры не для строк, а для чего-то другого?

S>>И непонятно в чем преимущество rope для T перед каким-нибудь условным списком чанков одинаковой емкости.


C>А это не частный случай веревки?


rope -- это дерево, причем желательно, чтобы оно было сбалансированным, т.е. при большом количестве кусочков оно должно быть "высоким". Тогда как список чанков -- это "плоская" структура.

Тут более актуален вопрос: а не является ли rope с листами фиксированной емкости (да еще и в которых есть пустоты) частным случаем какого-нибудь B-дерева?

S>>Как бы то ни было в контексте C++ rope вряд ли может дать те гарантии, какие дает список (они перечислялись выше).


C>Веревка позволяет реализовать даже доступ по индексу


Если нужен доступ по индексу, то список изначально мимо кассы.

C>и использовать пул заранее выделенных сегментов никто не запрещает.


Могу предположить, что геморра больше, т.к. rope гораздо более сложная структура, ее на коленке не сделаешь. В отличии от интрузивного списка.

C>"ссылки на содержимое не инвалидируются при модификации контейнера" — ну гипотетически может быть полезно, но я не помню ни одного примера, когда мне это понадобилось бы.


Ну вот а мне бывает нужно именно это.
Re[21]: Правильный погромизд? А чем докажешь?
От: Codealot Земля  
Дата: 08.06.23 06:20
Оценка:
Здравствуйте, so5team, Вы писали:

S>На первый взгляд сомнительно. А есть какие-то примеры применения rope-структуры не для строк, а для чего-то другого?


Если взять, к примеру, связный список, но с несколькими элементами в каждом узле — что помешает ему работать?

S>Тут более актуален вопрос: а не является ли rope с листами фиксированной емкости (да еще и в которых есть пустоты) частным случаем какого-нибудь B-дерева?


B-дерево отсортировано.
Ад пуст, все бесы здесь.
Re[22]: Правильный погромизд? А чем докажешь?
От: so5team https://stiffstream.com
Дата: 08.06.23 14:50
Оценка: +1
Здравствуйте, Codealot, Вы писали:

S>>На первый взгляд сомнительно. А есть какие-то примеры применения rope-структуры не для строк, а для чего-то другого?


C>Если взять, к примеру, связный список, но с несколькими элементами в каждом узле — что помешает ему работать?


Интересны примеры использования rope для чего-то отличного от строк. Ибо если это не строки, то смысл rope от меня ускользает.
Так что если вам известны примеры, то поделитесь ссылками, плз. Реально любопытно.

Рассуждать же вокруг да около не интересно. Так-то можно и multimap в качестве priority_queue использовать. Смысл, правда, сложно найти.

S>>Тут более актуален вопрос: а не является ли rope с листами фиксированной емкости (да еще и в которых есть пустоты) частным случаем какого-нибудь B-дерева?


C>B-дерево отсортировано.


Дерево в rope (по сути) тоже отсортировано (по порядковым номерам фрагментов). Тут суть в структуре, когда есть дерево в котором промежуточные узлы просто ведут вниз, а данные находятся в листьях.
Re[23]: Правильный погромизд? А чем докажешь?
От: Codealot Земля  
Дата: 09.06.23 02:09
Оценка:
Здравствуйте, so5team, Вы писали:

S>Интересны примеры использования rope для чего-то отличного от строк. Ибо если это не строки, то смысл rope от меня ускользает.

S>Так что если вам известны примеры, то поделитесь ссылками, плз. Реально любопытно.

Ладно, видимо это все же не rope, а что-то похожее. Самое близкое, что я нашел, это https://en.wikipedia.org/wiki/Unrolled_linked_list
Можно сделать эффективнее, но как это называется я не знаю
Мой пойнт был, что делать связный список из чисел, как это часто любят делать в задачах — это пример того, как делать ни в коем случае не надо.
Ад пуст, все бесы здесь.
Re[24]: Правильный погромизд? А чем докажешь?
От: so5team https://stiffstream.com
Дата: 09.06.23 04:55
Оценка:
Здравствуйте, Codealot, Вы писали:

S>>Интересны примеры использования rope для чего-то отличного от строк. Ибо если это не строки, то смысл rope от меня ускользает.

S>>Так что если вам известны примеры, то поделитесь ссылками, плз. Реально любопытно.

C>Ладно, видимо это все же не rope, а что-то похожее. Самое близкое, что я нашел, это https://en.wikipedia.org/wiki/Unrolled_linked_list


Я привык называть эту штуку chunked list.

C>Можно сделать эффективнее, но как это называется я не знаю


Возвращаясь к вопросу собеседований: имхо, вот такие вот разговоры (спором это сложно назвать) на собеседовании могут дать гораздо лучшее представление о возможностях программиста, чем online-кодинг около-олимпийских задач. Но именно разговоры в смысле рассуждений о применимости тех или иных структур данных (или алгоритмов) в разных условиях, с перечислением достоинств и недостатков, выяснением граничных случаев. Сильно сомневаюсь, что вероятность найти человека, который понимает, где лучше list, где лучше deque, где лучше vector, но при этом не умеет программировать, настолько велика, что с ней нужно считаться на собеседовании. Гораздо вероятнее встретить того, кто зазубрил решения для первых N задачек с leetcode или из какой-нибудь книги типа "Grokking the Coding Interview Patterns".

C>Мой пойнт был, что делать связный список из чисел, как это часто любят делать в задачах — это пример того, как делать ни в коем случае не надо.


+100500
Re[25]: Правильный погромизд? А чем докажешь?
От: Codealot Земля  
Дата: 09.06.23 07:11
Оценка:
Здравствуйте, so5team, Вы писали:

S>Сильно сомневаюсь, что вероятность найти человека, который понимает, где лучше list, где лучше deque, где лучше vector, но при этом не умеет программировать, настолько велика, что с ней нужно считаться на собеседовании.


Ты все же недооцениваешь зубрил.
Ад пуст, все бесы здесь.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.