ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

бинарный поиск
  #1  
Старый 02.02.2010, 23:29
1n0y
Участник форума
Регистрация: 09.05.2009
Сообщений: 186
Провел на форуме:
1682814

Репутация: 102
Отправить сообщение для 1n0y с помощью ICQ
По умолчанию бинарный поиск

собстно решил проапгрейдить поиск в своём удоляторе до бинарного. всё бы нечего, но результаты простого перебора и бинарного поиска заметно отличаются - в объёмных базах бинарный не находит примерно 10% совпадений. wtf?!


вот кусок бинарного:
Код:
//f4, f5 - стринглисты

     f5.sort;
     f4.sort;   
      while I<=f4.Count-1 do
            begin
             verh:=0;
             niz:=f5.count;
             found:=FALSE;
              repeat
               sred:=trunc((niz-verh)/2)+verh;
                 if  AnsiPos(f4.Strings[I],f5.strings[sred])<>0
                  then found:=TRUE
                 else
                  if  f4.Strings[I < f5.strings[sred]
                    then niz:=sred-1
	          else verh:=sred+1;
              until (verh > niz) or found or (verh = f5.count);
            if found
             then
              begin
               form1.Memo6.Lines.Add(f5.Strings[sred]);
               I:=I+1;
              end
            else
             I:=I+1;
          end
естественно, все стринглисты сортирую перед поиском.
вчомпроблема? или это такая фича бинарного поиска?
 
Ответить с цитированием

  #2  
Старый 03.02.2010, 08:24
AlexTheC0d3r
Постоянный
Регистрация: 25.07.2008
Сообщений: 454
Провел на форуме:
1229135

Репутация: 425
Отправить сообщение для AlexTheC0d3r с помощью ICQ
По умолчанию

Цитата:
Сообщение от 1n0y  
собстно решил проапгрейдить поиск в своём удоляторе до бинарного. всё бы нечего, но результаты простого перебора и бинарного поиска заметно отличаются - в объёмных базах бинарный не находит примерно 10% совпадений. wtf?!


вот кусок бинарного:
Код:
//f4, f5 - стринглисты

     f5.sort;
     f4.sort;   
      while I<=f4.Count-1 do
            begin
             verh:=0;
             niz:=f5.count;
             found:=FALSE;
              repeat
               sred:=trunc((niz-verh)/2)+verh;
                 if  AnsiPos(f4.Strings[I],f5.strings[sred])<>0
                  then found:=TRUE
                 else
                  if  f4.Strings[I < f5.strings[sred]
                    then niz:=sred-1
	          else verh:=sred+1;
              until (verh > niz) or found or (verh = f5.count);
            if found
             then
              begin
               form1.Memo6.Lines.Add(f5.Strings[sred]);
               I:=I+1;
              end
            else
             I:=I+1;
          end
естественно, все стринглисты сортирую перед поиском.
вчомпроблема? или это такая фича бинарного поиска?
мб все из-за AnsiPos?
 
Ответить с цитированием

  #3  
Старый 03.02.2010, 08:42
1n0y
Участник форума
Регистрация: 09.05.2009
Сообщений: 186
Провел на форуме:
1682814

Репутация: 102
Отправить сообщение для 1n0y с помощью ICQ
По умолчанию

нублин, юзая простой перебор всё ведь чудесно работает с AnsiPos..
 
Ответить с цитированием

  #4  
Старый 03.02.2010, 09:09
AlexTheC0d3r
Постоянный
Регистрация: 25.07.2008
Сообщений: 454
Провел на форуме:
1229135

Репутация: 425
Отправить сообщение для AlexTheC0d3r с помощью ICQ
По умолчанию

попробуй pos();
 
Ответить с цитированием

  #5  
Старый 03.02.2010, 12:18
1n0y
Участник форума
Регистрация: 09.05.2009
Сообщений: 186
Провел на форуме:
1682814

Репутация: 102
Отправить сообщение для 1n0y с помощью ICQ
По умолчанию

неа, не помогло..
 
Ответить с цитированием

  #6  
Старый 03.02.2010, 12:24
sn0w
Статус пользователя:
Регистрация: 26.07.2005
Сообщений: 568
Провел на форуме:
1290766

Репутация: 1236


По умолчанию

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

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


snow white world wide
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
скрипт поиска нефильтруемой переменной (SQL injection) Strilo4ka Уязвимости 16 24.12.2009 22:45
Набор парнёров в закрытую спам парнёрку group Разное - Покупка, продажа, обмен 14 21.12.2009 22:58
Куплю фрод group Разное - Покупка, продажа, обмен 11 20.12.2009 21:34
Перевод официальной документации Nikto 2 Kuzya Авторские статьи 2 25.03.2009 01:10



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ