Поиск:

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


Шустрый
*


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

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



Помогите с задачей, (хотя бы хорошей идеи).
Дана матрица n*n переводов валют.
надо написать алгоритм который за n переводов даёт макс выгоду.
Пояснение: мы должны выйти из какой-то валюты и за n переводов вернутся в неё же.
Валюта с которой начинаются переводы выбирается произвольно(ну то есть надо отыскать ещё валюту из которой наиболее выгодно надо начинать производить переводы)
Вывести путь выгоднейшего перевода
(n<=20)
----------------------
комбинаторика умирает на n=10((((
PM MAIL   Вверх
v2v
Дата 21.5.2008, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

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



это задача Комивояжора которая до сих пор не решена за полиномиальное время smile.


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


Шустрый
*


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

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



не.... вояжёр не подходит.... долго....
надо проверять каждую вершину 
(слишком много модификаций в алгоритме делать)

Это сообщение отредактировал(а) Irdis - 22.5.2008, 00:00
PM MAIL   Вверх
SoWa
Дата 22.5.2008, 06:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

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



За n переводов? Т.е. за линейное время? Если придумаем, то чур нобелевка мне smile
А черт, ведь сейчас буду думать.

Если так, своей выдумкой. Придумал вот что: Если необходимо вернуться в исходную точку за n шагов, то можно попробовать построить в твоей матрице все замкнутые пути (1,1)->(1,1) длины n. И их проверять.
Только я не совсем представляю, как выглядит и работает твоя матрица.


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
v2v
Дата 22.5.2008, 07:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

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



я так понимаю что то вроде: 
__1__2_3 
1 x1 x2 x3
2 y1 y2 y3
3 z1 z2 z3
x1:x3 - стоимость покупки $ из рублей(y), гривен(z)
y1:y3 - стоимость покупки рублей(y) из $, гривен(z)
z1:z3 - стоимость покупки гривен(z) из $, рублей(y)

можно апример включить для начала все переводы валют в цикл , а потом повыбрасывать не выгодные ...



Это сообщение отредактировал(а) v2v - 22.5.2008, 07:11


--------------------
PM   Вверх
Mayk
Дата 22.5.2008, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

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



Цитата(SoWa @  22.5.2008,  10:49 Найти цитируемый пост)
За n переводов? Т.е. за линейное время? Если придумаем, то чур нобелевка мне smile

нет конечно. Из линейнго числа переводов вовсе не следует линейности времени алгоритма.
Цитата(Irdis @  22.5.2008,  03:23 Найти цитируемый пост)

Валюта с которой начинаются переводы выбирается произвольно(ну то есть надо отыскать ещё валюту из которой наиболее выгодно надо начинать производить переводы)

Решение в лоб - n раз запустить комивояжора. А там видно будет.

Метод ветвей и границ говорят не плохо работает в среднем для решения комивояжора.

Кстати в Кормене можно погрепать "арбитраж" - там похожая задача.

Добавлено через 2 минуты и 16 секунд
Цитата(Irdis @  22.5.2008,  03:23 Найти цитируемый пост)
макс выгоду.

Что это такое кстати? 200 йен это круче 198 долларов?

Это сообщение отредактировал(а) Mayk - 22.5.2008, 07:51


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Irdis
Дата 22.5.2008, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



это типо, когда мы вернёмся в исходную валюту, у нас будет больше денег чем было изначально
-----
короче вечерком протестю вояжёра

Это сообщение отредактировал(а) Irdis - 22.5.2008, 10:07
PM MAIL   Вверх
dereyly
Дата 22.5.2008, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



А дополнительные ограничения есть? штраф за перевод в %... Я думаю нужно выложить матрицу как я понимаю нам надо быть в плюсе... Кстате цены зафиксированы во времени или иатрица постоянно обновляется?
PM MAIL   Вверх
SoWa
Дата 22.5.2008, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

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



В условиях релаьного рынка сомнительно, что будет работать.
1000 долларов переведем в валюту подороже(а цена продажи всегда ниже покупки). Оттуда еще продадим. А потом задорого покупать. Сомнительно, что будет smile Хотя спортивный интерес уже есть


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
Irdis
Дата 22.5.2008, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



задача чисто по программированию, никого отношения к реальному миру и личной авторской выгоды не имеет smile 
PM MAIL   Вверх
Mayk
Дата 23.5.2008, 05:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

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



Цитата(Irdis @  22.5.2008,  14:02 Найти цитируемый пост)
это типо, когда мы вернёмся в исходную валюту, у нас будет больше денег чем было изначально

ну так я и спрашиваю - что такое больше денег? 
Цитата(Mayk @  22.5.2008,  11:50 Найти цитируемый пост)
200 йен это круче 198 долларов?




--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
SoWa
Дата 23.5.2008, 05:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

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



Не. Было 1000 рублей.
Перевел в доллары. Из долларов в евро. Из евро в марки. Марки в рубли. Вот по такой цепочке если проходимся, получается 1050 рублей.


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
Irdis
Дата 25.5.2008, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

#include <iostream>
using namespace std;
int main()
{
  int n; 
  cin>>n;
  double **a = new double *[n];
  for (int i=0;i<n;i++)
    a[i]= new double [n];
  
  for (int i=0; i<n; i++) 
    for (int j=0; j<n; j++) 
    cin>>a[i][j];
  
  double *c, *c1;
  int **p;
  
  int start = -1;
  double res = -1.0;
  int *path = new int[n];
  
  for (int s=0; s<n; s++) 
  {
  
    p = new int *[n];
    for (int i=0;i<n;i++)
    p[i]=new int [n];
    c = new double[n];
    
    for (int i=0; i<n; i++) { //последний ход заканчиваеться в s
    c[i] = a[i][s]; p[i][0] = s;
    }
    
    for (int r=1; r<n; r++) { //еще n-1 ход
    
    c1 = new double[n];
    for (int i1=0;i1<n;i1++)
     c1[i1]=-1.0;
    
    for (int i=0; i<n; i++) {
     for (int j=0; j<n; j++) {
      if (c1[i] < a[i][j]*c[j]) {
       c1[i] = a[i][j]*c[j];
       p[i][r] = j;
      }
     }
    }
    
    c = c1;
    
    }
    
    if (c[s] > res) {
    res = c[s];
    start = s;
    int x = s;
    for (int i=n-1; i>=0; i--) {
     path[n-i-1] = (p[x][i]+1); // Валюты нумеруються с 1, а не с 0
     x = p[x][i];
    }
    }
    
  }
  
  cout<<"Start in "<< (start+1)<<endl;
  cout<<"Result = "<< res<<endl;
  
  cout<<("Path: ");
  for (int i=0; i<n; i++) {
    cout<<path[i]<<" ";
  }
  
  cout<<endl;
  return 0;
}

тема закрыта
время O(n^4)

Это сообщение отредактировал(а) maxim1000 - 26.5.2008, 10:43
PM MAIL   Вверх
SoWa
Дата 26.5.2008, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

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



Плюс. Молодец!


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

maxim1000

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


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

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


 




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


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

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