операций считать не будем, IO тоже считать не будем (уже посчитали с dd)
Парсинг входных данных по времени ничтожен, так как его время линейно зависит от входа, а выход у нас квадратичный.
Что остаётся? Лепка строк.
Для этого мы N^2 раз будем читать suf, и N^2 раз писать (pref + 1 + suf + 1). Итого N^2 * (2suff + pref + 2) оперативной памяти, suff = pref = 5 (в байтах), итого 17N^2 байтов.
Пропускную способность взял 15 гигабайт/с, не знаю сколько сейчас на современных компах на DDR4, но должно быть около того. Для оценки сойдёт.
На длине входа N = 1e4 (что у нас и есть) имеем
17e8 [байт] / 15e8 [байт/c], что примерно равно 1.2 сек.
Ну в общем вывод такой, что вы уже около теоретического значения маячите, что довольно хорошо!
это с копированием строк, если без, то формула немного другая. и без учёта кэша
А блин, делим на 15e9 а не на 15e8, соответственно ответ в 10 раз меньше:) 0.12 сек
Где-то ошибка. На выход пишется 1 Гбайт. Соответственно столько же читается. Если мы не учитываем latency, но это никак не 1сек.
Обсуждают сегодня