Javascript
 Computer >> コンピューター >  >> プログラミング >> Javascript

JavascriptでのAVLローテーション


バランスを取るために、AVLツリーは次の4種類のローテーションを実行できます-

  • 左回転
  • 右回転
  • 左-右回転
  • 左右回転

最初の2回転は1回転で、次の2回転は2回転です。不均衡な木を作るには、少なくとも高さ2の木が必要です。この単純な木で、それらを1つずつ理解しましょう。

左回転

ツリーが不均衡になった場合、ノードが右側のサブツリーの右側のサブツリーに挿入されると、左に1回回転します-

JavascriptでのAVLローテーション

この例では、ノード A ノードがAの右側のサブツリーの右側のサブツリーに挿入されると、バランスが崩れます。 Aを作成して左回転を行います Bの左側のサブツリー 。この回転はLL回転とも呼ばれます。それをどのように実装できるか見てみましょう-

function rotationLL(node) {
let tmp = node.left;
node.left = tmp.right;
tmp.right = node;
return tmp;
}

右回転

左側のサブツリーの左側のサブツリーにノードが挿入されると、AVLツリーが不均衡になる可能性があります。次に、ツリーを右に回転させる必要があります。

JavascriptでのAVLローテーション

示されているように、不均衡なノードは、右回転を実行することにより、左の子の右の子になります。これは、RRローテーションとも呼ばれます。コードでどのように見えるか見てみましょう-

function rotationRR(node) {
let tmp = node.right;
node.right = tmp.left;
tmp.left = node;
return tmp;
}

左右回転

二重回転は、すでに説明したバージョンの回転の少し複雑なバージョンです。それらをよりよく理解するために、回転中に実行される各アクションに注意する必要があります。まず、左右の回転の仕方を確認しましょう。左右の回転は、左回転とそれに続く右回転の組み合わせです。

アクション
状態
JavascriptでのAVLローテーション ノードが左側のサブツリーの右側のサブツリーに挿入されました。これにより、 C 不均衡なノード。これらのシナリオにより、AVLツリーは左右の回転を実行します。
JavascriptでのAVLローテーション 最初に、Cの左側のサブツリーで左回転を実行します。 これにより、 A Bの左側のサブツリー 。
JavascriptでのAVLローテーション ノードC まだ不均衡ですが、現在は、左サブツリーの左サブツリーが原因です。
JavascriptでのAVLローテーション 次に、ツリーを右回転させて、 Bを作成します。 このサブツリーの新しいルートノード。 C これで、独自の左側のサブツリーの右側のサブツリーになります。
JavascriptでのAVLローテーション ツリーのバランスが取れました。

これは、最初に左回転を実行し、次に右回転を実行するため、LR回転とも呼ばれます。これは、前の2つの方法を使用して次のように実装できます-

function rotationLR(node) {
node.left = rotationRR(node.left);
return rotationLL(node);
}

左右回転

2番目のタイプの二重回転は左右回転です。これは、右回転とそれに続く左回転の組み合わせです。

アクション
状態
JavascriptでのAVLローテーション ノードが右側のサブツリーの左側のサブツリーに挿入されました。これにより、 A、 バランス係数2の不均衡ノード。
JavascriptでのAVLローテーション まず、 Cに沿って右回転を実行します ノード、 Cを作成 独自の左側のサブツリーの右側のサブツリーB 。さて、 B Aの正しいサブツリーになります 。
JavascriptでのAVLローテーション ノードA 右のサブツリーの右のサブツリーのためにまだ不均衡であり、左の回転が必要です。
JavascriptでのAVLローテーション 左回転は Bを作成して実行されます サブツリーの新しいルートノード。 A 右側のサブツリーの左側のサブツリーになりますB
JavascriptでのAVLローテーション ツリーのバランスが取れました。

これは、最初に右回転を実行し、次に左回転を実行するため、RL回転とも呼ばれます。これは、前の2つの方法を使用して次のように実装できます-

function rotationRL(node) {
node.right = rotationLL(node.right);
return rotationRR(node);
}

  1. Javascriptでのプリムのアルゴリズム

    Primのアルゴリズムは、重み付き無向グラフの最小スパニングツリーを見つける欲張りアルゴリズムです。すべての頂点を含むツリーを形成するエッジのサブセットを検出し、ツリー内のすべてのエッジの合計の重みが最小化されます。 アルゴリズムは、ツリーから別の頂点への可能な限り安価な接続を追加する各ステップで、任意の開始頂点から一度に1つの頂点でこのツリーを構築することによって動作します。 プリムのアルゴリズムはどのように機能しますか? プリムのアルゴリズムがどのように機能するかを示す図を見てみましょう- 1.ルートノードとして任意のノードを選択します。この場合、Primのスパニングツリーのルートノ

  2. JavaScriptの子ノード数?

    children.lengthを使用して、子ノードの数を取得します。 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initialscale=1.0"> <title>Document</title> <link rel="style