【发布时间】:2014-06-30 06:04:53
【问题描述】:
我写了一段代码StringTrie.java,通过接口Trie.java实现:
package il.ac.tau.cs.sw1.trie;
import java.util.Set;
/**
* Represents a generic trie data structure, where K is the type of keys that
* are saved in the trie, and V is the type of values that can be saved for each
* key.
*/
public interface Trie<K, V> {
/**
* Adds the input key to the data structure with the given value. If the key
* is invalid for this trie (implementation-dependent) an exception is
* thrown.
*/
void addKey(K key, V value);
/**
* Searches all the keys in the trie structure with the given prefix. If
* there are no such keys - an empty Set is returned. Otherwise, all the values saved
* for these keys are added to the output value set. If the prefix is invalid for this
* trie (implementation-dependent) an exception is thrown.
*
* @post the return value is not null
*/
Set<V> searchByPrefix(K prefix);
}
连同通过TrieNode.java实现的StringTrieNode.java:
package il.ac.tau.cs.sw1.trie;
import java.util.List;
import java.util.Set;
/**
* Represents a node in a generic trie, where K is the type of keys that are
* saved in the trie, and V is the type of values that can be saved for each
* key.
*/
public interface TrieNode<K, V> {
/**
* Adds the key suffix to this trie node, with the given value, by
* recursively adding the suffix of this suffix to the relevant child node.
*
* @pre suffix is a valid suffix for this trie (implementation-dependent)
* @post if the key ends in this trie node, the input value is added to the
* set of values returned by getValues().
*/
void addSuffix(K suffix, V value);
/**
* Returns the set of values for keys that end in this node
*/
Set<V> getValues();
/**
* Returns the child trie node such that the input suffix is saved in it or
* in its descendant
*
* @pre suffix is a valid suffix for this trie (implementation-dependent)
* @post if no key with such a suffix exists in the trie, or if suffix ends
* in the current node, return null; otherwise return the relevant
* child node
*/
TrieNode<K, V> getNext(K suffix);
/**
* Returns a list with all the child trie nodes of this node. The list may
* contain null values.
*
* @post $ret != null
*/
List<TrieNode<K, V>> getNexts();
}
现在,我已经实现了所有功能(我希望是正确的),现在我只遇到了 Set searchByPrefix(K prefix); 的问题,我找不到有效的算法 + 我的构造函数有问题。用户这样称呼它: Trie names = new StringTrie();所以第一个必须在那里。但只有第二个缩写字段。可以吗?
【问题讨论】:
-
有一个完整的实现here。