Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.10.19;
Скачать: CL | DM;

Вниз

Поделитесь красивыми/неожиданными решениями с виду сложных задач?   Найти похожие ветки 

 
Vlad Oshin ©   (2008-08-27 09:53) [0]

Имеющих решение (смысл их решать таким способом) только при наличии скоростного "вычислителя" (PC подойдет :))

Мне понравилась такая:
Не знаете ли Вы алгоритма определения площади объекта,
определяющего площадь рисунка
растрового или векторного(без разницы), т.е. рисунок не
прямоуголник, а некая безформенная область. И просто надо
задаваясь масштабом и этим рисунком определить на выходе
площадь объекта.
У меня и у самого встают `волосы дыбом` при одной только
мысли вручную интегрировать данное художество :(.

 Надо вычислить площадь пруда произвольно сложной формы. Обводим этот пруд прямоугольником с известными длиной L и шириной W - такими, чтобы весь пруд заведомо оказался внутри прямоугольника.
Случайным образом кидаем в прямоугольник N камней и считаем количество всплесков. Пусть их было M. Тогда с определенным приближением площадь пруда будет равна M * L * W / N. При достаточно большом N получаем практически точное значение (с погрешностью, во всяком случае, не хуже, чем дают детерминированные методы численного интегрирования).
Метод, как видите, очень прост. "Кидание камней" моделируется через
Randomize и Random, а "всплеск" можно проверить, скажем, через цвет
пикселя (конечно, сначала надо чем-то залить обрамляющий прямоугольник).
Юрий Зотов


 
иной пример   (2008-08-27 10:39) [1]

Организация внедряет новое клиентское ПО для своих клиентов.
Ранее клиенты использовали разное ПО от разных производителей.

В новом и старом ПО есть справочники контрагентов.
Хранение справочников было реализовано на различных субд различных версий и типов.

Требуется дешево и быстро обеспечить миграцию стправочников в новое ПО.

Решение:
Не заморачиваться вообще с импортом данных из разнородных субд на у клиентов.
Наполнить новые справочники по имеющимся в организации клиентским документам (платежкам)


 
tesseract ©   (2008-08-27 10:44) [2]


> Наполнить новые справочники по имеющимся в организации клиентским
> документам (платежкам)


Платёжки из баз проще вырезать ? Жесть. Есть специальный софт - завёться скипт на perl-е    которым всё и делаеться. Например у моей конторы ~ 1500 юрлиц. В прошлой ~ 4000-4500 Представляюеш сколько их с бумаги переносить ?

Решение нестандартное :  
 Импортировать в свой софт платёжки через выгрузку с клиент-банков, они в 95 % случаях имеют выгрузку  истории платежей.


 
shlst   (2008-08-27 10:44) [3]

Площадь легко искать, я по дискавери в программе "Грязная работёнка" видел - там Майк работал на фабрике по обработке шкур, и показали механический станок для определения их площади. станок прошлого века, но точный -
суть работы над столом много колёс подряд - ||||||||  между колёс и столом просовывают шкуру, колёса катятся по шкуре, где нет шкуры там не катятся. и в зависимости от угла поворота колёс вычисляется площадь и показывается стрелкой))
это как вручную интеграл искать - разбивать на области вертикальные и суммировать, изящное решение этот станок :)


 
Jeer ©   (2008-08-27 10:45) [4]


> Мне понравилась такая:


Это даже не смешно, "патаму-чо" метод "Монте-Карлы" известен с незапамятных времен и достаточно широко применяется


 
иной пример   (2008-08-27 10:50) [5]

Платёжки из баз проще вырезать

Они и вырезаются из платежек. Но не у клиентов.
В старом ПО зоопарк субд включая всякую экзотику.
В чем вся и соль.


 
boriskb ©   (2008-08-27 10:51) [6]


> метод "Монте-Карлы" известен с незапамятных времен


И что из того?
Если я не знаю про таблицу умножения и пытаюсь вычислить
2+2+2+2+....+2
и мне кто то подскажет, что существует операция "*" , я ему только спасибо скажу.
Другое дело что "неожиданным решением" назвать не возьмусь :)


 
Vlad Oshin ©   (2008-08-27 10:55) [7]

хотел агит.работу провести, показать новичку как можно комп применить

спасибо за примеры ...


 
Mystic ©   (2008-08-27 11:23) [8]

Кнута что-ли почитай. У него таких красивых примеров...


 
Vlad Oshin ©   (2008-08-27 11:53) [9]

интересует неожиданное, казалось бы, не связанное с программированием


 
Дуб ©   (2008-08-27 12:15) [10]

>Vlad Oshin ©  

:)

1. Измерить высоту останкинской башни: Берем бутылку и двигаем ее перд взглядом до тех пор пока не закроем башню, меряем высоту бутылки и расстояние до нее. Отходим на 100 метров и проделываем то же самое. Составляем пропорции и считаем высоту.

2. Измеряем скорость света: Оказываемся на одном радиусе с ..Юпитером, замечаем время затмения спутника. Ждем около полугода - оказываемся на противопложнлом радиусе с ним, замечаем время затмения того же спутника. Считаем скорость света.

:)


 
Vlad Oshin ©   (2008-08-27 12:27) [11]

А где программирование?
тогда так:

> Измерить высоту останкинской башни

берем twebbrowser, кидаем на форму, navigate на www.ya.ru и:
Останкинская телебашня — телевизионная и радиовещательная башня, расположенная в Москве. Высота — 540 м


> Измеряем скорость света

берем twebbrowser, кидаем на форму, navigate на www.ya.ru и:
Скорость света в вакууме — фундаментальная физическая постоянная, по определению, точно равная 299 792 458 м/с
:)

Надо показать интерес к программированию группе из последних классов
Пруд из [0] интересен тем, что можно брать заранее обсчитываемую фигуру. Чтоб они сами могли посчитать и проверить рассчет этого метода.

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


 
boriskb ©   (2008-08-27 12:37) [12]


> Надо показать интерес к программированию группе из последних
> классов


Нууу... если так...
Тогда надо игрушки показывать...

IMHO, надо интерес не к программированию пробуждать, а интерес к работе головой.


 
Skyle ©   (2008-08-27 12:42) [13]


> boriskb ©   (27.08.08 12:37) [12]

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


 
Mystic ©   (2008-08-27 12:56) [14]

Меня впечатлило в свое время следующее решение на C такой задачи: получить номер первого установленного бита для 64-битного числа и сбросить его.
Применялась для шахмат, поэтому номер бита заменен на константу поля (A1 = 0, B1 = 1, ..., H8 = 63).

static const FLD LSB_Magic[64] =
{
  A8, B4, E1, H5, E8, B2, E2, G5,
  D8, H4, F7, G2, A7, E3, C3, F5,
  C8, C4, F1, C7, E7, A3, G6, F3,
  H8, D4, G1, E6, B6, E4, H1, E5,
  B8, A4, F8, D1, C1, G7, B7, B1,
  A2, D7, D2, H6, A1, F6, C6, H3,
  G4, G8, H7, C2, F2, A5, H2, D6,
  D3, A6, B5, B3, G3, C5, D5, F4
};

static inline FLD pop_lsb_inner(U64* pb)
{
  if (*pb == 0)
     return NF;

  U64 lsb = *pb ^ (*pb - 1);
  unsigned int foldedLSB = ((int) lsb) ^ ((int)(lsb>>32));
  int ind = (foldedLSB * 0x78291ACF) >> (32-6); // range is 0..63

  *pb &= ~lsb;
  return LSB_Magic[ind];
}


 
TUser ©   (2008-08-27 22:20) [15]

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


 
TUser ©   (2008-08-27 22:34) [16]

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

Решение. Нумеруем башни 1, 2, 3, и представим, что они образуют кольцо. На нечетных ходах перекладываем самую мелкую из верхних по часовой стрелке. На четных - самую большую перекладываем против часовой стрелки. На всех ходах пропускаем колышек, если нельзя на него перекладывать, и фишку, если ее вообще нельзя переложить. Например

[321] [] [] (на первом колышке три фишки размеров 3, 2 и 1, фишку 1 передвигаем вперед) -> [32] [1] [] (2 назад, она наибольшая из верхних) -> [3] [1] [2] (1 вперед) -> [3] [] [21] (3 назад, колышек [21] пропускаем, на него нельзя положить 3) -> [] [3] [21] (1 вперед) -> [1] [3] [2] (2 назад) -> [1] [32] [] (1 вперед) -> [] [321] []

Этот метод работает для любого числа N фишек и требует 2^N-1 ходов. Доказывается по индукции.


 
Тыщ ©   (2008-08-27 23:10) [17]

Mystic ©   (27.08.08 12:56) [14]

Сбросить первый установленный бит? Есть получше решение:

; EAX:EDX - 64-bit integer
resetfirstbit:
bsf ecx,edx
jz nolowbits
btr     edx,ecx
jmp exit
nolowbits:
bsf ecx,eax
jz exit
btr     eax,ecx
exit:
ret


 
Юрий Зотов ©   (2008-08-27 23:15) [18]

Есть решение и еще проще: i := 0;


 
ketmar ©   (2008-08-27 23:28) [19]

собрать новый Qt. запустить disigner. увидеть segmentation fault. сидеть, офигевать и удивляться.

решение: откатиться на старый Qt.

---
All Your Base Are Belong to Us


 
Renegat ©   (2008-08-27 23:37) [20]

> получить номер первого установленного бита для 64-битного числа и сбросить его

А BSF/BSR + BTC уже запретили?


 
MsGuns ©   (2008-08-28 00:33) [21]

Блин, вот вам задачка из "простых":

Построить пирамиду с четырехугольником в основании, две противоположные грани которой перпендикулярны основанию.

Решение есть очень даже простое и, главное, НЕОЖИДАННОЕ ;)


 
ketmar ©   (2008-08-28 00:56) [22]

>[21] MsGuns © (2008-08-28 00:33:00)
в евклидовом пространстве или нет?

---
All Your Base Are Belong to Us


 
McSimm ©   (2008-08-28 00:58) [23]

нанять молдаван ?


 
TUser ©   (2008-08-28 01:02) [24]

грани обязаны быть плоскими?


 
TUser ©   (2008-08-28 01:03) [25]

грани обязаны быть плоскими?


 
McSimm ©   (2008-08-28 01:20) [26]

положить в основание неправильный четырехугольник

|><|

такой


 
McSimm ©   (2008-08-28 01:23) [27]

только не уверен насколько они противоположные :)


 
TUser ©   (2008-08-28 02:05) [28]

класс

кстати, еще - нарисовать карандашом (фломастером, ручкой, мелом, ...) на бумажке, не отрывая одного от другого, фигуру, нарисованную в [26]


 
TUser ©   (2008-08-28 02:05) [29]

класс

кстати, еще - нарисовать карандашом (фломастером, ручкой, мелом, ...) на бумажке, не отрывая одного от другого, фигуру, нарисованную в [26]


 
ketmar ©   (2008-08-28 02:50) [30]

>[27] McSimm © (2008-08-28 01:23:00)
Максим, это галстук-бабочка, а не чертёж. %-)

---
Understanding is not required. Only obedience.


 
DrPass ©   (2008-08-28 10:33) [31]


> положить в основание неправильный четырехугольник
>
> |><|

Решение красивое, но немного спорное, т.к. это настолько неправильный четырехугольник, что он стал шестиугольником :)


 
korneley ©   (2008-08-28 10:44) [32]


> У меня и у самого встают `волосы дыбом` при одной только
> мысли вручную интегрировать данное художество :(.

 Фотографируем объект, желательно 5 Мпиксельньной камерой, по синезубому сливаем в комп, определяем коэффициент пиксель = площадь, считаем кол-во пикселей в интерьере. Программно. Интегрирование в полный рост. Любых объектов. Дёшево. Самовывозом из Москвы.


 
Mystic ©   (2008-08-28 12:07) [33]

> А BSF/BSR + BTC уже запретили?

Это решение привязано к платформе.


 
Игорь Шевченко ©   (2008-08-28 12:18) [34]

В свое время меня впечатлила задача о кошках и мышах в амбаре (к теме имитационного моделирования) из книги Гудман, Хидетниеми "Введение в разработку и анализ алгоритмов".

Сколько кошек нужно, чтобы мыши съедали не весь хлеб, собранный жителями деревни.


 
Vlad Oshin ©   (2008-08-28 12:33) [35]


> Игорь Шевченко ©   (28.08.08 12:18) [34]

не нашел.

Это ведь все условие?
Как там, примерно?


 
Игорь Шевченко ©   (2008-08-28 12:41) [36]

Vlad Oshin ©   (28.08.08 12:33) [35]


> не нашел.


Увы, я тоже в электронном виде не нашел, только в бумажном. У меня в бумажном.


> Это ведь все условие?
> Как там, примерно?


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

Кстати еще о занятных задачах - есть, опять же, неплохая книжка Чарльза Уэзерелла "Этюды для программистов". В электронном виде не видел.


 
Vlad Oshin ©   (2008-08-28 12:47) [37]

спасибо
Будем искать (с)

ps
завтра уже идти


 
Vlad Oshin ©   (2008-08-28 12:59) [38]

Книга американского специалиста по системному программированию - уникальный сборник задач по программированию из разных областей: моделирования, точности вычислений, обработки текстов, искусственного интеллекта, конструирования компиляторов. Большинство задач базируется на реальных и игровых ситуациях.
Перевод с английского Ю. М. Баяковского.
Автор(ы): Уэзерелл Ч. Страниц: 288     Год: 1982

http://ru.dleex.com/details/?8701


 
Игорь Шевченко ©   (2008-08-28 13:07) [39]


> http://ru.dleex.com/details/?8701


благодарю, заодно и себе сохраню



Страницы: 1 вся ветка

Текущий архив: 2008.10.19;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.015 c
2-1221045194
Denver
2008-09-10 15:13
2008.10.19
количество COM портов


15-1220026293
XentaAbsenta
2008-08-29 20:11
2008.10.19
Ветка - "Проектирование"


2-1221138778
savyhinst
2008-09-11 17:12
2008.10.19
Вопрос про DLL


15-1220009159
konstantin
2008-08-29 15:25
2008.10.19
Клиент-Сервер-Сервер-База


1-1200679747
ilkz
2008-01-18 21:09
2008.10.19
Приложение и DLL