Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Найти аргументы функции по значению 
:(
    Опции темы
distorti
Дата 8.11.2006, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 25.7.2005

Репутация: нет
Всего: нет



Дана строго возрастайущая функция f ( N * N) = N (N - множество натуральных чисел + 0) и какое-нибудь ее значение z при неизвестных аргументах.
Проблема: найти все такие пары аргументов х и у, при которых f (x,y) = z

Например:
f (+) 2 ==> [(0 , 2), (1 , 1), (2 , 0)]
PM MAIL   Вверх
maxim1000
Дата 9.11.2006, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



например так:
для начала найти такое a, что f(0,x)>z (лучше взять минимальное, чтобы облегчить себе работу)
и для каждого x<a найти соответствующий y (если есть): f(x,y)=z
искать можно методом бисекции

выглядит не очень эффективно, но чего-то лучше в голову не пришло...


--------------------
qqq
PM WWW   Вверх
poor_yorik
Дата 9.11.2006, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 12.1.2005
Где: Общаги г. Киева

Репутация: 3
Всего: 8



Вопрос автору, монотонность можно понимать так,
Если a1>a2 b1>b2, то f(a1,b1)>f(a2,b2)?
В таком случае можно подмодифицировать двоичній поиск, и делать его отдельно по первой аргументе, отдельно по второй.

--------------------
Семь раз отмерь, один раз - откомпиль.... Семь раз отпей, один раз - отлей... Семь раз отъешь, один раз - не жадничай и другим дай...
PM MAIL YIM   Вверх
maxim1000
Дата 9.11.2006, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



кстати, в том способе, который я предполагал, монотонность понимается так:
f(x+1,y)>f(x,y)
f(x,y+1)>f(x,y)


--------------------
qqq
PM WWW   Вверх
distorti
Дата 9.11.2006, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 25.7.2005

Репутация: нет
Всего: нет



Верно, монотонность понимается так:
f(x+1,y)>f(x,y)
f(x,y+1)>f(x,y) 
PM MAIL   Вверх
Akina
Дата 9.11.2006, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20580
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Во-первых, можно со всей определенностью утверждать, что 

f(x,y) >= x+y

Это облегчает дело... 
Т.е. имея заданное z, мы заведомо знаем максимально возможное x при любом предположении значения y.
С учетом этих утверждений предложение maxim1000 мне представляется вполне разумным.
Итого:

Код

input z
for y= 0 to z
   x = solve(z - y)
   if not (x = null) print x, y
next y
end


Где solve(z - y) - поиск такого x, что f(x,y)=z, причем x ищется в диапазоне 0 .. z - y


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
maxim1000
Дата 9.11.2006, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



кстати, можно ещё по использовать такой факт, что при увеличении y необходимый x уменьшается
т.е. если f(x1,10), а f(x2,9), то можно быть уверенным, что x2>x1


--------------------
qqq
PM WWW   Вверх
Akina
Дата 9.11.2006, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20580
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(maxim1000 @  10.11.2006,  00:00 Найти цитируемый пост)
т.е. если f(x1,10), а f(x2,9), то можно быть уверенным, что x2>x1 

В смысле если f(x1,y1) = f(x2,y2) и x1 > x2, то y1 < y2 ? 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
maxim1000
Дата 10.11.2006, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



Цитата(Akina @  9.11.2006,  22:38 Найти цитируемый пост)
В смысле если f(x1,y1) = f(x2,y2) и x1 > x2, то y1 < y2 ?

да...
f(x1,y1)>f(x2,y1)
f(x2,y2)>f(x2,y1)
y2>y1 (иначе было бы наоборот)


--------------------
qqq
PM WWW   Вверх
distorti
Дата 10.11.2006, 02:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 25.7.2005

Репутация: нет
Всего: нет



Спасибо!
Ключевой момент: f(x,y) >= x+y. 
Только от куда ето следует? не могу понять...


PM MAIL   Вверх
maxim1000
Дата 10.11.2006, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



Цитата(distorti @  10.11.2006,  01:02 Найти цитируемый пост)
Ключевой момент: f(x,y) >= x+y. 
Только от куда ето следует? не могу понять...

на самом деле f(x,y)-f(0,0) >= x+y
сначала доказывается для y=0:
последовательно увеличиваем первый аргумент от 0 до x с шагом 1, при этом функция растёт, как минимум, на 1
потом так же увеличиваем второй аргумент от 0 до y...


--------------------
qqq
PM WWW   Вверх
Akina
Дата 10.11.2006, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20580
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(maxim1000 @  10.11.2006,  13:10 Найти цитируемый пост)
на самом деле f(x,y)-f(0,0) >= x+y

а с учетом что f(0,0) >= 0 ...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
maxim1000
Дата 10.11.2006, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



Цитата(Akina @  10.11.2006,  12:43 Найти цитируемый пост)
а с учетом что f(0,0) >= 0

да... забыл
впрочем, так или иначе, верхняя граница получилась лучше - вместо f(x,y) f(x,y)-f(0,0) smile

Добавлено @ 13:50 
(ну или, по крайней мере, не хуже)


--------------------
qqq
PM WWW   Вверх
distorti
Дата 10.11.2006, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 25.7.2005

Репутация: нет
Всего: нет



Спасибо за помощь! Разобрался..

Вытоге получилось вот что :

Код

invert f z = [ (x,y) | x <- [0..z],  y <- binarySearch x 0 (z-x), y /= -1 ] where
    binarySearch x a b
             | a > b           = [-1]
             | f (x,y) > z    = binarySearch x a (y-1)
             | f (x,y) < z    = binarySearch x (y+1) b
             | otherwise     = [y]
              where y         = (a + b) `div` 2


smile

Это сообщение отредактировал(а) distorti - 10.11.2006, 19:10
PM MAIL   Вверх
distorti
Дата 23.11.2006, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 25.7.2005

Репутация: нет
Всего: нет



хм.... препод не хочет принимать smile

Вцелом мой алгоритм выглядит так:

Код

input fun, z
for x = 0 to a where fun(a,0)  > z
    y = binarySearch : from 0 to (z-x-fun(0,0))
    if ( fun(x,y) = z 
        list.add (x,y)
next x


Проблема в том, что если данная функция растет очень быстро (fun (x,y) = x^100+y^100), то невозможно подсчитать значение от верхнего предела в бинарном поиске: f(x,y), где  y = z-x-fun(0,0). Нужна более точная оценка для максимального у, чем y = z-x-fun(0,0). При етом надо сохранить логорифмическую сложность алгоритма при поиске у.

Есть идеи? smile
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.1170 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.