Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Как создать свой сайт и заработать?" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Программирование с нуля - это совсем просто! 23) Вопросы и ответы
Информационный Канал Subscribe.Ru |
Программирование с нуля - это совсем просто!23) Вопросы и ответыПервое решение задачи Эйнштейна. От Papaleff Для начала обозначим на бумаге 5 "домов" , а потом начнем внимательно читать подсказки.
9. Норвежец живет в первом доме. Следующее.
Рыбки у немца. Следующее.
ответ: немец. К этой теме - об автоматизации решения, мы еще вернемся.
Решила очень быстро, но запомнить всё это не удалось. Следующее.
С девятилетней дочкой сегодня разбирали задачу Эйнштейна про дома! Следующее.
Решил решить задачку про рыбу и вот ,что получилось. Следующее.
1) отмечаем точно известные данные: англичанин = красный; швед = собака; датчанин = чай; зеленый = кофе <> датчанин; Pallmall = птица; 3 = молоко; желтый = Dunhill; норвежец = 1; Marlboro <> кошка; лошадь <> Dunhill, желтый; Winfield = пиво; голубой <> норвежец, 1; Немец = Rothmans; Marlboro <> вода; Следующее. Smisl rassuzhdenia prost:1 dom norvezhtsa(dano),sleduyushii-goluboi,zelenii sleva ot belogo,t.e zelenii ili 3 ili 4,t.k 2 goluboi,anglichanin ili 3 ili poslednii,srednii dom(dano:moloko,t.e,anglichanin,t.k zelenii-kofe),i.t.d metodom isklucheniya А вот самый оригинальный ответ:
А что тут думать :>) Было еще немало подробных и хороших ответов! Спасибо всем. К вопросу автоматизации.
Рыбка плавает у немца. Действительно, зная алгоритм, решить задачу можно быстро. Собственно, все приславшие ответы разделились на две группы. Одни решали своими собственными мозгами, без привлечения какой-либо технологии, другие же, зная общие принципы решения подобных задач, нашли ответ "автоматически" - не прикладывая мысленных усилий (тупо :) У каждого такого подхода, конечно, есть право быть примененным. Если можно - решаем шаблонным, готовым способом, когда главное - цель, результат, а не процесс. Но существует множество задач, к которым шаблонные подходы не применимы. В программировании на 99% шаблонных решений не бывает, даже в достаточно простых программах. Всегда приходится думать самому :) Способ решения подобных данной задач, собственно, описан выше в виде рассуждений решавших читателей. Сводится все в таблицу, и расставляются взаимосвязи между элементами, последовательно проверяя все взаимосвязи между утверждениями. Человеку это сложно, особенно если в задаче не 10-20, а несколько тысяч утверждений. А компьютеру все равно, главное, чтобы данные исходные были правильно сформулированы в понятном ему виде. А это, кстати, задача сама по себе нетривиальная. Фактически придется придумывать свой собственный формальный язык описания входных данных для программы, а программа выполнит роль своеобразного компилятора, который переведет данные на этом языке в вид, пригодный для анализа. В нашем случае это могут быть какие-то взаимосвязи и переменные, типа Ж1 - жилец первого дома, ЗД - зеленый дом, БД - белый дом итд. Затем между ними взаимоотношения задаются, как то так например:
Ж1 = норвежец; Этим обычно занимаются (по хорошему) так называемые инженеры по знаниям, которые все это формализуют в виде, пригодном для программной обработки. Сложность программы, решающей такие задачи (сложность ее создания) - средняя (помните, мы обсуждали, сколько программ надо написать, чтобы стать сильным программистом?). За неделю-две ее вполне можно сделать - как модуль ввода утверждений в формальном виде, как выше, так и модуль анализа. Не универсальный, конечно, а с расчетом на данный класс задач. Десять таких программ напишете - и вы суперпрограммист! :) Одна из первых таких программ (они называются интеллектуальные решатели), была написана в начале 60-х :) Давно, правда? Называлась она General Problem Solver (GPS) Ньюэлла и Саймона. Причем была универсальной и решала достаточно оригинальные логические задачи. А классикой считалась задача "На потолке в клетке висит банан, на полу ящик и обезьяна. Как обезьяне достать банан?". Иногда она усложнялась - на ящик клали ящик поменьше :) Тогда перед тем, как его сдвинуть, надо было додуматься, что сперва придется снять помеху. Итд. В 70-80-е годы в СССР было немало также работ на эту тему. Так, система ПРИЗ решала любые задачи (в словесной форме записанные, на естественном русском языке! только спряжения вручную иногда приходилось подправлять) по геометрии и физике старших классов средней школы. Если кому интересно - замечательная обзорная статья по направлениям искусственного интеллекта академика Поспелова (в Ворде): www.raai.org/about/persons/pospelov/pages/aihistory.doc
Подобные системы характеризуются так называемой скоростью логического вывода - числу обрабатываемых фактов в секунду, на основании которых продвигается вперед решение задачи. Человек вряд ли способен больше 2-3 выводов в секунду делать. По задачке Эйнштейна можно судить - много ли там фактов? Сейчас в Пентагоне активно направлением логического вывода занимаются. Создают роботов со встроенными процессорами логического вывода. Их современная производительность - около сотни тысяч логических выводов в секунду :) По оценкам экспертов, этого уже вполне достаточно, чтобы сделать полноценный боевой робот, способный действовать в реальном времени! Да собственно, таких роботов немало уже. Их недостаток один - слабое умение ориентироваться на местности, для этого надо распознавать препятствия на пути автоматически. Вот здесь машины пока проигрывают. Временно, конечно... Потому что есть еще и направления нейронных сетей и нечеткой логики. Это когда моделируется способ мышления человека - хотя логически мы мыслим очень медленно :) , но вот понимаем - распознаем знакомые и незнакомые вещи очень эффективно. Логический вывод здесь не поможет, здесь не левое, а правое полушарие мозга задействовано. Которое действует интуитивно, анти-логически. А вы ленитесь творческие упражнения делать, только логические просите побольше. Куда больше-то? :) Все равно роботов логикой нам не обогнать. :) А вот за счет ресурсов правой части мозга - легко! Перехитрить, обмануть железяку, обыграть. Но временно это все, опять же... Кстати, упоминавшийся академик Амосов еще в 70-е годы развивал направление в искусственном интеллекте не столько чисто логического рассуждения, сколько именно нечетких понятий, схожих с нейронными сетями. Великая интуиция... Ну мы еще вернемся к его работам. Поэтому не забываем про творческие упражнения! :) (из книги П. Феруччи "Кем мы можем быть").
КОРАБЛЬПредставьте большой корабль, который отчаливает от берега. Ветер наполняет его паруса и он движется в открытое море. Живо представьте, как вздымаются паруса и как нос корабля рассекает волны. Почувствуйте движущую силу ветра и услышьте шум волн. Теперь представьте себя на корабле. Вы у штурвала, перед вами открытое море. Вода искрится на солнце, и вы едва различаете далекую линию горизонта, где сходятся море и небо. Вы ощущаете запах моря и бьющий в лицо ветер. Руками вы чувствуете деревянную поверхность штурвала. Вы поворачиваете штурвал то вправо, то влево, ощущая свою власть над кораблем. Сосредоточьтесь на своей способности направлять корабль в любом направлении. Управление им не требует от вас усилий, и каждое ваше решение тотчас воплощается в действие. Вы чувствуете, что корабль вам подвластен. Осознавайте это ощущение власти, господства, выявляя различные его оттенки, а затем пусть образ угаснет.
КОЛОКОЛПредставьте, что вы лежите на траве на лугу, окруженном горами. Почувствуйте мягкость травы, на которой лежите, вдохните аромат окружающих вас цветов. Посмотрите вверх, на небо. Неподалеку находится небольшая деревенская церковь. Вы слышите, как ударил ее колокол. Его звук чист и приятен. Это ваш звук, звук, способный пробудить в вас неведомую, скрытую прежде радость. Вы снова слышите удар колокола. На этот раз звук его сильнее. Почувствуйте внутренний отклик на этот звук. Осознайте, что он пробуждает ваши скрытые возможности. Теперь прислушайтесь к постепенному замиранию этого звука и уловите момент, когда он затихнет и наступит полная тишина. И снова вы слышите удар колокола. Звук приближается к вам и вы ощущаете, как вибрирует он у вас внутри, в каждой вашей клетке, каждом вашем нерве. И в какой-то момент, возможно на долю секунды, вы становитесь этим звуком - чистым, вибрирующим, не знающим границ. Юмор, кстати, одно из лучших средств развития именно правополушарного мышления. С сайта "Сисадмин тоже человек" http://sysadmin.mail.ru/: Вот вы тут про юзеров, да про ламеров... как они достали, то.. сё.. Кто-то даже защищает их - мол, тоже люди и все такое... А как вам в течение 2 лет обучать барышню лет 35, как правильно вставлять дискетку в дисковод, а потом как правильно файл скопировать туда-сюда? А как вам - если таких барышень штук 5? А как вам вечное нытье их, мол, компы у них плохие - они работают на терминалках, где политиками порезано все - они даже заставку не могут поставить. А как вам - когда окно задвинули в правую сторону и элементов управления не видно. Чтоб закрыть его и распахнуть, полгода обьяснять что дабл-клик на "синенькой полосочке сверху" создаст незабываемый эффект! Они стукнутые винипухи - НЕ ХОТЯТ ничего делать. Если бы была хоть капля желания - они бы хотя бы запоминали все, что им говорят. Ну скажите - ну разве трудно понять, почему не прокатывает пароль на вход в систему, если в окне логона чужой логин! Поменяй же ты, чучело бухгалтерское, логин на свой и будет тебе счастье... Нет... это называется -"компьютер глючит"... Мой мозг коллапсирует.. joda: И я так пытаюсь делать - сделай сама, я тут, рядом стою и наблюдаю, если что - помогу, подскажу, но - сделай САМА !. И вот после таких ситуаций в офисе уже начинают говорить, что я не только хам, а что еще плохо выполняю свои обязаности... А про минимально необходимый уровень пользователя - все забыли ! Нету такого - есть тот, кто все сделает за них... dezt_: нет еще.. одна знакомая сказала что видела 1 неуд..думаю это как раз секретуткин. через пару деньков все выяснится... inarus: сто пудов ! Ctrl-C и Ctrl-V - это просто неподъемная задача для них. я уж не говорю о Alt-F4 и Ctrl-Esc.... А как они делают ярлычки на десктопе ? Это ж можно комедию снимать. А вот вчера - зовет вроде нормальная такая, нечасто достает - грит клава не работает. Я смотрю - точно.. Што за фигня думаю... поднимаю клаву, вытряхнуть мусор с неё (еще одна тема для разговора - грязные мышки и клавы), а с неё вода выливается !!! Аут...
не.. ну главное я понимаю что и я бываю неправ. Кое где перегибаю палку конешно. Ору на них как невменяемый... ну это уже давно перестал делать, потому что это бесполезно делать с женшинами. Гораздо лучше нудным тоном повторять что им нужно сделать. И видеть в накрашеных глазницах блики затухающего интеллекта и единственную живую мысль - "Когда же он закончит умничать, быстро все сделает и свалит...". А я стою на ней и как, бляха, в дет. садике - "Что нужно сделать, когда хочется покакать ? Ну.. ну же.. ну подумайте... ну 100 раз говорил... эх...горшок искать... да,да - горшок.. где горшок стоит ?... ну.. ну..." и т.д. Вот после таких разговоров говорят что я - хам. Может быть. Но как будто мне приятно от так каждый день чтото примитивное, на уровне амёбы разжевывать. Я ж пытаюсь, чтоб они поняли основу - для них же лучше, в конце концов ! хотел добавить - вчера узнаю, что по офису ходит секретутка с бумагой - устраивает опрос "Как вы оцениваете работу нашего сисадмина ?". Знаете что добило ? Три варианта оценок - "неудовлетворительно", "удовлетворительно" и "хорошо"... Из последнего - подходит к компу, заглядывает в экран и спрашивает: "А что это за удаленный помощник - кто его УДАЛИЛ?")))) Ну как тут не любить свою работу? И последние что меня привело в трепет. На мой вопрос - в какой папке она хранила пропавшие документы ОНА С НЕВОЗМУТИМЫМ ВИДОМ ОТВЕТИЛА- В КОРЗИНЕ!!!!
Продолжаем задачки на логику. Во-первых, продолжаем старую линию. Далее. Теперь будем также решать задачки с олимпиад по программированию. Зачем мелочиться, правда? Дело в том, что основное качество программиста - это умение быстро и правильно, :) придумать алгоритм решения задачи. Закодировать его - дело десятое. Ну не десятое конечно, но и не первое. Потому что изучить синтаксис языка программирования можно очень быстро. Типы данных, переменные, оператор присваивания, условный, цикл - и все. Чего тут изучать-то? А вот как формализовать задачу, как описать однозначный, без двусмысленностей, алгоритм пошагового ее решения, - вот что главное-то! Этого-то как раз кодировщики и не умеют... Им дали расписанный по шагам алгоритм, и все. Тут и думать не надо действительно. А для Программиста это умение ГЛАВНОЕ. Поэтому мы с этого занятия, будем учиться формализовывать для компьютера процесс решения задачи. Здесь вот что важно. То есть дана задача, вот такая (это с одной из олимпиад по информатике карельского г. Петрозаводска):
Фанта. Всю неделю бутылка Фанты стоила k рублей, а пустая бутылка стоила m рублей. Компания друзей, собравшихся в понедельник, располагала первоначальным капиталом в n рублей и купила на все эти деньги Фанту. Употребив все, они на следующий день сдали пустые бутылки, добавили сдачу с предыдущего дня и снова на все деньги купили Фанту. Данная процедура продолжалась каждый день, пока была возможность. Программу пока мы писать не будем, а займемся алгоритмом решения. То есть эту задачу решать НЕ НАДО :) А надо описать пошаговый процесс ее решения. Но не решения в плане получения конкретного результата, а в виде инструкции, максимально детальной, как бы для другого человека (компьютера на самом деле). Который потом возьмет, просто по этой инструкции, выполнит действия тупо :) и получит искомый результат. Но сам результат нас как раз не интересует. Нам надо инструкцию решения написать, понятно? Ну вот для наглядности такой пример с Пермской олимпиады.
1. Даны два целых числа a и b. Определить, есть ли в сумме этих чисел две идущие подряд одинаковые цифры. Вот как может быть описан алгоритм ее решения.
1. Сложить a и b, результат запомнить в x. Почему в n в п. 3 занесено число 2, а не 1, догадались? Как-то так и решение задачи про Фанту надо записать. Как и раньше, первым, приславшим правильные ответы на любую из задач (то есть двум максимум :) дается приз - возможность выбрать любой из платных курсов для бесплатного обучения (на условиях вступительного сочинения). Программирование продолжаем в следующем занятии. (c) 2004 Сергей Бобровский bobrovsky@russianenterprisesolutions.com
Школа программирования с нуля
Все предыдущие выпуски базового курса тут:
А перекачать их одним архивом можно отсюда: |
http://subscribe.ru/
http://subscribe.ru/feedback/ |
Подписан адрес: Код этой рассылки: comp.soft.prog.prognull |
Отписаться |
В избранное | ||