Реализация дерева троичного поиска в 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)

0 ответов

Другие вопросы по тегам