Векторы инверсий и перестановки

Тема в разделе "WASM.A&O", создана пользователем Ego_Ra, 14 авг 2005.

  1. Ego_Ra

    Ego_Ra New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2005
    Сообщения:
    2
    Адрес:
    Ukraine
    Совсем запутался...

    Как из вектора инверсий получить соответствующую перестановку?
     
  2. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    Вектор инверсий? Не напутал ничего?
     
  3. aSL

    aSL New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2003
    Сообщения:
    43
    Адрес:
    Russia


    Нет. Ничего он не напутал. Учим матчасть, товарищ.



    Примерно выглядит так (r-вектор инверсий, f - искомая перестановка):


    Код (Text):
    1.  
    2. for (i=0;i<n;++i) {
    3.     f[i] = 0;
    4. }
    5.  
    6. for (i=0;i<n;++i) {
    7.     for (j=0,k=r[i]+1;k>0;++j) {
    8.         if (f[j]==0) {
    9.             --k;
    10.         }
    11.     }
    12.     f[j] = i+1;
    13. }
    14.  




    Конкретно не тестировал, так что вполне могу глючить ;) Но суть алго такая: элементы перестановки просто расставляются на свои места. В самом начале везед стоят нули. А для того, чтобы определить положение i-го элемента перестановки (при просмотре от меньших номеров к большим) перед ним достаточно оставить r "нулей" и потом поставить его. Вот и все.
     
  4. Ego_Ra

    Ego_Ra New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2005
    Сообщения:
    2
    Адрес:
    Ukraine
    Суть понятна.

    Разве n не используется?

    И перебор идёт не от старших индексов?



    Понял. Я про "нули" сначала не додумался.

    СпасибО.
     
  5. RElf

    RElf New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2004
    Сообщения:
    159
    можно и в обратном порядке, но тогда перестановка строится не как массив, а как список, примерно так:

    [n], [n-1, n], [n-1, n-2, n], [n-1, n-2, n, n-3], ...

    при этом заранее неизвестно куда будут вставляться меньшие элементы.