Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.11.04;
Скачать: CL | DM;

Вниз

алгоритм   Найти похожие ветки 

 
aids   (2007-10-09 23:03) [0]

возможно не по теме но может быть кто то мне поможет...

вообще м у меня такая задача:
дана последовательность 4 3 2 1  - все цифры входят только один раз
надо получить все перестановки вида: 4 3 2 1 - 4 2 3 1 - 4 1 3 2
т.е элементы индексы которых нечетные(1,3,...) должны быть больше своих соседей на четных индексах.

а написал прогу которая получает все перестановки

нерекурсивную:

procedure Next;
   begin
     {найти i: X[i]<M,X[i+1]=M,...,X[N]=M};
     X[i]:=X[i]+1;
     X[i+1]:=...:=X[N]:=1
   end;

program Sequences;
     type Sequence=array [byte] of byte;
     var M,N,i:byte;
  X:Sequence;
  Yes:boolean;
     procedure Next(var X:Sequence;var Yes:boolean);
var i:byte;
     begin
i:=N;
{поиск i}
while (i>0)and(X[i]=M) do begin X[i]:=1;dec(i) end;
if i>0 then begin inc(X[i]);Yes:=true end
else Yes:=false
     end;
   begin
     write("M,N=");readln(M,N);
     for i:=1 to N do X[i]:=1;
     repeat
for i:=1 to N do write(X[i]);writeln;
Next(X,Yes)
     until not Yes
   end.


и рекурсивную

procedure Generate(k:byte);
    var i,j:byte;
  begin
    if k=N then
      begin for i:=1 to N do write(X[i]);writeln end
    else
      for j:=1 to M do
 begin X[k+1]:=j; Generate(k+1) end
  end;

program SequencesRecursion;
  type Sequence=array [byte] of byte;
  var M,N:byte;
      X:Sequence;
  procedure Generate(k:byte);
       ............
begin
  write("M,N=");readln(M,N);
  Generate(0) end.

подскажте как переделать чтобы выдавались лишь нужные мне последовательности

П.С : последовательности вида 4 3 2 1 и 2 1 4 3 - считать одинаковыми и выдавать лишь одну из них


 
Anatoly Podgoretsky ©   (2007-10-09 23:13) [1]

> aids  (09.10.2007 23:03:00)  [0]

Можно построить множества и сравнивать их.


 
aids   (2007-10-10 00:18) [2]

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


 
Германн ©   (2007-10-10 00:58) [3]


> последовательности будут большими до 5000 элементов...


> все цифры входят только один раз

Это как?
Или помимо римских и арабских цифр есть ещё какие-то цифры, про которые я ничего не знаю?


 
Anatoly Podgoretsky ©   (2007-10-10 01:06) [4]

> aids  (10.10.2007 00:18:02)  [2]

А надо правильно задавать вопрос, он сначала был про 1 2 3 4


 
aids   (2007-10-10 01:23) [5]

>Германн ©

цифры только арабские

> Anatoly Podgoretsky © решение  1 2 3 4 - тривиально, тяжелее с большими последовательностями


 
Германн ©   (2007-10-10 01:29) [6]


> aids   (10.10.07 01:23) [5]
>
> >Германн ©
>
> цифры только арабские
>

Тогда постановка задачи не правильная. Так как на сей вопрос отвечать? Флудом? Так это нам не влом. Только дай знак! :-)


 
Anatoly Podgoretsky ©   (2007-10-10 01:37) [7]

> aids  (10.10.2007 01:23:05)  [5]

Ну не может быть больше 10 цифр!


 
Германн ©   (2007-10-10 01:40) [8]

Да и кстати

> write("M,N=");readln(M,N);

это не для пользователей программы. Они на это не способны.
Это для "неумного препода" :-)


 
MBo ©   (2007-10-10 09:24) [9]

Молодец преподаватель, дал задачку, решение которой не висит на каждом углу в инете, и надо самому думать :)

>последовательности будут большими до 5000 элементов
Это вряд ли, т.к. количество перестановок будет расти очень быстро, например, для N = 12 их будет уже 1247400.

P(N) = (N - 1)! / 2^((N - 1) div 2)


 
aids   (2007-10-10 15:42) [10]

>Anatoly Podgoretsky цифры и числа разные вещи...

ну так что не подскажите?

MBo> в условии задачи ограничение на длину последовательности от 1 до 5000


 
MBo ©   (2007-10-10 16:12) [11]

>в условии задачи ограничение на длину последовательности от 1 до 5000
формулу для количества перестановок я уже привел, так что интересно будет посмотреть на процесс получения и вывода 4.5*10^15569 перестановок :)



Страницы: 1 вся ветка

Текущий архив: 2007.11.04;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.022 c
2-1192122858
Reko
2007-10-11 21:14
2007.11.04
Как можно получить список (дерево) папок и файлов?


15-1191253714
ist
2007-10-01 19:48
2007.11.04
Windows Filter-Hook driver..


2-1192083904
_max_
2007-10-11 10:25
2007.11.04
эмулятор нажатия клавиш клавиатуры


15-1190816741
hinst
2007-09-26 18:25
2007.11.04
Elf off


15-1191570233
vajo
2007-10-05 11:43
2007.11.04
Полезный девайс