Реализация дерева Radix(Trie) для поиска клиентов на JavaJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Реализация дерева Radix(Trie) для поиска клиентов на Java

Сообщение Anonymous »

Я работаю над проектом, и мне нужно выполнить поиск по данным миллионов клиентов. Я хочу реализовать алгоритм поиска по основанию (trie). Я прочитал и реализовал систему счисления для простых коллекций строк, но у меня есть коллекция клиентов, и я хочу выполнить поиск по имени или номеру мобильного телефона.
Класс клиентов:

Код: Выделить всё

public class Customer {

String name;
String mobileNumer;

public Customer (String name, String phoneNumer) {
this.name = name;
this.mobileNumer = phoneNumer;
}

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhoneNumer() {
return mobileNumer;
}
public void setPhoneNumer(String phoneNumer) {
this.mobileNumer = phoneNumer;
}

}
Класс RadixNode:

Код: Выделить всё

import java.util.HashMap;
import java.util.Map;

class RadixNode {
private final Map child = new HashMap();
private final Map mobileNum = new HashMap();
private boolean endOfWord;

Map getChild() {
return child;
}

Map getChildPhoneDir() {
return mobileNum;
}

boolean isEndOfWord() {
return endOfWord;
}

void setEndOfWord(boolean endOfWord) {
this.endOfWord = endOfWord;
}
}
Класс Radix:

Код: Выделить всё

class Radix {
private RadixNode root;

Radix() {
root = new RadixNode();
}

void insert(String word) {
RadixNode current = root;

for (int i = 0; i < word.length(); i++) {
current = current.getChild().computeIfAbsent(word.charAt(i), c -> new RadixNode());
}
current.setEndOfWord(true);
}

void insert(Customer word) {
RadixNode current = root;
System.out.println("==========================================");
System.out.println(word.mobileNumer.length());
for (int i = 0; i < word.mobileNumer.length(); i++) {
current = current.getChildPhoneDir().computeIfAbsent(word.mobileNumer.charAt(i), c -> new RadixNode());
System.out.println(current);
}
current.setEndOfWord(true);
}

boolean delete(String word) {
return delete(root, word, 0);
}

boolean containsNode(String word) {
RadixNode current = root;

for (int i = 0; i < word.length(); i++) {
char ch = word.charAt(i);
RadixNode node = current.getChild().get(ch);
if (node == null) {
return false;
}
current = node;
}
return current.isEndOfWord();
}

boolean isEmpty() {
return root == null;
}

private boolean delete(RadixNode current, String word, int index) {
if (index == word.length()) {
if (!current.isEndOfWord()) {
return false;
}
current.setEndOfWord(false);
return current.getChild().isEmpty();
}
char ch = word.charAt(index);
RadixNode node = current.getChild().get(ch);
if (node == null) {
return false;
}
boolean shouldDeleteCurrentNode = delete(node, word, index + 1) && !node.isEndOfWord();

if (shouldDeleteCurrentNode) {
current.getChild().remove(ch);
return current.getChild().isEmpty();
}
return false;
}

public void displayContactsUtil(RadixNode curNode, String prefix)
{

// Check if the string 'prefix' ends at this Node
// If yes then display the string found so far
if (curNode.isEndOfWord())
System.out.println(prefix);

// Find all the adjacent Nodes to the current
// Node and then call the function recursively
// This is similar to performing DFS on a graph
for (char i = 'a'; i 

Подробнее здесь: [url]https://stackoverflow.com/questions/55297803/radixtrie-tree-implementation-for-customer-search-in-java[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Реализация Radix Sort
    Anonymous » » в форуме JAVA
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Как справиться с доставкой токенов OAuth с перенаправлением как для веб -клиентов, так и для мобильных клиентов в API .N
    Anonymous » » в форуме C#
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Почему мой Radix сортирует с OpenMP+AVX неправильно, в то время как версия только OpenMP работает?
    Anonymous » » в форуме C++
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Подсказка из @radix-ui/react-tooltip не установлен при использовании Tailwind-Animate
    Anonymous » » в форуме CSS
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Подсказка из @radix-ui/react-tooltip не установлен при использовании Tailwind-Animate
    Anonymous » » в форуме Javascript
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»