Строковые представления: улучшения по сравнению с веревками? - PullRequest
5 голосов
/ 14 июня 2010

Я хочу представление для строк с быстрой операцией конкатенации и редактирования. Я прочитал статью «Веревки: альтернатива струнам» , но были ли какие-либо существенные улучшения в этой области с 1995 года?

РЕДАКТИРОВАТЬ: Одна из возможностей, которые я рассмотрел ранее, - это использование 2-3 пальца со строками в виде листьев, но я не провел подробного анализа этого; это дает амортизированное добавление / удаление в постоянное время на концах и логарифмическую (по количеству кусков меньшей строки) конкатенацию, а не наоборот для канатов.

1 Ответ

1 голос
/ 03 февраля 2011

Это старый вопрос!Интересно, кто-нибудь читает это?Но все же это интригует.В ваших комментариях вы говорите, что ищете:

Более быстрая асимптотика, или постоянные факторы, или меньшее использование памяти

Ну, веревки имеют O (1) вставку, иO (n) итерация.Вы не можете сделать лучше, чем это.Подстроки и индексация, очевидно, будут более дорогостоящими.Но большинство случаев использования для больших документов не требуют редактирования или произвольного доступа.Если вы объединяете только в конце, одномерный вектор / список строк может улучшить постоянную времени вставки.Я использовал это в JavaScript, потому что у него была такая медленная конкатенация строк.

Говорят, что представление памяти менее эффективно, чем использование строк.Я сомневаюсь, что: если вы работаете на языке, который имеет сборку мусора, веревка позволяет вам использовать один и тот же экземпляр фрагмента строки в нескольких местах.В веревке, представляющей документ HTML, будет много элементов DIV, SPAN и LINK.Это может даже произойти автоматически, если предположить, что эти теги являются константами времени компиляции, и вы добавляете их непосредственно в веревку.Даже для таких коротких фраз размер документа на веревке значительно уменьшится до того же порядка, что и исходная строка.Более длинные строки приведут к чистой прибыли.

Если вы также сделаете древовидный элемент доступным только для чтения, вы можете создавать субтропы (более длинные фразы, выраженные в виде веревок), которые встречаются несколько раз или совместно используются в строках на основе веревки.Недостатком этого совместного использования является то, что такие сегменты осколка веревки нельзя изменить: чтобы отредактировать их или сбалансировать дерево, вам необходимо скопировать граф объектов.Но это не имеет значения, если вы в основном объединяете и повторяете.На веб-сервере вы можете хранить подпункт, который соответствует объявлению таблицы стилей CSS, который используется всеми документами HTML, обслуживаемыми этим сервером.

...