0

に三分探索木を実装しようとしていRます。

実装しようとしているロジックは次のとおりです。

3^somepowerベクトルは、ツリーの各レベルを既存の層の後の次のセルとして指定することによって「階層化」されます。したがって、層 1 は最初のセル、層 2 はセル 2 ~ 4、層 3 はセル 5 ~ 13、層 4 はセル 14 ~ 40、層 5 はセル 41 ~ 122 などになります。

コードで次のことを行いたい:

obj1)ツリーに挿入するベクトルとオブジェクトを取得します。実際objには数字になります。

2) 入ろうとしているスロットがいっぱいの場合は、ルールに従って次の層にジャンプします。

2a) 占有されているセルよりも大きい場合obj<、その「すぐ下」の 3 つのセル ブロックの次のレベルの左のセルに移動します。

2b)obj==占有されているセルの場合、その「真下」にある 3 つのセル ブロックの中央のセルに移動します。

2c) 'obj' が>占有セルの場合、「そのすぐ下」の 3 セル ブロックの右端のセルに移動します。

数値を入れた場合の出力を図にしました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)
4

0 に答える 0