Реализация дерева троичного поиска в R
Я пытаюсь реализовать троичное дерево поиска в R
,
Вот логика, которую я пытаюсь реализовать:
Вектор будет "многоуровневым", обозначив каждый уровень дерева следующим 3^somepower
ячеек после существующего уровня. Таким образом, уровень 1 будет первой ячейкой, уровень 2 будет ячейками 2-4, уровень 3 будет ячейками 5-13, уровень 4 будет ячейками 14-40, уровень 5 будет ячейками 41-122 и так далее.
Я хочу, чтобы мой код делал следующее:
1) Возьмите вектор и объект obj
вставить в дерево. На практике obj
будет число.
2) Если слот, в который я пытаюсь войти, заполнен, переходите к следующему уровню в соответствии с правилами:
2а) Если obj
является <
чем занятая ячейка, перейдите к левой ячейке на следующем уровне блока из трех ячеек "прямо под" ним.
2б) Если obj
является ==
занятая ячейка, спуститесь в центральную ячейку трехэлементного блока "прямо под ней".
2c) Если "объект" >
занятая ячейка, спуститесь в крайнюю правую ячейку блока из трех ячеек "прямо под ней".
Я нарисовал диаграмму того, что я хочу получить, если я введу числа 34,42,15,24,16, 34,52,32,42,19,21,16,54,60,55
, Я включил код, который что- то делает, но я не совсем понимаю, что он делает. Я просто знаю, что он не делает то, что я хочу делать.
Спасибо за вашу помощь.
Желаемый результат:
Мой код:
put<-function(obj, Tree,pow=0,offset=1,arity=3)
{
level<-arity^pow
if (is.na(Tree[level])){
Tree[level+offset-1]<-obj
return(Tree)
} else {
if (obj<Tree[level]) {
put(obj,Tree,pow+1,offset=0)
} else {
if (obj == Tree[level]){
put(obj,Tree,pow+1,offset=1)
} else {
if (obj > Tree[level]){
put(obj,Tree,pow+1,offset=2)
}}}}
}
BeforeTree<-c(34,42,15,24,16,
34,52,32,42,19,21,16,54,60,55)
Tree<-NA
for (idx in 1:(length(BeforeTree)))
{Tree<-put(BeforeTree[idx],Tree)}
(Tree)