А все заметили наверху глайдерную пушку, которое через какое-то количество ходов рушит в клочья один из обломков? И еще несколько глайдеров случайно образуются в процессе, если я не ошибаюсь, и улетают в бесконечность.
Ну, конкретно для этой задачи можно составить систему линейных уравнений, которая примитивно решается за N^3 ( можно и быстрей ), в то время как ваш способ имеет экспоненциальную сложность.
А вообще не понял, о чем статья. О том, что интуиция рулит? Ну, так вы написали программу которая делает тупые действия, а не ищет решение данной проблемы, поэтому неудивительно, что она действовала так тупо.
Разумеется, что программа написанная за 5 минут на коленке не может сравниться в изощренности с человеческим мозгом.
Здесь нет никакого противоречия. Само по себе переключение контекста — это очень быстрая и ненапряжная операция. По сравнению с выполнением sql-оператора — копейки. Т.е. выполнять для sql-запроса одно дополнительное переключение контекста ничего не стоит.
Проблемой становится когда переключение контекста выполняется для каждого фетча в запросе ( как в самом первом куске кода). Т.е. если запрос возвращает 100 млн строк, то будет 200 млн. переключений контекста ( туда-сюда), а это уже совсем другое дело.
Т.е. вы когда кодите, думаете «так, эта часть неважна, использую-ка я здесь самый неоптимальный алгоритм который знаю»? Может вы в неважных частях также переменные называете как попало, код не комментируете и не соблюдаете стили форматирования? Использовать эффективные алгоритмы — это такая же необходимая привычка, как и другие правила хорошего кода. Кроме того, опыт говорит, что алгоритм который имеет оптимальный ( или близкий к оптимальному ) порядок сложности для задачи — чаще всего незначительно сложнее в написании, чем неоптимальный ( при определенном опыте ). Вот константы в сложности алгоритма — их, да, можно оптимизировать бесконечно, и этим нужно заниматься только в случае необходимости.
Ну и над действительно большим проектом работает куча людей, и желательно чтобы каждый из них делал хорошо свою часть работы, а не делал второпях ее так, чтобы потом другим людям пришлось все переделывать.
Когда-то говорили «Мы все довольны своим умом и никто положением». А сейчас я вижу слишком много людей которые довольны своей скоростью гугления и считают что это их в чем-то выделяет среди всех остальных. Зато не видел ни одного программиста, который бы жаловался на свой навык гугления. Для программистов — это такой же необходимый навык как умение печатать, и хвастаться им или говорить что он в этом крут — просто странно.
А еще, увы, слишком много людей считает
а) что нагуглить можно все
б) что во всем можно разобраться за 3 минуты
Это не так. Можно нагуглить сложность и описание алгоритма по его названию, но нельзя нагуглить алгоритм для данной конкретной задачи, которая сейчас стоит перед тобой. Можно нагуглить названия паттернов, их описания и примерную реализацию — но нагуглив это, ты не научишься ими пользоваться уместно и логично. Можно за 3 минуты нагуглить что такое монады, но это не значит что ты сразу же сможешь применять их с пользой.
Все эти вопросы призваны проверять базу. Человек который знает базу — не тратит время в работе на выяснение тривиальных вещей. Он гуглит более сложные вещи, когда ему понадобится. Не стыдно гуглить Штор-Вагнера, стандарт IEEE 754 или параметры не самых часто используемых функций вашего родного языка, но гуглить «сложность алгоритма сортировки пузырьком» — это честно говоря, гребаный стыд.
Rybka 1.0 Beta w32 — 2817 ( первая версия рыбки которая появилась )
Fruit 2.1 — 2714 ( это та опенсорсная версия Фрукта, из которой были заимствования ).
К сожалению не смог найти какая версия Крафти была выложена на тот момент, но даже спустя 4 года сильнейшая 32-х ядерная версия Крафти
Crafty 23.00 (CB) w32 2CPU — 2720 ( на тот момент было что-то еще слабее ).
Разница в 100 пунктов ЭЛО — это очень весомо. Т.е. матожидаемо победа в матче из 10 партий где-то 6.5 на 3.5, т.е. почти в 2 раза.
По поводу второго вашего утверждения можете почитать ссылку, данную автором вначале статьи. Там есть отдельно документы по поводу как сравнивали с крафти, и как с фруктом.
Попробую написать развернутый комментарий.
1. Сами по себе программы «Сrafty» и «Fruit» на порядок слабее даже «Rybka 1.0 beta», не говоря о нынешней «Rybka 4», которая выиграет у «Rybka 1.0 beta» четыре партии из пяти. Таким образом, мое мнение, что заимствование кода на самом деле не сильно повлияло, и Райлих мог написать ту же самую рыбку, не заимствуя ни строчки кода. А заимствуя, скажем, идеи, что лицензией GPL разрешено. :)
Ну, и думаю, если понадобится Райлих сможет переписать эти фрагменты, если за 4 года работы над проектом они еще остались.
2. Потеря титулов задним числом — думаю, несущественна. Райлих уже прилично заработал на рыбке, и еще заработает, т.к. вряд ли кто-то передумает покупать один из сильнейших шахматных движков из-за этой истории.
3. История со «Стрелкой» ( движок написанный Юрием Осиповым ) довольно мутная. В частности, на форуме шахматных разработчиков автор «Стрелки» Юрий Осипов первоначально сам утверждал, что дизассемблировал «Рыбку». В дальнейшем он почему-то стал утверждать что написал свой движок на основе «Фрукта», а еще позже вместе с единомышленниками создал опенсорсный движок «Ипполит», от которого сразу отпочковались куча форков, как это обычно бывает. Кстати, желающим присоединиться велкам — ippolit.wikispaces.com/. Первоначальные исходники Ипполита на С, кстати, очень сильно наводят на мысль о дизассемблировании какой-то другой программы :)
4. На текущий момент сильнейший движок в мире — «Гуддини», и есть серьезное подозрение на то, что за основу взят кто-то из семейства «Ипполитов» ( в чем автор не признается ). Первоначально этот движок демонстрировал уж очень похожую на Ипполитов игру, но затем автор придумал как его усовершенствовать, чтобы сделать намного сильнее. Движок бесплатный. 2-3 места по разным тестам занимает либо платная «Рыбка», либо различные опенсорсные Ипполитообразные движки. Но в любом случае, утверждать, как это сделано в заголовке что «Рыбка» лучшая — уже, конечно, нельзя.
#2 имхо точнее перевести так: «Пишите вашу программу так, как будто парень, который будет ее поддерживать жестокий психопат, который знает, где вы живете»
Я-то могу.
Пожалуйста: принципиально она решается, разумеется. По схеме Шеннона.
Вопрос в том, решается ли она за реальное время.
А вот от вас я ничего не увидел кроме голословного «задача простая!».
Если простая, будьте добры, решение, или хотя бы наметки к нему.
В противном случае утверждать что она простая — самонадеянно и неуважительно по отношению к тем людям, которые долго думали над ней и не посчитали ее простой.
Именно этим и прет от ваших постов «сейчас я вам тут все на листочке посчитаю!».
P.S. Великая теорема ферма тоже простая на первый взгляд.
Зачет! А вообще когда-то была мысль о запрете этого парадокса на форумах, так же как запрещено скажем, слово «гитлер». Сразу появляется десяток очень упертых твердолобых людей, твердящих «1/2 — хоть ты тресни!!!» и десяток людей до посинения пытающихся их убедить. Через некоторое время ( иногда — неделю) до них, наконец, доходит и они сливаются. Но первоначальное обсуждение к тому моменту уже давно убито.
А вообще не понял, о чем статья. О том, что интуиция рулит? Ну, так вы написали программу которая делает тупые действия, а не ищет решение данной проблемы, поэтому неудивительно, что она действовала так тупо.
Разумеется, что программа написанная за 5 минут на коленке не может сравниться в изощренности с человеческим мозгом.
Проблемой становится когда переключение контекста выполняется для каждого фетча в запросе ( как в самом первом куске кода). Т.е. если запрос возвращает 100 млн строк, то будет 200 млн. переключений контекста ( туда-сюда), а это уже совсем другое дело.
Ну и над действительно большим проектом работает куча людей, и желательно чтобы каждый из них делал хорошо свою часть работы, а не делал второпях ее так, чтобы потом другим людям пришлось все переделывать.
А еще, увы, слишком много людей считает
а) что нагуглить можно все
б) что во всем можно разобраться за 3 минуты
Это не так. Можно нагуглить сложность и описание алгоритма по его названию, но нельзя нагуглить алгоритм для данной конкретной задачи, которая сейчас стоит перед тобой. Можно нагуглить названия паттернов, их описания и примерную реализацию — но нагуглив это, ты не научишься ими пользоваться уместно и логично. Можно за 3 минуты нагуглить что такое монады, но это не значит что ты сразу же сможешь применять их с пользой.
Все эти вопросы призваны проверять базу. Человек который знает базу — не тратит время в работе на выяснение тривиальных вещей. Он гуглит более сложные вещи, когда ему понадобится. Не стыдно гуглить Штор-Вагнера, стандарт IEEE 754 или параметры не самых часто используемых функций вашего родного языка, но гуглить «сложность алгоритма сортировки пузырьком» — это честно говоря, гребаный стыд.
В огороде бузина, а в Киеве дядька? Здесь два независимых утверждения.
По поводу первого.
Смотрим авторитетный рейтинг CEGT. www.husvankempen.de/nunn/40_4_Ratinglist/40_4_AllVersion/rangliste.html
Rybka 1.0 Beta w32 — 2817 ( первая версия рыбки которая появилась )
Fruit 2.1 — 2714 ( это та опенсорсная версия Фрукта, из которой были заимствования ).
К сожалению не смог найти какая версия Крафти была выложена на тот момент, но даже спустя 4 года сильнейшая 32-х ядерная версия Крафти
Crafty 23.00 (CB) w32 2CPU — 2720 ( на тот момент было что-то еще слабее ).
Разница в 100 пунктов ЭЛО — это очень весомо. Т.е. матожидаемо победа в матче из 10 партий где-то 6.5 на 3.5, т.е. почти в 2 раза.
По поводу второго вашего утверждения можете почитать ссылку, данную автором вначале статьи. Там есть отдельно документы по поводу как сравнивали с крафти, и как с фруктом.
www.chessvibes.com/reports/rybka-disqualified-and-banned-from-world-computer-chess-championships/
1. Сами по себе программы «Сrafty» и «Fruit» на порядок слабее даже «Rybka 1.0 beta», не говоря о нынешней «Rybka 4», которая выиграет у «Rybka 1.0 beta» четыре партии из пяти. Таким образом, мое мнение, что заимствование кода на самом деле не сильно повлияло, и Райлих мог написать ту же самую рыбку, не заимствуя ни строчки кода. А заимствуя, скажем, идеи, что лицензией GPL разрешено. :)
Ну, и думаю, если понадобится Райлих сможет переписать эти фрагменты, если за 4 года работы над проектом они еще остались.
2. Потеря титулов задним числом — думаю, несущественна. Райлих уже прилично заработал на рыбке, и еще заработает, т.к. вряд ли кто-то передумает покупать один из сильнейших шахматных движков из-за этой истории.
3. История со «Стрелкой» ( движок написанный Юрием Осиповым ) довольно мутная. В частности, на форуме шахматных разработчиков автор «Стрелки» Юрий Осипов первоначально сам утверждал, что дизассемблировал «Рыбку». В дальнейшем он почему-то стал утверждать что написал свой движок на основе «Фрукта», а еще позже вместе с единомышленниками создал опенсорсный движок «Ипполит», от которого сразу отпочковались куча форков, как это обычно бывает. Кстати, желающим присоединиться велкам — ippolit.wikispaces.com/. Первоначальные исходники Ипполита на С, кстати, очень сильно наводят на мысль о дизассемблировании какой-то другой программы :)
4. На текущий момент сильнейший движок в мире — «Гуддини», и есть серьезное подозрение на то, что за основу взят кто-то из семейства «Ипполитов» ( в чем автор не признается ). Первоначально этот движок демонстрировал уж очень похожую на Ипполитов игру, но затем автор придумал как его усовершенствовать, чтобы сделать намного сильнее. Движок бесплатный. 2-3 места по разным тестам занимает либо платная «Рыбка», либо различные опенсорсные Ипполитообразные движки. Но в любом случае, утверждать, как это сделано в заголовке что «Рыбка» лучшая — уже, конечно, нельзя.
ГМОяндекс-бар»Пожалуйста: принципиально она решается, разумеется. По схеме Шеннона.
Вопрос в том, решается ли она за реальное время.
А вот от вас я ничего не увидел кроме голословного «задача простая!».
Если простая, будьте добры, решение, или хотя бы наметки к нему.
В противном случае утверждать что она простая — самонадеянно и неуважительно по отношению к тем людям, которые долго думали над ней и не посчитали ее простой.
Именно этим и прет от ваших постов «сейчас я вам тут все на листочке посчитаю!».
P.S. Великая теорема ферма тоже простая на первый взгляд.
Впрочем, вы можете им это доказать, все в ваших руках.