Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

задачка любителям подумать - нужна только голова

14K
29 августа 2006 года
chsminf
11 / / 14.02.2006
сколько не давал эту задачу знакомым, так ни кто толком решения и не дал. здесь двухменый случай, мне пришлось решить трёхмерный случай, но суть решения одинакова. в кратце какую задачу решал я. вобщем в одном гос учреждении, как и везде в гос учреждениях после проведённых мероприятий делался отчёт с цифрами и моя задача состояла в том, чтобы цыфры в отчёте слегка поправлять чтобы они "бились" с общими цифрами которые нужно было показать и которые были извесны до проведения мероприятия. вобщем суть примерно следующая, есть K регионов, каждый регион предоставляет отчёт который содержит N строк M столбцов. вобщем нам на вход приходила трехмернная мартица KxNxM и несколько чисел, одно из которых по сути была суммой всех цисел в этой матрице. естественно реальная сумма чисел в матрице расходилась с тем что давали нам. вот и задача состояла в том, чтобы перересчитать матрицу так, чтобы в ней отклонения от реальных значений были минимальны, но сумма в конечном счёте совпадала с нужным значением. да, нужно добавить самое главное, что всё числа были ЦЕЛЫЕ! собственно в этом то и загвозка вся. вобщем эта задача проста и не требует особых мозгов - находим разницу от заявленного значения к которому нужно матрицу привести и реальными цифрами матрицы и после перемножаем всю матрицу на коефициент, персчитываем матрицу в дробных числах, округляем ёё всю, снова находим разницу между заявленным значением и получившимся, и на этот раз разница не может составлять больше определённого значния целых которое нам нужно добавить/отнять возвращаемся к неогруглённой матрице и выбираем нужное кодличество максимально приближенных до округления чисел, которые нужно округлить в соответствующую сторону, чтобы всё сошлось, короче тут всё просто... да, так вот в инстанцию выше отправлялась не 3Д таблица, а две 2Д - KxN и KxM - где каждый элемент был соостветственно суммуой столбца в 3Д таблице - короче итоги. всё бы ни чего, но в один прекрасный момент, сверху запросили сами значения, а не только итоги, и тут то и возникла обратная задача - по итогам востановить саму таблицу, причём такую которая бы была предельно приближна к реальным значениям.

мутно объяснил, но в 2Д случае будет понятнее. короче вот что есть и что нужно...

дано:
матрица A (n x m), вектор B (n) и вектор С(m). известно что сумма всех элементов вектора B равна сумме всех элементов вектора С, но в общем случае не равна сумме всех элементов матрицы A.
задача построить матрицу A1, такую, что сумма всех элементов матрицы была равна сумме всех элементов вектора B и вектора C, сумма всех элементов i'ой строки матрицы А равна i'тому элементу вектора B, а j'ый столбец матрицы A равен j'тому элементу вектора С, и к тому же чтобы сумма квадратов разниц всех элементов с соответствующими элементами матрицы А1 был минимален.
если по русски, то
AAAAAAAA B - сумма всех А в строке равно элементу В
AAAAAAAA B
AAAAAAAA B
CCCCCCCC
^
сумма столбца А равна элемненту С

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

вот вобщем и всё. да и самое главное - всё числа ЦЕЛЫЕ.

мне эту задачу пришлось решать в реальных условиях, я сразу сказал как понял условие - что задача не решаема, но оказывается вполне решаема и даже очень, особенно когда говорят что всем нам прийдет полный ... плохо вобщем будет всем нам за подделку данных, если мы не подадим цифры с которых мы делали отчёты... :)...
252
29 августа 2006 года
koderAlex
1.4K / / 07.09.2005
Это лечиться вовремя сделанным архивированием .))
350
29 августа 2006 года
cheburator
589 / / 01.06.2006
[QUOTE=chsminf]всем нам прийдет полный ... плохо вобщем будет всем нам за подделку данных, если мы не подадим цифры с которых мы делали отчёты... :)...[/QUOTE]
Это есть плохо! :) Надо пользоваться системами, где подобные отчеты создать невозможно - отчет А (матрица А в твоем примере) всегда будет "биться" с отчетом В и С. Я встречал такие системы, где возможно жуткое расхождение данных, так как база данных организована криво - это типа Парус и пр. В 1С дело обстоит лучше.
А вообще, задача представляет собой ценность как математическая задача. Надо подумать...
350
29 августа 2006 года
cheburator
589 / / 01.06.2006
[QUOTE=chsminf]задача построить матрицу A1, такую, что сумма всех элементов матрицы была равна сумме всех элементов вектора B и вектора C, сумма всех элементов i'ой строки матрицы А равна i'тому элементу вектора B, а j'ый столбец матрицы A равен j'тому элементу вектора С, и к тому же чтобы сумма квадратов разниц всех элементов с соответствующими элементами матрицы А1 был минимален.
[/QUOTE]
Вообще-то есть раздел математики, называется "линейное программирование". Там задача стоит такая же - минимизировать/максимизировать некую функцию. Но в этом случае функция нелинейная, т. е. имеем задачу нелинейного программирования. К тому же в ЛП кроме функции задается система неравенств, а тут у тебя система уравнений. Но это не так важно.
В общем, два варианта: 1. Пока возможно, решаем нашу систему из i+j уравнений (сумма A(i,j) по всем j = B(i) - i уравнений, сумма А(i,j) по всем i = C(j) - j уравнений) до предела, пока возможно, затем переходим к минимизации среднеквадратичного отклонения;
2. Ищем литературу по нелинейному программированию :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог