· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.A&O —› Время комбинаторики

Посл.отвђт Сообщенiе


Дата: Окт 25, 2003 22:47:47

Народ, я уже подзабыл это дело...
Словом, ткните меня носом. Положим, у меня есть массив, в котором мне нужно перебрать все элементы. Черт, даже сформулировать нормально не могу :( Короче, то ли перестановку, то ли сочетание, то ли размещение. Я уже все эти термины и забыл :(((
Если есть линки - буду очень рад.
algolist предлагать не надо - там паскаль и объяснения маленько заумны.
Мне бы что-то на С/С++. На худой конец, Perl/Java. Асм тоже сойдет, на С потом переведу.

Да, и еще.
Вот есть у меня в массиве, скажем,
a, b, c, d.
Мне надо попарно перебрать все возможные варианты, при этом порядок не важен, т.е., так:

a - b
a - c
a - d
b - c
b - d
c - d

вроде, все. Как это называется ;( и как это сделать наиболее эффективно?


Дата: Окт 25, 2003 22:48:51

Кажется, это называется "размещение"... Позор на мою лысину :(


Дата: Окт 26, 2003 00:01:32

Биноминальные коэффициенты тут помогут, только:
Из твоего примера непонятно толи это размещения то ли сочетания:
т.е. тебе нужно только b и d
или важно их местоположение т.е. из b и d составляются две пары {b,d;d,b}?


Дата: Окт 26, 2003 01:54:03

The Svin

Мне нужно ТОЛЬКО b и d. Биноминальные коэффициенты? Чтоб вас, Свин, за такие объяснения... ;) Поточнее мона?


Дата: Окт 26, 2003 02:08:11

your_enemy

мне не нравится $j<=$d и $i<$d! Ты делаешь какие-то выводы о цифрах, а мне должно быть все равно, что там! Мне надо просто перебрать, без сравнений!


Дата: Окт 26, 2003 02:10:39

Черт, глючный форум.
Мне не нравится то, что ты что-то предполагаешь об элементах массива. Кроме того, два for-цикла :/ Так я и сам могу. Свин, что там по биноминальным-то? Где хоть почитать что-то можно?


Дата: Окт 26, 2003 02:17:50 · Поправил: volodya

The Svin

Нашел чуток по коэффициентам на nr.com - глава 6. Но там крошечно... Кроме того, это мне даст лишь общее число, а мне надо сгенерировать пары. Просто взять массив и выдрать оттуда необходимое число комбинаций, и, скажем, распечатать их на экран.


Дата: Окт 26, 2003 02:29:41

Perl:

@arr=($a,$b,$c,$d);

for ($i=1;$i<$d;$i++)
{
for ($j=$i+1;$j<=$d;$j++)
{
# теперь в $a(i) - 1-е значение, $a(j) - 2-е
}
}


Дата: Окт 26, 2003 02:31:48

Тогда, Володя, это - сочетания. Те выбор по K из N без учёта порядка расположения.
Для пар (K=2) это очень просто.
Пусть n - это колличество элементов
а x = n-1
Тогда колличество таких пар будет равно сумме участка
арифметической прогресси с шаго +1 от 1 до X
т.е. (x(x+1))/2=(x^2+x)/2
Например если их 4 то колличество пар = (3^2+3)/2=6
если 5 то (4^2+4)/2=10 и т.д.
если представить элементы как ряд
то алгоритм сводится к простому действию.
взять крайний слева элемент и последовательно
соединить его с каждым справа.
потом взять следующий и соединить его с каждым справа
уже от него и так до тех пор пока очередной
"1ый" элемент не окажется последним - его уже соединять
не с чем и алгоритм заканчивается.
На асме можно сделать довольно быстро но если тебе асм нужен только для того, чтобы перевести в C то даже пытаться не буду, распараллеленый будет трудно переводить
а после перевода компилятор сделает хуже, т.что нафиг это нужно.
Формальный псевдо алгоритм может быть приблизительно
такой. пара[m]=array[j]+array[i] означает в его синтаксисе
что у элемента типа пара (который состоит из 2х элементов array) включаются два элемента в правой части выражения
а не арифметическое сложение:
n-колличество элементов расположенные
в array от array[0] до array[n-1]
m=0
j=0
 Пока j<n-1
  i=j+1
  Пока i<n
    пара[m]=array[j]+array[i]
    m=m+1
    i=i+1
  конец пока
  j=j+1
 конец пока

Вроде так.


Дата: Окт 26, 2003 02:51:32

я думаю вряд ли получится использовать для этого один цикл. в принципе у The Svin'а такой же пример,только циклы "пока". Но он, в отличие от меня, объяснил все, причем очень хорошо


Дата: Окт 26, 2003 02:54:24

The Svin

Все понял, все усвоил. Вы, меж прочим, шикарно объясняете!
В понедельник напишу код.

Еще раз спасибо за такие объяснения, какими они должны быть. Просто супер. Я чувствую себя круче ;)


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.070