11 нояб. 2008 г.

Что может компьютер?

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

Лейбниц, «Opuscules», страница 170.


И здесь у современных школьников возникает естественный вопрос: «А зачем что-то раскачивать, если компьютер и так может перебрать все варианты?»

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

Я убеждён, что решая простые задачи (из серии «сколько есть шестизначных чисел, делящихся на 5, количество чётных цифр в которых равно трём?») без использования компьютера, школьник качает самую важную мышцу тела - мозговую мышцу. Безусловно, справиться с такой задачей на компьютере - тоже полезно (если ребёнку это интересно, то прекрасно, что у него есть такая возможность). Но при этом надо обязательно показать школьнику явную проблему этого подхода: как только в условии задачи мы поменяем слово «шестизначных» на «стозначных», его переборное компьютерное решение не справится с задачей, а решение «на листочке» даже не станет сложнее. И в этом явная сила головы - если хорошо понять тип проблемы, то можно забыть о размере конкретного экземпляра задачи.

Получается, что самое сложное в этом вопросе - показать ребёнку, что для решения некоторых задач нужно знать больше, чем азы. Важно понимать, что не всегда решение «в лоб», которое сразу хочется реализовать на каком-нибудь языке программирования, позволит решить задачу. И поэтому необходимо закачивать в себе способность понимать сложные вещи, не утверждая, что это всё ненужная ерунда, ибо компьютер всё нам посчитает. Новые проблемы, возникающие перед человечеством, могут не уложиться в рамки уже знакомых подходов, поэтому придётся изобрести что-то новое.

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

Предлагаю пример такой задачи, чтобы стало понятнее: Найти самое маленькое натуральное число k, для которого значение выражения 1 + k2 + (k+1)2 + (k+2)2 не делится на 3 (если в RSS-reader'е формула отображается странно, перейдите, пожалуйста на страницу блога).

Если ученик ещё плохо понимает вопросы делимости, то он напишет простой перебор всех k от 1 до какого-нибудь большого числа. Не очень много времени понадобится, чтобы убедиться в отсутствии таких k среди целых чисел, которыми легко оперировать на компьютере (сейчас на целое число обычно выделяется 32 бита). Потом придётся использовать какую-нибудь реализацию «длинных целых» (если хватит квалификации), что откроет дивные возможности перебирать всё более большие значения числа k. Но это никак не поможет решить исходную задачу.

Необходимо, чтобы внутри мозга загорелся вопрос: а существуют ли такие k?

Дальше всё понятно: тривиальное доказательство занимает две строчки, которые не имеет смысла здесь приводить. Самое главное - ребёнок поймёт, что не умея решать простые задачи, имея голову, карандаш и листочек бумаги, он не сможет решить сложные, даже если ему дать все суперкомпьютеры мира.

Я планирую предложить ещё несколько задач такого типа (на простое школьное знание, без которого почти невозможно одолеть задачу, даже при наличии быстрой ЭВМ), поэтому буду благодарен вашим предложениям. Особенно интересны задачи не из области математики (недавно я предлагал физическую головоломку, для решения которой нужно простое знание из школьной физики - как раз интересно что-то подобное). Пожалуйста, присылайте подобные задачки в комментарии.

И ещё об улучшении процесса мышления - хочу порекомендовать статью Эффективный способ повысить умственную работоспособность - простые и понятные вещи, которые полезно периодически перечитывать.

Хорошего вам дня!

24 комментария:

  1. Анонимный11.11.2008, 14:58

    Возможно, кому-то будет интересно...
    Наткнулся недавно вот на такой ресурс с задачками по программированию: Project Euler
    Причем, большинство из них не решаются "в лоб".

    ОтветитьУдалить
  2. Уважаемый аноним, спасибо за ссылку!

    ОтветитьУдалить
  3. Школьники, которые так и не поняли, что многие проблемы легче и быстрее решить на бумаге, часто становятся программистами :) Именно поэтому, во многих компаниях (тот же Майкрософт, Гугл) собеседования начинаются как раз с таких простых задачек.

    Например, какой угол между часовой и минутной стрелкой в 3.15? Или как при помощи весов за минимальное количество операций определить какая из 8-ми монет фальшивая, если известно, что ее масса меньше, чем у остальных?

    ОтветитьУдалить
  4. Sash_ko, полностью согласен с Вами. Досадно, что многие школьники не догадываются о том, что их так будут отбирать, поэтому изначально настроены против мыслительной деятельности. Формулировка «я - программист, мне не надо думать» удручает :(

    А задачку про монеты мы недавно разбирали :) Присылайте ещё.

    ОтветитьУдалить
  5. Мне понравилась такая задачка (я ее упоминал у себя в блоге):

    На лестнице стоят 4 человека. Самый верхний стоит на ступеньке, спрятанной за непроницаемой стеной и не видит никого. Все остальные видят только вышестоящих: A видит B и С, B видит C, С... видит стену.

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

    Дополнительные условия: человечки не могут поворачиваться, не могут переговариваться и перемещаться по лестнице, так же они не могут блефовать и ломать стену.

    ОтветитьУдалить
  6. Sash_ko, я правильно понимаю, что задача специально дана с нечёткими условиями? Судя по комментариям на Вашем блоге, там народ тоже не в полной мере проникся такой постановкой :) Но за идею спасибо.

    ОтветитьУдалить
  7. Анонимный13.11.2008, 16:22

    Задача с лампочками. В комнате с низким потолком без окон и с одной плотно закрывающейся дверью с потолка свисают три лампочки. Снаружи имеются выключатели каждой лампочки. Выключатели можно включать и выключать. Но открыть дверь и зайти в комнату можно только 1 раз. Как определить какой выключатель соединен с какой лампочкой?

    ОтветитьУдалить
  8. Да ну, глупости какие-то. Неужели вы и вправду считаете, что человек, не умеющий думать, может стать программистом?

    ОтветитьУдалить
  9. NightmareZ, как раз наоборот - я убеждён, что человек, не умеющий думать, не сможет стать программистом.

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

    ОтветитьУдалить
  10. Анонимный28.08.2009, 18:29

    На просторах рунета diofant.ru

    ОтветитьУдалить
  11. Уважаемый аноним, спасибо за ценную ссылку!

    ОтветитьУдалить
  12. Анонимный05.09.2009, 06:44

    заинтересовала задачка из комментариев:
    "Задача с лампочками. В комнате с низким потолком без окон и с одной плотно закрывающейся дверью с потолка свисают три лампочки. Снаружи имеются выключатели каждой лампочки. Выключатели можно включать и выключать. Но открыть дверь и зайти в комнату можно только 1 раз. Как определить какой выключатель соединен с какой лампочкой?
    13.11.08 16:22"
    думал-думал, вот что надумал:
    допустим выключатели расположены в ряд - 1 2 3, тогда включаем выключатель 1, ждем минут 10, за это время лампочка которую он включал нагреется, теперь выключаем его, включаем выключатель номер 2 и заходим в комнату - та, которая горит, включалась 2ым выключателем. трогаем руками не горящие лампочки (потолки низкие по условию так что дотянемся), та которая горячая включалась 1ым выключателем, ну а холодная, соответственно 3им.

    ОтветитьУдалить
  13. Уважаемый аноним, да, это классическое решение :)

    ОтветитьУдалить
  14. про людей со шляпами. вы уж сашко простите, я к вам на блог не лазил. может потом.
    Понятно, что если у B и С шляпы одного цвета, то А тут же скажет, что у него другого.
    Если же А будет молчать, то B догадается, что у него шляпа не такого цвета, как у С и скажет об этом. достаточно просто :)

    ОтветитьУдалить
  15. Анонимный27.12.2009, 21:52

    мб будет интересна книга "Как сдвинуть гору Фудзи", там есть про задачки при приеме в Майкрософт

    ОтветитьУдалить
  16. Анонимный19.01.2010, 12:16

    для реализации преступных замыслов грабители изготовили комплект из 10 запальных шнуров.Шнуры имеют переменную толщину,так что шнур горит неравномерно. Однако полное время сгорания равно 1 минуте.Как из имеющегося набора изготовить шнуры, время горения которых равно 45 секунд?75 секунд? Сколько таких шнуров можно изготовить? Шнуры можно тушить, отрезая от них горящую часть.

    ОтветитьУдалить
  17. Уважаемый аноним, спасибо за задачку.

    ОтветитьУдалить
  18. Анонимный12.03.2010, 14:23

    Илья, Вы совершенно правы. Но понимаете ли, что 80% процентов программистов не придется столкнуться с такими задачами - они будут писать перекладывание строк из одной БД в другую или интерфейс с окошечками, где им эти навыки не пригодятся...

    ОтветитьУдалить
  19. Анонимный19.04.2010, 17:05

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

    ОтветитьУдалить
  20. Уважаемый аноним, есть теория, согласно которой для успешного решения сложных задач компьютером необходимо уметь решать простые задачи головой.
    Вы не разделяете её?

    ОтветитьУдалить
  21. Анонимный29.05.2010, 15:56

    Одна очень интересная на мой взгляд задачка) Построена парабола y=x^2. После построений оси вытерли. Необходимо при помощи циркуля, линейки без делений, карандаша, головы восстановить оси.
    P.S. Т.к. имею опыт разбора этой задачи спешу предупредить, что вершина параболы имеет смысл, только тогда, когда есть оси.))

    ОтветитьУдалить
  22. Уважаемый аноним, спасибо за формулировку задачи!

    ОтветитьУдалить
  23. Анонимный06.09.2010, 23:46

    >И поэтому необходимо закачивать в себе способность понимать сложные вещи...

    Закачивать?

    ОтветитьУдалить
  24. m-ivanov,
    ну да, не очень удачно я выразился.
    Иногда же говорят "закачал себе такие-то мышцы", подразумевая интенсивную работу по их формированию. Или "прокачал в себе навык понимать английскую речь", например... Вот и здесь о том же самом - о целенаправленном развитии способностей.

    ОтветитьУдалить