комбинаторика
Aug. 28th, 2006 02:39 pm![[identity profile]](https://www.dreamwidth.org/img/silk/identity/openid.png)
![[community profile]](https://www.dreamwidth.org/img/silk/identity/community.png)
Не могу сориентироваться...
Есть 8 букв (допустим, abcdefgh). Как найти все возможные комбинации, полученные из этих букв? При этом важно сохранять порядок следования (т.е., может быть adef, но не faс). Количество символов в сочетаниях - от 1 до 8, буквы не повторяются.
Если можно, дайте ссылку на литературу или он-лайн программы...
В идеале, конечно, найти какой-то способ получить список всех этих комбинаций, а не только количество.
Или подскажите, пожалуйста - может быть, есть специализированные сообщества.
спасибо.
Есть 8 букв (допустим, abcdefgh). Как найти все возможные комбинации, полученные из этих букв? При этом важно сохранять порядок следования (т.е., может быть adef, но не faс). Количество символов в сочетаниях - от 1 до 8, буквы не повторяются.
Если можно, дайте ссылку на литературу или он-лайн программы...
В идеале, конечно, найти какой-то способ получить список всех этих комбинаций, а не только количество.
Или подскажите, пожалуйста - может быть, есть специализированные сообщества.
спасибо.
no subject
Date: 2006-08-28 01:24 pm (UTC)(http://www.forum.ishodniki.ru/index.php)
no subject
Date: 2006-08-28 01:24 pm (UTC)no subject
Date: 2006-08-28 04:48 pm (UTC)no subject
Date: 2006-08-28 08:46 pm (UTC)no subject
Date: 2006-08-29 12:51 pm (UTC)no subject
Date: 2006-08-28 02:54 pm (UTC)пусть всего есть 8 букв
для последовательности из одной буквы - 8 вариантов
из двух - 8*7
из трех - 8*7*6
и т. д.
т.е., если есть n букв, из которых составляется слово длины k, получим n!/(n-k)! уникальных слов.
а скока всего, лень считать :(
no subject
Date: 2006-08-28 04:05 pm (UTC)Суть в следующем, у нас есть слово из восьми букв "abcdefgh", которое мы представляем как s:=m[a]+m[b]+m[c]+m[d]+m[e]+m[f]+m[g]+m[h]. Мы прогоняем все возможные варианты расположения букв. И если индексы букв удовлетворяют нашим условиям (то есть каждая следующая буква старше предыдущей и не равна ей) то записываем эту комбинацию в файл.
сам условный код (нету открытия файла, закрытия и т.д., но алгоритм, должен быть ясен):
var
A,B,C,D,E,F,G: integer;
M[1..8] of char; //забыл как правильно массивы объявлять :)
file_out: file of text; //текстовый файл, куда записываются все подходящие комбинации
begin
M[1]:='a';
M[2]:='b';
M[3]:='c';
M[4]:='d';
M[5]:='e';
M[6]:='f';
M[7]:='g';
M[8]:='h';
for a:=1 to 8 do
begin
for b:=1 to 8 do
begin
for c:=1 to 8 do
begin
for d:=1 to 8 do
begin
for e:=1 to 8 do
begin
for f:=1 to 8 do
begin
for g:=1 to 8 do
begin
for h:=1 to 8 do
begin
if (H>G) and (H>F) and (H>E) and (H>D) and (H>C) and (H>B) and (H>A)
and (G>F) and (G>E) and (G>D) and (G>C) and (G>B) and (G>A)
and (F>E) and (F>D) and (F>C) and (F>B) and (F>A)
and (E>D) and (E>C) and (E>B) and (E>A)
and (D>C) and (D>B) and (D>A)
and (C>B) and (C>A)
and (B>A) then writeln(file_out, M[A]+M[B]+M[C]+M[D]+M[E]+M[F]+M[G]+M[H])
if (G>F) and (G>E) and (G>D) and (G>C) and (G>B) and (G>A)
and (F>E) and (F>D) and (F>C) and (F>B) and (F>A)
and (E>D) and (E>C) and (E>B) and (E>A)
and (D>C) and (D>B) and (D>A)
and (C>B) and (C>A)
and (B>A) then writeln(file_out, M[A]+M[B]+M[C]+M[D]+M[E]+M[F]+M[G])
if (F>E) and (F>D) and (F>C) and (F>B) and (F>A)
and (E>D) and (E>C) and (E>B) and (E>A)
and (D>C) and (D>B) and (D>A)
and (C>B) and (C>A)
and (B>A) then writeln(file_out, M[A]+M[B]+M[C]+M[D]+M[E]+M[F])
if (E>D) and (E>C) and (E>B) and (E>A)
and (D>C) and (D>B) and (D>A)
and (C>B) and (C>A)
and (B>A) then writeln(file_out, M[A]+M[B]+M[C]+M[D]+M[E])
if (D>C) and (D>B) and (D>A)
and (C>B) and (C>A)
and (B>A) then writeln(file_out, M[A]+M[B]+M[C]+M[D])
if (C>B) and (C>A)
and (B>A) then writeln(file_out, M[A]+M[B]+M[C])
if (B>A) then writeln(file_out, M[A]+M[B])
end;
end;
end;
end;
end;
end;
end;
end;
no subject
Date: 2006-08-28 04:10 pm (UTC)no subject
Date: 2006-08-28 04:46 pm (UTC)no subject
Date: 2006-08-28 06:10 pm (UTC)no subject
Date: 2006-08-29 12:50 pm (UTC)no subject
Date: 2006-08-28 06:14 pm (UTC)void combinations(const char* s) {
int i;
for (i=1; i<256; i++) {
int j=i;
while (j>0) {if (j%2) printf(s[i]); j /= 2;}
printf("\n");
}
}
no subject
Date: 2006-08-29 12:50 pm (UTC)