Что означает Алгоритм маляра Шлемиля?

Алгоритм маляра Шлемиля. Кто такой Шле-миль? Это малый из следующего анекдота:

Шлемиль устроился на работу маляром и должен был наносить разметку посредине дороги. В первый день он взял бочку краски и разметил 300 метров дороги. «Неплохо! - сказал босс. - Ты быстро работаешь!» И заплатил ему денежку.

На следующий день Шлемиль осилил только 150 метров. «Ну что ж, не так здорово, как вчера, но ты все равно быстро работаешь. 150 метров - это не мало», - сказал босс и заплатил ему денежку. Еще через день Шлемиль расчертил 30 метров дороги.

«Всего 30 метров!» - рассвирепел босс. - Это никуда не годится. В первый день ты сделал в десять раз больше. Что случилось?»

«Ничего не могу поделать, - говорит Шлемиль. - С каждым днем приходится все дальше и дальше уходить от бочки с краской».


Этот неважный анекдот в точности иллюстрирует механизм соединения строк в функции strcat. Поскольку функции приходится каждый раз просматривать всю результирующую строку и искать этот проклятый завершающий нуль, она работает гораздо медленнее, чем в действительности необходимо, и очень плохо масштабируется. Масса кода, с которым вы сталкиваетесь ежедневно, содержит эту проблему. Многие файловые системы реализованы таким образом, что при работе с ними не рекомендуется помещать в один каталог много файлов, т. к. это резко снижает производительность. Попробуйте открыть в Windows заполненную мусорную корзину, и вы увидите, сколько для этого требуется времени, которое явно увеличивается с ростом количества файлов нелинейным образом. Где-то там спрятался алгоритм маляра Шлемиля. Всякий раз, когда чувствуется, что время должно быть линейным, а оно оказывается порядка n-квадрат, ищите Шлемиля. Часто библиотеки функций скрывают от вас это обстоятельство. Сразу и не скажешь, что вызовы strcat, помещенные в цикл или просто расположенные один под другим, вопиют «n-квадрат!», хотя именно так оно и есть в действительности.

Именно из-за алгоритма Шлемиля некая программа могла иметь уязвимость в виде переполнения буфера. Это было главной причиной взломов и червей в те достопамятные времена, когда Microsoft Outlook еще не сделал хакинг доступным даже подросткам.



Оставить свой ответ:

Имя:*
E-Mail:
Вопрос:
Skolko buдет пять пдюс сeмь?
Ответ:*
QQpedia21.ru - cамые интересные вопросы