Говорят, что программированию лучше начинать учиться лет в 10. В очень юном возрасте у человека мышление алгоритмического типа, и поэтому легко понять принципы создания и работы программ. У людей старшего возраста, не программистов и не математиков, мышление уже несколько иного типа. Задача оценивается как бы целиком, и такой человек может каким то образом, не перебирая варианты найти решение, например, увидев сходство поставленной задачи с, казалось бы совершенно другой, но уже решенной.
Раньше я думал, что буду программистом. В школе изучал бейсик, в институте – программирование на Дельфи, ознакомившись перед этим с языком Pascal. Но так сложилось, что программированием на жизнь не зарабатываю. Возможно от того, что мне трудно решать задачи на комбинаторику, задачи, в которых надо просчитывать все варианты, разрабатывать алгоритмы. Пример такой задачи с сайта braingames.ru:
В тюрьме сидят 10 заключенных, каждый — в одиночной камере. Общаться между собой они не могут. В один прекрасный день начальник тюрьмы объявил им, что предоставляет всем шанс выйти на свободу, и предложил следующие условия: «В подвале тюрьмы есть комната с переключателем, имеющим два состояния: ON/OFF (верх/низ). Вас будут в произвольном порядке по одному приводить в эту комнату и через несколько минут уводить. Находясь в комнате, каждый из вас может либо изменить положение переключателя, либо ничего с ним не делать. Персонал тюрьмы трогать этот переключатель не будет. В какой-то момент один из вас (любой) должен сказать, что в комнате побывали все заключенные. Если он окажется прав — всех отпустят, если ошибется — вы навсегда останетесь в тюрьме. Я обещаю, что в комнате побывают все заключенные и что каждого из вас будут приводить туда снова и снова неограниченное число раз». После этого заключенным разрешили собраться и обсудить стратегию, потом развели по камерам. Что им нужно делать, чтобы гарантированно выйти на свободу?
В этой задаче, когда заключенные не знают в каком положении изначально был рубильник и когда заключенных больше двух трудно придумать алгоритм поведения.
А вот другая задача, в которой не нужно алгоритмическое мышление, мне далась легко:
На плоскость, на которую нанесена прямоугольная сетка с шагом n, выливаются чернила в виде множества клякс разного размера и формы. Общая площадь чернильных пятен меньше n². Доказать, что можно сместить сетку таким образом, что ни один узел решетки не окажется залит чернилами.
Тут помогает то соображение, которое в науке называется трансляционная инвариантность. И сразу можно вспомнить теорию металлов, кристаллической решетки, приведенные зоны Бриллюена…
В общем такой вот получился пост в блоге. Думал выложить решение той задачи, которую решил, но передумал.
Поделиться: twitter facebook