Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Starikov Alexander                   2:5020/400     25 Oct 2002  19:08:37
 To : All
 Subject : Формирование портфеля
 -------------------------------------------------------------------------------- 
 
 Hello, All!
 
 Есть такая задача - перебрать все возможные комбинации портфеля (в
 процентах) заданного кол-ва тикеров.
 Hаример, если их два, то получить:
 100   0
 99     1
 98     2
 ...
 1       99
 0       100
 
 если три, три, то:
 100   0   0
 99     0   1
 ...
 99     1   0
 ...
 0       0   100
 
 Hаписал следующую везчь:
 
 std::vector< int > percents; // Массив процентов
 
   // Инициализация массива процентов
   percents.clear();
   percents.resize(Tickers_Сount, 0); // Hа кол-во тикеров
 
  // Заполняем массив процентов
 void __fastcall PercentEval(int l)
 {
   int sum;
   int j;
   int k = Tickers_Сount; // Кол-во тикеров
 
   for (int i = 0; i <= 100; i++) // 100%
    {
       percents.at(l) = i;
       sum = 0;
       for (int m = 0; m <= l; m++)
         sum = sum + percents.at(m);
       if (sum > 100)
         exit;
       j = l + 1;
       if (j < k - 1)
           PercentEval(j);
       else
        {
          if (k > 1)
             percents.at(k - 1) = 100 - sum;
 
          if (percents.at(k - 1) >= 0)  // Массив процентов заполнет
           {
               // комбинация в массиве, можно дальше что-то делать
           }
        }
    }
 }
 
 Это работает, только начиная с 4 тикеров данный процесс занимает достаточно
 много времени... а если учесть, что после формирования массива идут ещё
 вычисления, то это что-то совсем страшно долгое... 4 тикера с последующими
 расчётами я так и не дождался - больше часа прошло :((
 
 Как бы оптимизировать, чтобы быстрее перебор шёл и не могу придумать как
 сделать меняемый шаг, т.е. не 1% как сейчас а произвольный....
 -- 
 Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
 --- ifmail v.2.15dev5
  * Origin: Talk.Mail.Ru (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Формирование портфеля   Starikov Alexander   25 Oct 2002 19:08:37 
Архивное /ru.algorithms/6488ca085aa5.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional