Алексей Шипилёв - Сжимай меня полностью

Поділитися
Вставка
  • Опубліковано 1 гру 2024

КОМЕНТАРІ • 4

  • @ShamageMSK
    @ShamageMSK 3 роки тому +7

    Честно, я нихуяшеньки не понял, но ощущается, как будто понял. Оч интересно и приятно слушать

  • @razmus89dragovich20
    @razmus89dragovich20 4 роки тому +1

    класс, два плюса

  • @Alexander-mj3jk
    @Alexander-mj3jk 9 років тому

    К вопросу об utf-8. String.charAt() только алгоритмически выполняется за константное время. На практике - кешмиссы.
    На практике конечно оверхед charAt будет существенным, так что если б я делал utf-8, то добавил бы класс CharIterator, а в нем методы seekRelative, seekAbsolute, next, prev, currentIndex, currentChar. Как-то так.

    • @Alexander-mj3jk
      @Alexander-mj3jk 9 років тому

      +Yury Y да. Я о том, что если у нас есть указатель в середину, и мы знаем индекс этого символа, то относительно него продвижение вперед-назад на n символов будет за O(n). А на больших строках именно такая операция (как мне видится) - основная. И если у нас, допустим, есть позиция 10000 кодпоинта, а надо 11000, то мы можем отталкиваться от 10000 а не от 0, и мы потратим O(1000) а не O(11000). Ну и кроме того, надо на сам размер стринга смотреть. Потому, что если он например 11005, то лучше вообще на 11000 позиционироваться с конца.
      Вообще, в том стринге что есть сейчас, на самом деле, честных символов нет - из за долбаных суррогатов. Да, они весьма редки, но как говориться, - осадок остался. Если там где-то у вас в стринге есть суррогаты, то и length это уже не размер, и charAt это не факт что символ.
      Возможно, это лучше было б делать отдельным классом. Тогда стрингу оставили бы его O(1), а какой-нибудь utf8string занимал бы мало памяти.