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

Вниз

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

 
van1tas   (2005-07-26 19:51) [0]

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

a[1] := "qwegd";
a[2] := "opat"
a[3] := "hijm"
a[4] := "zx";
...
и т.д.
....


сами наполненители массива, элементы внутри, тоже не известны, т.е. элементы могут содержать хоть: "x" или же "mnb", "qwertyuio" и т.д., заранее не известно.
а задача какова, необходимо сгенерировать максимальное колическтов уникальных сочетаний всех символов во всём массиве. т.е. допустим у меня в массиве три элемента: "a", "qw", "rt" и необходимо составить максимальное кол-во возможных сочетаний этих букв, пример: "aqr", "aqt", "awr", "awt".. только вот в большом массиве, вообще голова трещит. спасайте!


 
Джо ©   (2005-07-26 20:01) [1]

Шаг первый: пройдись по всем элементам массива (или списка) и выбери из них уникальные символы. Запиши их в строку.
Шаг второй: из символов этой строки составь все возможные сочетания.
Вот, собственно, и весь "алгоритм".


 
van1tas   (2005-07-26 20:03) [2]

это кончно хорошо, но у меня даже на такое сейчас мозг не способен.. может можно с примером, а то я не понял по поводу первого пункта.
не врублюсь я просто, может я в мозгу и могу так всё прикинуть, но вот наприсать не могу, поймите меня, просто не получается, я уже просто забился со всем этим.
покажите реализацию алгоритма...


 
Джо ©   (2005-07-26 20:14) [3]


>  а то я не понял по поводу первого пункта.

Ну, вот простейший класс, выполняющий "в лоб" эту задачу.


type
 TWordList = class (TStringList)
 public
   function GetUniqueChars: string;
 end;
implementation

function TWordList.GetUniqueChars: string;
var
 I,J: Integer;
 S: string;
 Ch: Char;
begin
 Result := "";
 for I := 0 to Count-1 do
 begin
   S := Strings[I];
   for J := 1 to Length(S) do
   begin
     Ch := S[J];
     if Pos (Ch,Result) = 0 then
       Result := Result + Ch
   end;
 end;
end;


А вот так его использовать:

procedure TForm1.Button1Click(Sender: TObject);
var
 List: TWordList;
begin
 List := TWordList.Create;
 try
   List.Add("qwer");
   List.Add("aawe");
   List.Add("roop");
   ....
   // показываем строку, состоящую из уникальных символов,
   // взятых из содержимого списка
   ShowMessage (List.GetUniqueChars);
 finally
   List.Free;
 end;
end;

Ну, а перестановку этих символов, надеюсь, сможешь и сам сделать.


 
van1tas   (2005-07-26 20:41) [4]

спасибо огромное!!, но у меня опять таки проблема, с перестановкой символов. хотя щас буду копаться, буду пробовать. если не сложно и к этому можно простейший пример.


 
Джо ©   (2005-07-26 20:42) [5]

См. ветку
http://delphimaster.net/view/1-1121894484/
там, если не ошибаюсь, это обсудили со всех сторон.



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

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

Наверх




Память: 0.48 MB
Время: 0.037 c
1-1122469773
Ш-К
2005-07-27 17:09
2005.08.14
Наследование интерфейсов


4-1119519704
ORMADA
2005-06-23 13:41
2005.08.14
CreateProcess трабл


1-1122288087
Dust
2005-07-25 14:41
2005.08.14
Указатель на структуру


4-1118745974
Peter_cc
2005-06-14 14:46
2005.08.14
Подсказка над треем...


9-1114243463
Trof
2005-04-23 12:04
2005.08.14
Стычки между ботами. Glscene