Учитывая две строки (например, байты), каждая из которых имеет длину s
, их можно сравнить в любом случае, чтобы пройти через префиксную строку, общую для обеих строк, чтобы найти первое различие. Для двух случайных строк средняя длина общего префикса p
составляет приблизительно 1/256
, независимо от длины строки, поэтому сравнение будет O(1)
.
Однако, это отсортировано по номеру строки. Если строки были случайными для начала, после сортировки каждый из них начинает с нуля s/256
нулевых байтов, которые необходимо отсканировать (для этого вероятность того, что у них одинаковое количество нулевых байтов, ничтожно мала, поэтому мы надеваем не нужно беспокоиться об остальном), поэтому сравнение отсортированных строк заканчивается O(s)
. (Отредактировано с исправлением: на самом деле, если строковое представление может предоставить длину в постоянное время, я думаю, вы можете использовать двоичный поиск для сравнения отсортированных строк.)
С другой стороны, мы говорим о сравнении строки в контексте сортировки, и мне не совсем ясно, что мы можем предположить, что временная сложность операций сравнения , имевшая место в контексте сортировки, обязательно будет продуктом O(s)
для каждого сорта, умноженного на ожидаемый количество сравнений, так как среднее сходство сравниваемых строк (как измерено их общим префиксом), вероятно, будет увеличиваться в ходе сортировки.
В результате, я подозреваю, что это можно вычислить временную сложность в размере струн для фиксированной количество строк и наоборот, используя аргумент выше, но я не так уверен в совместной сложности времени в s
и a
хранится на всех возможных путях, чтобы s
и a
могли перейти в безразличие.
Кстати, это указывает на гораздо более эффективный алгоритм: сканирование каждой строки во времени «O (s)» и создание таблицы счетчиков с 256 элементами, очень эффективное представление отсортированных строк! Эти таблицы берут общее время 'O (a * s)' для сборки, а затем могут быть отсортированы с использованием сопоставлений по постоянному времени в общем времени 'O (log (a))', поэтому конечная временная сложность - это только «O (a (s + log a)) ', если я не пропустил что-то ... –
Вы предположили, что строка - это нормальная строка, подобная последовательности обычных символов. Это неправда. –