среда, 5 июня 2013 г.

Процессор перебором



Очень часто встречаю печальные опусы пользователей интернета о том, какие программисты криворукие, что они пишут такие глючные программы.

Если посмотреть на задачу написания  компьютерной программы с точки зрения математической логики, то её можно охарактеризовать как дискретную NP-полную задачу. Ну нельзя в программировании наполовину или на четверть написать ту или иную функцию, класс или объект, немножко определить переменную, чуть-чуть задать цикл.
Также известно, что в подобных задачах эффективное решение может быть найдено только полным перебором. И когда я эту мысль высказал одному технарю, он сразу сделал вывод, что данное направление решения задачи - это тупик, т.к. перебирать придется очень долго, чтобы получить хоть какой-нибудь существенный результат.

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

Другое решение - составить математическую модель и включить полный перебор. Если таким способом каждый раз искать один единственный необходимый результат - это естественно очень затратно. Но если перебор будет идти постоянно, и походу сохранять все эффективные решения, то в результате у нас постепенно будет формироваться библиотека из очень оптимизированных шаблонов.

Если и делать такой перебор, то лучше и проще наверное начинать не с каких-нибудь языков программирования,  а с транзисторов микропроцессора. Хотя, все зависит от задачи. 

Комментариев нет:

Отправить комментарий