Автор Тема: Неархитектурная задачка  (Прочитано 43702 раз)

Губанов Сергей Юрьевич

  • Hero Member
  • *****
  • Сообщений: 590
    • Просмотр профиля
    • Домашняя страница
Re: Неархитектурная задачка
« Ответ #75 : Май 17, 2012, 10:27:53 am »
Изменил алгоритм. Что сделал - военная тайна  :) (правда исходник прилагаю).

Стало 0.047 секунды на весь in.txt.

Фактически это уже похоже на время ввода-вывода.

Кстати, всего 248K рекурсивных вызовов.
« Последнее редактирование: Май 17, 2012, 10:29:27 am от Губанов Сергей Юрьевич »

Губанов Сергей Юрьевич

  • Hero Member
  • *****
  • Сообщений: 590
    • Просмотр профиля
    • Домашняя страница
Re: Неархитектурная задачка
« Ответ #76 : Май 17, 2012, 10:45:43 am »
Стало 0.047 секунды на весь in.txt.

Фактически это уже похоже на время ввода-вывода.
На вычисления расходуется 0.022 секунды, и 0.025 секунды уходят на ввод-вывод.

albobin

  • Full Member
  • ***
  • Сообщений: 198
    • Просмотр профиля
Re: Неархитектурная задачка
« Ответ #77 : Май 17, 2012, 10:50:43 am »
накропал на МАМПСе (MUMPS)
чтение и запись в файл
где то 0.01-0.04 сек
на Пентиуме Д 3Ггц  512М

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Неархитектурная задачка
« Ответ #78 : Май 17, 2012, 11:06:03 am »
накропал на МАМПСе (MUMPS)
чтение и запись в файл
где то 0.01-0.04 сек
на Пентиуме Д 3Ггц  512М

Афигеть.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

albobin

  • Full Member
  • ***
  • Сообщений: 198
    • Просмотр профиля
Re: Неархитектурная задачка
« Ответ #79 : Май 17, 2012, 12:05:32 pm »
не совсем афигеть.
это на исходной задаче.
а на файле in.txt не всё ok  :(
0.39 сек ,  но некоторые не решаются (пока), надо кумекать.
А алгоритм без перебора и рекурсий.(пока) :)

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Неархитектурная задачка
« Ответ #80 : Май 17, 2012, 01:06:39 pm »
А раз лучше все равно не стало выдал "военную тайну" самого быстрого алгоритма  :-\ :-\ :-\

Военной тайны не получилось - у меня такое же улучшение было сделано. Предварительная сортировка по количеству возможных вариантов.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Неархитектурная задачка
« Ответ #81 : Май 17, 2012, 01:13:20 pm »
На вычисления расходуется 0.022 секунды, и 0.025 секунды уходят на ввод-вывод.

Да, похоже на предел :) Новые варианты имеет смысл генерить?

Губанов Сергей Юрьевич

  • Hero Member
  • *****
  • Сообщений: 590
    • Просмотр профиля
    • Домашняя страница
Re: Неархитектурная задачка
« Ответ #82 : Май 17, 2012, 01:23:37 pm »
Новые варианты имеет смысл генерить?
Наверное нет.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Неархитектурная задачка
« Ответ #83 : Май 17, 2012, 01:49:58 pm »
Новые варианты имеет смысл генерить?
Наверное нет.
А мне кажется, что да. Потому как начальные условия сильно могут различаться по сложности.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Илья Ермаков

  • Sr. Member
  • ****
  • Сообщений: 493
    • Просмотр профиля
Re: Неархитектурная задачка
« Ответ #84 : Май 18, 2012, 06:28:03 am »
А я решил с обычного обхода дерева делать - и поскольку время меня устроило - никаких эвристик вводить не стал :)

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Неархитектурная задачка
« Ответ #85 : Май 18, 2012, 08:05:59 am »
А я решил с обычного обхода дерева делать - и поскольку время меня устроило - никаких эвристик вводить не стал :)
Гм. Я сильно сомневаюсь что на всех возможных (даже корректных, то есть у которых ровно одно решение) начальных условиях такое решение будет работать меньше секунды.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Губанов Сергей Юрьевич

  • Hero Member
  • *****
  • Сообщений: 590
    • Просмотр профиля
    • Домашняя страница
Re: Неархитектурная задачка
« Ответ #86 : Май 18, 2012, 09:17:12 am »
На будущее, чтоб не затерялось в исходниках, удачный алгоритм одним предложением выражается так:

В дереве поиска следующий шаг рекурсии делать в ветви с наименьшим количеством подветвей.

Эвристика а-ля "жадный алгоритм".

Такой алгоритм фатально обломится если правильный ответ каждый раз (на каждом шаге рекурсии) будет находиться в ветви с наибольшим количеством подветвей, правда такие случаи встречаются редко.
« Последнее редактирование: Май 18, 2012, 09:19:28 am от Губанов Сергей Юрьевич »

Илья Ермаков

  • Sr. Member
  • ****
  • Сообщений: 493
    • Просмотр профиля
Re: Неархитектурная задачка
« Ответ #87 : Май 18, 2012, 01:41:57 pm »
Гм. Я сильно сомневаюсь что на всех возможных (даже корректных, то есть у которых ровно одно решение) начальных условиях такое решение будет работать меньше секунды.
Ну дык я и приводил время - 2с.
Для NP-полной задачи чем плохо, если учесть, что решал я раньше, чем все остальные участники, кроме Влада? :)

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Неархитектурная задачка
« Ответ #88 : Май 18, 2012, 02:39:27 pm »
Гм. Я сильно сомневаюсь что на всех возможных (даже корректных, то есть у которых ровно одно решение) начальных условиях такое решение будет работать меньше секунды.
Ну дык я и приводил время - 2с.
Для NP-полной задачи чем плохо, если учесть, что решал я раньше, чем все остальные участники, кроме Влада? :)

В текущей постановке задача решается за O(1) :-) Но это мелочи.

Я к тому, что в случае разных начальных условий за 2 секунды ты вполне можешь вылезти. Ты пробовал свое решение погонять на других начальных условиях? Ну, например на том пакете из 12ти задач.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Илья Ермаков

  • Sr. Member
  • ****
  • Сообщений: 493
    • Просмотр профиля
Re: Неархитектурная задачка
« Ответ #89 : Май 18, 2012, 06:08:26 pm »
Понятно дело, что могу вылезти.. :)
Вот попробовал:

 2215 msec
 847 msec
 2735 msec
 3456 msec
 9265 msec
 681 msec
 19656 msec
...

Ну, у меня программа нерекурсивная (откат выполняется прямо на рабочем поле), поэтому к нему уже никакой эвристики не прикрутишь :)