Поиск префикса в основании tree/patricia trie

<div class="card container">
    <div class="container">
      <div class="search-box d-md-inline-flex">

      <!-- col1 -->
      <div class="card border-0 p-3">
        <input class="btn btn-primary" type="text" name="" value="All categories">
      </div>
      <!-- col2 -->
      <div class="card border-0 p-3">
          <input class="form-control mr-2" type="text" name="departure" placeholder="Departure">
      </div>
      <!-- col3 -->
      <div class="card border-0 p-3">
          <input class="form-control mr-2" type="text" name="destination" placeholder="Destination">
      </div>
      <!-- col4 -->
      <div class="card border-0 p-3">
          <input class="form-control mr-2" type="text" name="type" placeholder="Travel Period">
      </div>
      <!-- Submit -->
      <div class="card border-0 p-3">
          <input class="btn btn-primary" type="submit" name="" value="go">
      </div>

      </div><!--/search-box -->
    </div>
  </div>

Используйте класс контейнера для переноса содержимого. Для отзывчивости используйте lg, md, sm для классов.

5
задан SPWorley 28 April 2009 в 07:14
поделиться

3 ответа

Подумайте о том, что кодирует ваш три. В каждом узле у вас есть путь, который ведет вас к этому узлу, поэтому в вашем примере вы начинаете с Λ (это прописная лямбда, этот греческий шрифт вроде отстой) корневого узла, соответствующего пустой строке. Λ имеет дочерние элементы для каждой используемой буквы, поэтому в вашем наборе данных имеется одна ветвь для «i».

  • Λ
  • Λ → «i»

В узле «i» есть два дочерних элемента. один для "м" и один для "п". Следующая буква - «n», поэтому вы берете это,

  • Λ → «i» → «n»

, и так как единственное слово, которое начинается с «i», «n» в вашем наборе данных это «в», детей от «n» нет. Это совпадение.

Теперь, скажем, набор данных, вместо «в», имел «

Как ты это используешь? во многих интерпретаторах команд, отличных от UNIX, таких как старый DCL VAX, вы можете использовать любой уникальный префикс команды. Таким образом, эквивалент ls (1) был DIRECTORY , но никакая другая команда не начиналась с DIR, поэтому вы могли набрать DIR , и это было так же хорошо, как и делать целое слово. Если вы не можете вспомнить правильную команду, вы можете просто набрать 'D' и нажать (я думаю) ESC; Интерфейс командной строки DCL вернет вам все команды, которые начинаются с D , и которые он может найти чрезвычайно быстро.

так что вы можете набрать DIR , и это было так же хорошо, как и все слово. Если вы не можете вспомнить правильную команду, вы можете просто набрать 'D' и нажать (я думаю) ESC; Интерфейс командной строки DCL вернет вам все команды, которые начинаются с D , и которые он может найти чрезвычайно быстро.

так что вы можете набрать DIR , и это было так же хорошо, как и все слово. Если вы не можете вспомнить правильную команду, вы можете просто набрать 'D' и нажать (я думаю) ESC; Интерфейс командной строки DCL вернет вам все команды, которые начинаются с D , и которые он может найти чрезвычайно быстро.

8
ответ дан 13 December 2019 в 05:42
поделиться

An alternative algorithm: Keep It Simple Stupid!

Just make a sorted list of your keywords. When you have a prefix, binary search to find where that prefix would be located in the list. All of your possible completions will be found starting at that index, ready to be accessed in place.

This algorithm will will require only 5% of the code of a Patricia trie and will be easy to maintain, understand, and update. It is almost certain this simple list search will be more efficient as well.

The only downside is if you have huge numbers of long keywords with similar prefixes, a trie can save some storage since it doesn't need to keep the full prefix for every entry. In practice, if you have less than a few million words, this is not a savings because the pointer overhead of the tree will dominate. This savings is more for applications like searching databases of DNA strings with millions of characters, not text keywords.

1
ответ дан 13 December 2019 в 05:42
поделиться

Оказывается, расширения GNU для стандартной библиотеки C ++ включают реализацию trie Patricia. Он находится в расширении структур данных на основе политик. См. http://gcc.gnu.org/onlinedocs/libstdc++/ext/pb_ds/trie_based_containers.html

3
ответ дан 13 December 2019 в 05:42
поделиться
Другие вопросы по тегам:

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