Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2015, 17:51   #1
sera.kerch
Пользователь
 
Регистрация: 09.04.2015
Сообщений: 24
По умолчанию Помогите описать структуру многоуровневый динамический масив

Доброго времени суток

Помогите правильно описать деревовиднуую динамическую структуру

есть А массив от 0 до 255 , каждый элемент содержит такой же массив и так далее М раз.

мысль такая, есть много слов
берется первая буква, ее код как номер в массиве
далее вторая - и так далее до конца слова
ну подобие А[66,77,44,88,...N] = true или NOT NIL .....
или А[66].A[77].A[44].A[88]. ... .A[N] = true или NOT NIL ....

Заранее спасибо
sera.kerch вне форума Ответить с цитированием
Старый 20.05.2015, 18:29   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ты... э-э-э... аналог полнотекстового поиска пытаешься сделать?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.05.2015, 18:57   #3
sera.kerch
Пользователь
 
Регистрация: 09.04.2015
Сообщений: 24
По умолчанию

если это так называется то да
sera.kerch вне форума Ответить с цитированием
Старый 20.05.2015, 19:01   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Хотя не... Теперь я не уверен что прав.
Поясни подробнее что это за кодификация такая... И для чего.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.05.2015, 19:11   #5
sera.kerch
Пользователь
 
Регистрация: 09.04.2015
Сообщений: 24
По умолчанию

в общем есть файл с пару милионами слов - словарь можно скзать
берется файл и каждое слово проверяется в словаре
естественно проверять перебором пословарю очень долго,
хочется оптимизировать для быстрого определения данного слова в словаре и чтобы в памяти меньше места занимало
sera.kerch вне форума Ответить с цитированием
Старый 20.05.2015, 20:37   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Тю... Всего-то )))
Отсортируй словарь, и находи слово методом бинарного поиска - получишь на миллиард слов цикл с максимум 20-30 итераций, что по скорости вполне допустимо.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.05.2015, 20:41   #7
sera.kerch
Пользователь
 
Регистрация: 09.04.2015
Сообщений: 24
По умолчанию

а можно этот метод бинарного поиска привести примером для данной задачи, будем считать что словарь отсортирован,
при этом узкое место наверное будет чтение из файла.
попробовал так
Код:
TB=^PB;
  PB=array [20..255] of pointer;

procedure TForm1.Button1Click(Sender: TObject);
label
 lb;
var
 s:string;
 i,l:integer;
 Sr,vr,tr:TB;
begin
 s:='123456';
 l:=length(s);
 new(sr);
 vr:=Sr;
 for i:=1 to l do
  if vr[ord(s[i])]=nil then begin
   new(tr);
   vr[i]:=tr;
   vr:=tr;
  end else begin
   vr:=vr[i];
  end;
s:='';
 vr:=sr;
 lb:
 for i:=20 to 255 do
  if vr[i]<>nil then begin
   s:=s+chr(i);
   vr:=vr[i];
   goto lb;
  end;
ListBox1.Items.Add(s)
end;
он выдает ошибку в месте if vr[i]<>nil then begin
незнаю в какую сторону копать

Последний раз редактировалось sera.kerch; 20.05.2015 в 20:56.
sera.kerch вне форума Ответить с цитированием
Старый 22.05.2015, 01:03   #8
sem6703
 
Регистрация: 06.05.2015
Сообщений: 9
По умолчанию Гениально

Ваша реализация рекурсии привела меня в восторг!
Код:
procedure TForm1.Button1Click(Sender: TObject);
label lb;
var i,k: integer;
begin
k:=0;
lb:
for i:=0 to 5 do
  if random(2)=0 then
    begin
      inc(k);
      goto lb;
    end;
showmessage(inttostr(k));
end;
sem6703 вне форума Ответить с цитированием
Старый 22.05.2015, 07:26   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
при этом узкое место наверное будет чтение из файла.
Сколько мегабайт содержит твой словарь сейчас?
Цитата:
незнаю в какую сторону копать
Копай в эту:
http://www.programmersforum.ru/showthread.php?t=236070

Конкретно под тебя никто писать не будет, и кстати разбор по буквам ты делаешь абсолютно зря. Не надо этого лепить. Обычный цикл в котором сравниваются строки не посимвольно а с помошью оператора равенста.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Описать структуру Torres_1_ Помощь студентам 0 11.05.2014 20:09
Описать структуру Note C++ phreaker228 Помощь студентам 1 15.06.2012 00:41
Описать структуру. С. Margo93 Помощь студентам 3 29.05.2012 16:22
Описать структуру ВадикСтрах Помощь студентам 2 21.11.2010 17:57