27 трав. 2008 р.

Дружині присвячується (не програмісти не зрозуміють) :)

Моя дружина знайшла собі заняття на той час поки чекає на мене з роботи. Вона розгадує японські кросворди (хто не в курсі, це такі де треба замальовувати клітинки і врезультаті отримуємо малюнок). Вона вже доволі добре нацикалася його розв"язувати, але деякі поставили її в глухий кут.
Тут я згадав студентські роки, коли було нємєряно часу і ми займалися тим що нам подобалося (крім останніх 2-х тижнів перед сесією :) ). Мені закортіло згадати алгоритми і структури даних. Я почав писати програму яка розв"язує японські кросворди :) Пишучи алгоритми розв"язку я зрозумів що я розв"язую ті кросворди набагато гірше за мою кохану. Тому програма не зможе рішити ті кросворди які вона не змогла рішити :(
Прийшлось поміняти тактику. Я рішив примінити грубу силу (повний перебір). Тобто спочатку я використовува ті алгоритми які написав, а після того доповнював все з допомогою перебору всіх варіантів. Це був тернистий шлях згадування що таке рекурсія і як її написати :) Коли я перший раз запустив ту програму, то зрозумів що рахувати вона буде довго і тому треба виводити якісь проміжні результати. Так і зробив. Після нескладних математичних підрахунків вийшло що моя програма буде рахувати результат 2.5Е+110 секунд :) Вобщем ви зрозуміли що Сонце згасне швидше ніж я дочекаюся результату :) Після нескладної оптимізації програма почала працювати в 100 разів швидше :)
Вобщем оптимізація не помогла :)
Тут було тільки 2 варіанти виходу з ситуації:
1. Написати програму розприділених обчислень і роздавати ці обчислення всім бажаючим які поставлять в себе ці програми (так роблять для програм які обчисляють структуру лікарства проти раку і т.д.)
2. Поміняти алгоритм обчислення.

Я прикинув, що при 1-му варіанті, навіть якщо 1 млрд людей поставить собі мою програмку, то ми всеі рівно будемо чекати на результат 2.5Е+99 секунд. Тому цей варіант був відкинутий як не ефективний :)

Це вже було питання плану зможу/не зможу.
І ось, після 4-х годин планування алгоритму і його реалізації та після 2-х годин пошуку багів, вона (програма) народилася. Вона розгадує великі кросворди розміром 28*40 за лічені секунди!

Ура товариші! Успіхів вам на творчій ниві :)

6 коментарів:

Yuriy P сказав...

Молодець. Я теж таку програму написав, коли ще був маленький ;-)

Andriy Babala сказав...

Юра, запатентуй винахід і зароби гроші. Ти тільки подумай, журнали із кросвордами для дуже лінивих будуть продавати з диском. А на диску твоя гордість ....

Cranked сказав...

Сорци в студію :)

P.S. поздоровляю з одруженням :)

Bohdan Mushkevych сказав...

Маси народні просять коду!

Unknown сказав...

Почекайте, я ще його не запантетував :)
За пару днів приведу код в порядок і обов"язково викладу його тут :)

Roman LuVR сказав...

ше треба буде написати кусок програми яка буде складати кросворд. і тоді частина буде складати, частина розвязувати, і комп буде загружений, і програмісти не без заняття :))