Я пытался написать код для определения количества всех таких слов из заданного ввода, которые начинаются с заданного входного префикса. Например, если на моих входных данных есть слова «amilie», «amity», «john» и т. д. и т. д., а входной префикс — «am», то ожидаемый результат — 2. И мне нужно закодировать эту проблему, используя структуру данных Trie Java. Я нашел код Java от Claude AI, который дает правильный результат при выполнении. Но я не могу понять одну вещь из этого кода. Код показан ниже. Мое сомнение/вопрос связано с переменной флага «isEndOfWord». Я хочу знать, что установка для этого параметра «isEndOfWord» значения true обновляет значение того экземпляра объекта Trie. В этом коде мы изначально создаем объект, членами которого являются HashMap и переменная логического флага. HashMap имеет ключ типа данных и значения «Символ» в качестве другого объекта Trie. Функция «insertTrieEntries» вставляет в объект Trie все входные слова, которые мы должны проверить, чтобы найти количество тех, которые начинаются с заданного входного префикса. Теперь, насколько я понимаю, внутри функции «insertTriesEntries» на каждой итерации цикла For Each объект curr обновляется, чтобы указывать на значение символьного ключа, вставленного в эту итерацию. Согласно коду, это значение всегда является новым узлом Trie, который вставляется в элемент HashMap, как значение ключа, вставленного в этот элемент хеш-карты, в текущей итерации.
Теперь, например, мое слово, которое нужно проверить на наличие префикса «am» и вставить в объект Trie, — «дружба». После вставки последнего символа «y» строка кода curr = curr.trieEntry.get(x); будет выполнена, и моя ссылочная переменная curr начнет указывать на объект, сохраненный как значение ключа «y». Теперь флаг этого объекта «isEndOfWord» будет установлен в истинное значение. Он не сделает переменную флага «isEndOfWord» объекта, имеющего хэш-карту, содержащую ключ «y», также истинной. Но кажется, что другие функции в программе работают, учитывая, что флаг «isEndOfWord» является истинным для объекта, имеющего хэш-карту, содержащую ключ «y».
Мой вопрос состоит в том, чтобы узнать, какой объект/экземпляр объекта Trie получает флаг «isEndOfWord» как истинный, это объект, где «y» является ключом в его HashMap, или объект, который хранится в значении «y» ключ. Другими словами, я хочу понять последние две строки функции «insertTrieEntries».
import java.util.HashMap;
class Tries {
HashMap trieEntry = new HashMap();
boolean isEndOfWord = false;
}
public class tempTrie {
static Tries root = new Tries();
String prefix = "am";
static int count = 0;
public static void insertTrieEntries(String word) {
Tries curr = root;
for (char x : word.toCharArray()) {
if (!curr.trieEntry.containsKey(x)) {
curr.trieEntry.put(x, new Tries());
}
curr = curr.trieEntry.get(x);
}
curr.isEndOfWord = true;
}
public static int countWordsWithPrefix(String prefix) {
Tries curr = root;
// Navigate to the end of the prefix in the trie
for (char x : prefix.toCharArray()) {
if (!curr.trieEntry.containsKey(x)) return 0;
curr = curr.trieEntry.get(x);
}
// DFS count all words under this node
return dfsCount(curr);
}
private static int dfsCount(Tries node) {
// int count = node.isEndOfWord ? 1 : 0;
// for (Tries child : node.trieEntry.values()) {
// count += dfsCount(child);
// }
// return count;
if(node.isEndOfWord) {
count++;
}
for(Tries x: node.trieEntry.values()) {
dfsCount(x);
}
return count;
}
public int checkEachWord(String[] arr) {
root = new Tries(); // reset trie
for (String word : arr) {
insertTrieEntries(word);
}
return countWordsWithPrefix(prefix);
}
public static void main(String[] args) {
tempTrie obj = new tempTrie();
String[] arr = {"amity", "amitus", "amitusq", "amitu"};
System.out.println(obj.checkEachWord(arr));
//Output : 4
}
}
Java пытается обойти [закрыто] ⇐ JAVA
Программисты JAVA общаются здесь
1777183184
Anonymous
Я пытался написать код для определения количества всех таких слов из заданного ввода, которые начинаются с заданного входного префикса. Например, если на моих входных данных есть слова «amilie», «amity», «john» и т. д. и т. д., а входной префикс — «am», то ожидаемый результат — 2. И мне нужно закодировать эту проблему, используя структуру данных Trie Java. Я нашел код Java от Claude AI, который дает правильный результат при выполнении. Но я не могу понять одну вещь из этого кода. Код показан ниже. Мое сомнение/вопрос связано с переменной флага «[b]isEndOfWord[/b]». Я хочу знать, что установка для этого параметра «[b]isEndOfWord[/b]» значения true обновляет значение того экземпляра объекта Trie. В этом коде мы изначально создаем объект, членами которого являются HashMap и переменная логического флага. HashMap имеет ключ типа данных и значения «Символ» в качестве другого объекта Trie. Функция «insertTrieEntries» вставляет в объект Trie все входные слова, которые мы должны проверить, чтобы найти количество тех, которые начинаются с заданного входного префикса. Теперь, насколько я понимаю, внутри функции «[b]insertTriesEntries[/b]» на каждой итерации цикла For Each объект curr обновляется, чтобы указывать на значение символьного ключа, вставленного в эту итерацию. Согласно коду, это значение всегда является новым узлом Trie, который вставляется в элемент HashMap, как значение ключа, вставленного в этот элемент хеш-карты, в текущей итерации.
Теперь, например, мое слово, которое нужно проверить на наличие префикса «am» и вставить в объект Trie, — «дружба». После вставки последнего символа «y» строка кода curr = curr.trieEntry.get(x); будет выполнена, и моя ссылочная переменная curr начнет указывать на объект, сохраненный как значение ключа «y». Теперь флаг этого объекта «[b]isEndOfWord[/b]» будет установлен в истинное значение. Он не сделает переменную флага «[b]isEndOfWord[/b]» объекта, имеющего хэш-карту, содержащую ключ «y», также истинной. Но кажется, что другие функции в программе работают, учитывая, что флаг «[b]isEndOfWord[/b]» является истинным для объекта, имеющего хэш-карту, содержащую ключ «y».
Мой вопрос состоит в том, чтобы узнать, какой объект/экземпляр объекта Trie получает флаг «[b]isEndOfWord[/b]» как истинный, это объект, где «y» является ключом в его HashMap, или объект, который хранится в значении «y» ключ. Другими словами, я хочу понять последние две строки функции «[b]insertTrieEntries[/b]».
import java.util.HashMap;
class Tries {
HashMap trieEntry = new HashMap();
boolean isEndOfWord = false;
}
public class tempTrie {
static Tries root = new Tries();
String prefix = "am";
static int count = 0;
public static void insertTrieEntries(String word) {
Tries curr = root;
for (char x : word.toCharArray()) {
if (!curr.trieEntry.containsKey(x)) {
curr.trieEntry.put(x, new Tries());
}
curr = curr.trieEntry.get(x);
}
curr.isEndOfWord = true;
}
public static int countWordsWithPrefix(String prefix) {
Tries curr = root;
// Navigate to the end of the prefix in the trie
for (char x : prefix.toCharArray()) {
if (!curr.trieEntry.containsKey(x)) return 0;
curr = curr.trieEntry.get(x);
}
// DFS count all words under this node
return dfsCount(curr);
}
private static int dfsCount(Tries node) {
// int count = node.isEndOfWord ? 1 : 0;
// for (Tries child : node.trieEntry.values()) {
// count += dfsCount(child);
// }
// return count;
if(node.isEndOfWord) {
count++;
}
for(Tries x: node.trieEntry.values()) {
dfsCount(x);
}
return count;
}
public int checkEachWord(String[] arr) {
root = new Tries(); // reset trie
for (String word : arr) {
insertTrieEntries(word);
}
return countWordsWithPrefix(prefix);
}
public static void main(String[] args) {
tempTrie obj = new tempTrie();
String[] arr = {"amity", "amitus", "amitusq", "amitu"};
System.out.println(obj.checkEachWord(arr));
//Output : 4
}
}
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия