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

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

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2015, 06:44   #1221
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Так это и будет, пусть и усовершенствованный, но один из самых не эффективных видов поиска. Почему выше и были дебаты по поводу бинарного поиска и двоичных деревьев
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.04.2015, 07:10   #1222
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
... это и будет ... но один из самых не эффективных видов поиска.
Обоснуй
Если есть другой "эффективных" способ, то уж точно не деревья. Ну не в этом случае.

Последний раз редактировалось Sibedir; 06.04.2015 в 07:12.
Sibedir вне форума Ответить с цитированием
Старый 06.04.2015, 07:33   #1223
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Потому что сложность будет квадратичная

А деревья:почему они Вам не нравятся? В данном случае они позволяют найти наш элемент (или создать его) за логарифм
Poma][a вне форума Ответить с цитированием
Старый 06.04.2015, 08:21   #1224
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Цитата:
Сообщение от Poma][a Посмотреть сообщение
Потому что сложность будет квадратичная

А деревья:почему они Вам не нравятся? В данном случае они позволяют найти наш элемент (или создать его) за логарифм
Деревья памяти сожрут больше (Или я чёта не понял).

А вообще, чем проще тем проще:
Код:
const
  _FILMCOUNT = 10;

type
  TFilmItem = record
    Name: AnsiString;
    Count: Integer;
  end;

  TFilmArr = array of TFilmItem;

procedure Sort (var aFA: TFilmArr);
begin
  // ...
end;

...

procedure TForm1.Button2Click(Sender: TObject);
var
  c: Cardinal;
  TF: TextFile;
  i, j, n: Integer;
  FilmArr: TFilmArr;
  s: AnsiString;
  cur, count: Integer;
begin
  c := GetTickCount;

  AssignFile (TF, ExtractFilePath(ParamStr(0)) + 'input.txt');
  Reset(TF);


  count := 0;
  SetLength (FilmArr, _FILMCOUNT);
  for i := 0 to _FILMCOUNT-1 do begin
    FilmArr[i].Name := '';
    FilmArr[i].Count := 0;
  end;

  Readln (TF, n);

  for i := 1 to n do begin
    Readln (TF, s);

//    Continue;

    cur := 0;
    for j := 0 to count-1 do begin
      if FilmArr[j].Name = s then
        Break
      else
        Inc (cur)
    end;

    if FilmArr[cur].Count = 0 then begin
      FilmArr[cur].Name := s;
      Inc (count)
    end;
    Inc (FilmArr[cur].Count);
  end;

  Sort (FilmArr);

  ListBox1.Items.Clear;
  for i := 0 to count-1 do begin
    s := FilmArr[i].Name + ' ' + IntToStr (FilmArr[i].Count);
    ListBox1.Items.Add (s)
  end;

  SetLength (FilmArr, 0);
  CloseFile(TF);

  Button2.Caption := IntToStr (GetTickCount - c);
end;
Опуская нюансы чтения/записи и сортировки - работает почти мгновенно. Памяти ~минимум.
Sibedir вне форума Ответить с цитированием
Старый 06.04.2015, 09:07   #1225
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Хех, при 10 оно так и будет. А при 1000 уже будете успевать моргнуть 2 раза. При 10000 сможете выпить кофе

А память.. Если ее хорошо выделять, то не сильного много и выйдет. Не будет намного больше массива
Poma][a вне форума Ответить с цитированием
Старый 06.04.2015, 09:40   #1226
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Sibedir
Просто поиск простым перебором в массиве [1..10] в среднем ~5 сравнений, бинарный ~ 2.5. И тогда время на сотне миллионов поисков будет заметно. Пусть и не часы и даже не минуты. А массив или дерево в данном случае без разницы, даже массив будет чуть лучше
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.04.2015, 09:42   #1227
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Цитата:
Сообщение от Poma][a Посмотреть сообщение
Хех, при 10 оно так и будет. А при 1000 уже будете успевать моргнуть 2 раза. При 10000 сможете выпить кофе
Не, ну если до нельзя усложнять задачу...
Цитата:
А память.. Если ее хорошо выделять, то не сильного много и выйдет. Не будет намного больше массива
Мне кажется не выйдет ни чего с деревом. Если дерево по размеру будет как массив, то оно же не сможет обеспечить большую скорость работы. Я так понимаю: или избыточность памяти или операций.
Хотя операции тоже можно сократить. В моём примере избыточным является, конечно же:
Код:
FilmArr[j].Name = s
Sibedir вне форума Ответить с цитированием
Старый 06.04.2015, 09:48   #1228
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Если строить дерево, как список, то все получится. Да, будут ещё указатели на детей, но это не сильно много
Poma][a вне форума Ответить с цитированием
Старый 06.04.2015, 11:05   #1229
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Цитата:
Сообщение от Poma][a Посмотреть сообщение
Если строить дерево, как список, то все получится. Да, будут ещё указатели на детей, но это не сильно много
Не сильно много - это сколько?
Sibedir вне форума Ответить с цитированием
Старый 06.04.2015, 11:21   #1230
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

А посчитайте.. Два сына каждый по 2 байта. Если всего фильмов N.. 2*N байт лишних

А про бинарный поиск : у нас же вставка будет.. Не ахти
Poma][a вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
интересные проги kipish Софт 85 18.12.2022 01:03
Текст на картинках SunLight Microsoft Office Word 2 08.08.2007 12:59