Читаем Как сдвинуть гору Фудзи? Подходы ведущих мировых компаний к поиску талантов полностью

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

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

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

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

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

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

Следовательно, это предположение следует сразу поставить под сомнение. Оно прямо не вытекает из формулировки условия задачи. Если вы его примете, то обнаружите, что вам не хватает информации для решения задачи. Очевидно, вы должны взвешивать таблетки, а не баночки.

Примерно то же самое относится и ко второму предположению о том, что нужно взвешивать таблетки только из одной баночки. Иногда возникает опасная тенденция упрощать проблемы. Проще обдумывать ситуацию, когда все таблетки из одной баночки. Но если вы примете подобное предположение (которое опять-таки не вытекает из условия), то не сможете решить головоломку.

Вы можете быстро прийти к выводу, что использовали неверное предположение. Когда вы взвешиваете таблетки только из одной баночки, есть только два возможных исхода — это могут быть или нормальные, или испорченные таблетки. Допустим, вы решили взвесить десять таблеток из баночки номер три, и весы показали 90 граммов — вам повезло. Очевидно, что таблетки в этой баночке испорчены, и вам достался счастливый билет. Проблема в том, что вам могла попасться и любая из оставшихся четырех баночек. Тогда, взвесив десять таблеток, вы узнаете, что у них нормальный вес — 100 граммов. И у вас не будет ни малейшего представления о том, в какой из остальных четырех баночек испорченные таблетки. И так произойдет в любом случае, если вы будете взвешивать таблетки только из одной баночки. Это сильный довод в пользу того, что для правильного ответа на задачу нужно взвешивать таблетки из нескольких баночек.

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

Это всего один бит информации, а каждый программист знает, что невозможно идентифицировать один из пяти объектов при помощи единственного бита информации. Для этого нужно три бита.

Этот анализ, конечно, бесполезен. Он основан на втором предположении. Вы в реальности получаете ответ «да» или «нет» только если все таблетки идентичны, то есть взяты из одной и той же баночки.

Перейти на страницу:

Похожие книги

97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT
Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript
Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript

Данная книга посвящена программированию игр с помощью ActionScript. Здесь вы найдете подробные указания, необходимые для создания самых разных игр – аркад, головоломок, загадок и даже игровых автоматов. В тексте приведены исходные коды программ и детальные, доступно изложенные инструкции. Базовые принципы программирования ActionScript рассматриваются на примере игр, однако вы без труда сможете применить полученные знания и для разработки неигровых проектов, таких как Web-дизайн и реклама. Рекомендации Гэри Розенцвейга помогут вам не только придумывать занимательные игры и размещать их на Web-сайте, но и оптимизировать скорость их работы, а также защищать свои творения от несанкционированного копирования. Представленный в книге код несложно изменить для использования в других программах.Книга предназначена для широкого круга читателей – создателей анимационных роликов, художников-оформителей, программистов и разработчиков Web-сайтов. Издание может также выступать в качестве практического пособия по изучению ActionScript.

Гэри Розенцвейг

Программирование, программы, базы данных / Программирование / Книги по IT
Программирование. Принципы и практика использования C++ Исправленное издание
Программирование. Принципы и практика использования C++ Исправленное издание

Специальное издание самой читаемой и содержащей наиболее достоверные сведения книги по C++. Книга написана Бьярне Страуструпом — автором языка программирования C++ — и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный -ориентированный подход к созданию программных продуктов. Третье издание бестселлера было существенно переработано автором. Результатом этой переработки стала большая доступность книги для новичков. В то же время, текст обогатился сведениями и методиками программирования, которые могут оказаться полезными даже для многоопытных специалистов по C++. Не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явные приведения типов (cast-операторы) и другие. Настоящее специальное издание отличается от третьего добавлением двух новых приложений (посвященных локализации и безопасной обработке исключений средствами стандартной библиотеки), довольно многочисленными уточнениями в остальном тексте, а также исправлением множества опечаток. Книга адресована программистам, использующим в своей повседневной работе C++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».

Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова

Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT