Поиск:

Ответ в темуСоздание новой темы Создание опроса
> алгоритм перебора символов нерекурсивный, [email protected] 
:(
    Опции темы
vnm
Дата 5.1.2006, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 5.1.2006

Репутация: нет
Всего: нет



Кто нибудь подскажите нерекурсивный алгоритм перебора всех вариантов пароля длиной 5 символов из (к примеру) 6 символов( 1 2 9 a J ]). [email protected]

рекурсивный алгоритм:

program combinations;
{$APPTYPE CONSOLE}
Const Simbols : String = 'ab12';
Procedure Generate(S : String; Lev : Integer);
Var I : Integer;
Begin
If (Lev = 0) Then
Begin
Writeln(S); {next password}
Exit;
End;
For I:=1 To Length(Simbols) Do
Generate(S + Simbols[I], Lev - 1);
End;
Begin
Generate('', 3); {3 simbols for password}
Readln;
End.
PM MAIL   Вверх
SoWa
Дата 5.1.2006, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 6
Всего: 74



Пятью вложенными циклами! smile


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
nworm
Дата 5.1.2006, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 502
Регистрация: 22.10.2005

Репутация: 4
Всего: 8



Можно написать процедуру генерирующую следующий за текущим пароль и гонять эту процедуру в цикле от 1 до

<колличество символов в пароле>^<длина пароля>.

Это сообщение отредактировал(а) nworm - 5.1.2006, 20:39
PM MAIL WWW   Вверх
BSOD
Дата 5.1.2006, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 1.11.2004
Где: Гомель

Репутация: нет
Всего: 3



как вариант - генерить все размещения...
(сначала генериш все множества из букв (каждую букву пишешь по пять раз), потом из этих множеств перестановки... но ИМХО - рекурсивный как-то рульнее....


--------------------
как корабль назовешь - то на нем и напишешь
PM MAIL WWW ICQ   Вверх
S.A.P.
Дата 5.1.2006, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2664
Регистрация: 11.6.2004

Репутация: нет
Всего: 71



Цитата(vnm @ 5.1.2006, 18:14 Найти цитируемый пост)

Кто нибудь подскажите нерекурсивный алгоритм перебора всех вариантов пароля

то же самое, только в цикле и c "искуственным" стеком.
PM MAIL   Вверх
vnm
Дата 6.1.2006, 02:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 5.1.2006

Репутация: нет
Всего: нет



Цитата(SoWa @ 5.1.2006, 20:28)
Пятью вложенными циклами! smile

Мне нужен алгоритм для произвольного кол-ва символов в пароле. Вот моя программа на дельфи:

Код

program combinations;
{$APPTYPE CONSOLE}

Procedure Generate(S, Simbols: String; Lev : Integer);
Var I : Integer;
Begin
 If (Lev = 0) Then
  Begin
   Writeln(S); 
   Exit;
  End;
 For I:=1 To Length(Simbols) Do
  Generate(S + Simbols[I], Simbols, Lev - 1);
End;

function find(s: string; sb: char): boolean;
var
 i: integer;
begin
 result:=false;
 for i:=1 to length(s) do
  begin
   if sb=s[i] then
    begin
     result:=true;
     break;
    end;
  end;
end;

procedure delete_repeat_simbols(var s1: string; s: string);
var
 i: integer;
begin
 s1:=s[1];
 for i:=2 to length(s) do
  begin
   if not find(s1,s[i]) then s1:=s1+s[i];
  end;
end;

var
 Sim, Sim1: string;
 len: integer;
Begin
 Writeln('Put any line, that you want:');
 readln(Sim);
 delete_repeat_simbols(Sim1, Sim);
 writeln('Line after deleting all repeat simbols: ', Sim1);
 writeln('Number simbols of first line: ', length(Sim1));
 writeln('Put number simbols for subline ( this number < ', length(Sim1),' )');
 write('Number simbols of subline: '); readln(len);
 Generate('', Sim1, len); 
 Readln;
End.


Мне срочно нужен нерекурсивный алгоритм. Кто может то помоги[email protected]

Это сообщение отредактировал(а) podval - 6.1.2006, 11:25
PM MAIL   Вверх
nworm
Дата 6.1.2006, 02:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 502
Регистрация: 22.10.2005

Репутация: 4
Всего: 8



Я же говорю можно писать процедуру, генерирующую следующий за текушим пароль.
Если пароли из цифр 0-9, то за

01112339

будет

01112340

аналогичную процедуру можно написать для произвольных символов.

PM MAIL WWW   Вверх
Akina
Дата 6.1.2006, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Для произвольного количества символов либо рекурсия, либо динамическое программирование - а значит тоже рекурсия.
Исключение - цепной инкремент. См. пост nworm.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
nworm
Дата 6.1.2006, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 502
Регистрация: 22.10.2005

Репутация: 4
Всего: 8



Примерно так.

Код

Function next(Var S: String; Simbols: String): Boolean;
 Var 
  I,J: integer;
  res: Boolean; 
 Begin
  I := Length(S);
  While(S[I] = Simbols[Length(Simbols)]) Do
   Begin
    I := I - 1;
    S[I] := Simbols[1];
   End;
  If (I > 0) Then
   Begin   
    J := 0;
    While (S[I] <> Simbols[J]) Do J := J + 1;
    S[I] := Simbols[J + 1];
    res := 0;
   End;
  Else res :=1;
  result:=res;
 End;


Проверять код было лень smile
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0696 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.