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

Поделиться
HTML-код
  • Опубликовано: 6 янв 2025

Комментарии • 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 занимал бы мало памяти.