Вдохновленный предсказанием следующего слова iOS7 iMessage, я решил попытаться написать сценарий, который будет изучать на основе ввода пользователя, какие слова/буквы, скорее всего, хотят заполнить текущее слово пользователя или какое слово может быть больше всего скорее всего, будет желателен следующий.Как построить дерево Radix в JavaScript?
Для этого я собираюсь использовать структуру данных, очень похожую на Radix Tree (AKA a Patricia Trie).
Возьмите этот пользовательский ввод, например:
Мне нравится IceCream
От этого моя цель состоит в том, чтобы создать такую структуру данных:
var speakData = {
"I": { //the key
value: "I", //the stored value for this unit of the combination
count: 1, //the number of times that this combination has occured
followables: { // the next level of the tree; all combinations
// that might follow this one
" ": {
value: " ",
count: 1,
followables: {
"l": {
value: "l",
count: 1,
followables: {
"i": {
value: "i",
count: 1,
followables: {
"k": {
value: "k",
count: 1,
followables: {
"e": {
value: "e",
count: 1,
followables: {
// and so on
}
}
}
}
}
}
}
}
}
}
}
}
}
Это по существу Radix Tree, с некоторой дополнительной информацией, позволяющей мне взвесить вероятность узнаваемых возможностей, которые пользователь может захотеть напечатать следующим образом.
Из вышеизложенного крайне ограниченного набора данных, когда пользователь вводит «я», наша лучшая (и единственная) догадка заключается в том, что следующий символ будет «".
Так что теперь я объяснил свою цель и метод, вот мой вопрос:
Как я могу построить эту структуру данных из любого заданного пользовательского ввода?
function learn(message, brain){
for(var i = 0; i < message.length; i++){
brain[message[i]] = {};
brain[message[i]].value = message[i];
brain[message[i]].count++;
brain[message[i]].followables =
}
}
Это, насколько я получил, но я не знаю, как вставить следующие значения в соответствующих позициях рекурсивно.