Peter Almazov писал(а):
Что касается "только доведённые до простых схем методы" - разве мои решения не простые?
Итоговый цикл у Вас вообще такой же, как у меня (разница с принятием точки отсчёта и расстояния между переменными).
Но я показываю, как любому "ночью в пургу задом" этот цикл получить.
А вот Вы сформулировали, действительно, очевидный инвариант, "в просмотренной части нет подходящего свободного куска".
Только это кусок из середины мысли. Начинается мысль с идеи, что "будем искать подходящий свободный кусок". Дальше звучит ваш словесный инвариант.
Дальше, выбирая вектор переменных, решаем, как их увязать. Очевидно, что для понятия "свободный кусок" будет "базовый элемент последовательности" - и будет дальше рассматриваться либо предыдущий, либо последующий. Или, немного в другой формулировке, если вводим две границы просматриваемого куска, то решаем, чем инициализируем границы - либо 0 и ptroffs[0] - как у меня, либо какое-то отрицательное значение и ptroffs[0], и т.п. Естественным образом придём к оптимальному решению, что удобнее, если первая граница задана концом предыдущего указателя - и тогда получает значение 0, а вторая - началом очередного, и охрана цикла строится по второй границе.
Дальше можно составить формально постусловие и инвариант, относительно переменных. А можно ограничиться вашим неформальным "ищем подходящий кусок".
Дальше либо человек знает примеры (что такие ситуации на поиск "подходящего" путём "последовательного просмотра") и сразу пишет цикл с конъюнкцией условий, каждое из которых является отрицанием дизъюнктов целевого постусловия - вот и получается тот самый типовой "линейный поиск", который вас раздражает, либо не знает - и что? Изобретает эту же схему, проверяя, что она соответствует инварианту и обеспечивает постусловие. Сколько раз он её будет изобретать, прежде чем научится узнавать - и писать типовым образом? А дальше навесит на этот паттерн ярлык типа "линейный поиск"?