Как делает 'потрясающие' строки совпадения панели Firefox?

Но это так. Этот метод называется clone() и реализован в классе Object.

То, что вы хотите сделать, может быть достигнуто с помощью следующего:

MyClass obj = new MyClass(); 
MyClass copy = (MyClass) obj.clone();
28
задан lesmana 3 March 2012 в 11:29
поделиться

4 ответа

Нормальный способ сделать быстрая подстрока, соответствующая, должна создать структуру данных, которые содержат все суффиксы всех строк, Вы хотите поиск. В зависимости от организации это можно назвать "суффиксным деревом" или "суффиксным массивом". Например, если у Вас есть 1 000 строк, и все - 50 символов в длину, у Вас есть нетривиальные суффиксы 1.000 x 50, т.е. Ваш суффиксный массив имел бы 50 000 записей.

Затем, чтобы сделать соответствие, Вы делаете двоичный поиск (если массив) или поиск по дереву (если дерево) для нахождения всех тех суффиксов в структуре данных чей начало соответствия строка записанный в поле поиска. Поскольку это - начало суффикса, которому Вы соответствуете, можно использовать стандартные поисковые процедуры (двоичный поиск, древовидный спуск) для получения до результата быстро. Каждый суффикс связан с теми строками, в которых это появляется.

Пример: у Вас есть две строки "CAT" и "ТОЧКА". Ваш суффиксный массив похож на это (отметьте lexiographic = алфавитное упорядочивание):

#1 AT  --> CAT
#2 CAT --> CAT
#3 DOT --> DOT
#4 OT  --> DOT
#5 T   --> DOT, CAT

Примечание, что существует шесть суффиксов, но два из того же (длятся "T" в "CAT" и "ТОЧКЕ"), и обоих представленных той же записью (#5).

Теперь, когда пользователь вводит в поиске, например, "OT" (который должен соответствовать "ТОЧКЕ"), можно выполнить в простом lexiographic упорядочивание поиска, разового журналом, поскольку Вы теперь ищете начало соответствие в суффиксном массиве.

Это - основной принцип быстрого текстового поиска, когда шаблон поиска не содержит подстановочные знаки.

30
ответ дан Antti Huima 28 November 2019 в 02:29
поделиться

awesomebar предлагает URL алгоритмом, названным Места frecency алгоритм .

Согласно веб-сайту разработчика Mozilla:

слово "frecency" само является комбинацией слов "частота" и "новизна".

23
ответ дан RuudKok 28 November 2019 в 02:29
поделиться

Я думаю, что это оставляют базовой системе хранения: База данных SQLite, где Firefox хранит Страницы, Вы посетили, предлагает быструю функцию для сравнения подстроки.

я думаю, что Firefox выпускает SQL-запрос к Базе данных. Это довольно быстро, потому что база данных кэшируется в Вашей памяти.

2
ответ дан theomega 28 November 2019 в 02:29
поделиться

Алгоритм адресной строки в Firefox 3.0 немного сложен. Он будет получать данные из двух (трех для Firefox 3.5 и более поздних версий) разных запросов:

  • Для первого запроса он проверяет таблицу moz_inputhistory, чтобы увидеть, хранится ли в этой таблице текущая строка поиска. Эти результаты отсортированы по «рангу», который является числом, определяющим, как давно он используется. Это число уменьшается раз в день. Этот поиск делает адресную строку адаптируемой к тому, что вы выбираете с течением времени (реализовано в ошибке 95739 ).

  • В Firefox 3.5 и более поздних версиях он затем проверяет таблицу moz_keyword на наличие закладок с ключевым словом, которое соответствует текст поиска точно.

  • Последний запрос, он проходит через каждую запись в moz_places, которая будет включать в себя все посещения истории и закладки. Эти результаты упорядочены по частоте .

Для всех трех из этих случаев используется следующий алгоритм для сопоставления с тегами, заголовком и URL-адресом (ниже называется «текст с возможностью поиска»). Это немного сложно объяснить словами, поэтому может быть проще посмотреть исходный код .

  1. Строка поиска разбита на токены, определяемые пробелами (каждое «слово» без пробелов токен).
  2. Для каждого токена Начните сравнивать каждый символ доступного для поиска текста и токена в Юникоде без учета регистра до полного совпадения. Если один набор символов не совпадает, перейдите к следующему « граница слова » в доступном для поиска тексте и повторите попытку.
  3. Если мы сопоставим любой из доступных для поиска текстов, он появится в адресная строка.
  4. Если у нас недостаточно результатов (по умолчанию 12), мы будем повторять поиск запроса, проходящего через каждую закладку и посещение истории, и проверять доступный для поиска текст в Юникоде без учета регистра для каждого токена где угодно (не только на границах слов).

Надеюсь, это объясняет это понятным образом!

31
ответ дан 28 November 2019 в 02:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: