По поводу мозгов вспомнилось.
Два алгоритма, вычисляющие одну и ту же функцию достаточно разумным образом (т.е. не содержащие явно бессмысленных действий), для нашей головы могут ощутимо различаться по трудоемкости. Пример. Когда руки заняты монотонной работой, мне случается развлекаться заданием "найти все простые числа между
и
" (
и
трехзначные и нечетные). Давно заметил, что гораздо легче не проверять делимость на
подряд у
, а идти от списка простых
- найти минимальное простое
такое, что
и, пока не встретится это
, вообще забыть про семерку, а потом вычислить
и снова забыть про семерку. Потому что то, что
- это не
, мне понятно автоматически, это, так сказать, аппаратно встроено в мозг - различать два запомненных образа. А вот чтобы проверить, делится ли
на
, пришлось бы приложить некоторое усилие.