Така че имам този ruby код, който взех от wikipedia и модифицирах малко:
@trie = Hash.new()
def build(str)
node = @trie
str.each_char { |ch|
cur = ch
prev_node = node
node = node[cur]
if node == nil
prev_node[cur] = Hash.new()
node = prev_node[cur]
end
}
end
build('dogs')
puts @trie.inspect
Първо стартирах това на конзола irb и всеки път, когато извеждам node
, той просто продължава да ми дава празен хеш всеки път {}
, но когато всъщност извикам тази компилация на функция с параметър 'dogs'
низ, тя всъщност работи и извежда {"d"=>{"o"=>{"g"=>{"s"=>{}}}}}
, което е напълно правилно.
Това вероятно е по-скоро въпрос за Ruby, отколкото действителният въпрос за това как работи алгоритъмът. Всъщност нямам достатъчно познания за Ruby, за да дешифрирам какво се случва там, предполагам.
prev_node[cur] = Hash.new
и помислете какво еprev_node[cur]
--но не забравяйте, че самотоprev_node
е хеш с ключ на символа, който случайно сочи към празен хеш (за една итерация). - person Dave Newton   schedule 28.01.2012