問題タブ [adjacency-list-model]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - 隣接リスト モデル ツリー、ループを防止
表の例:
私が作成しているツリーには、同じテーブルに複数の「ルート」ユーザーが含まれます (parent_id = NULL の場合)。これらの「ルート」ユーザーは、ある時点で「リーフ」ユーザー (配下に誰もいないユーザー) から parent_id を取得する場合があります。私が持っている疑問は、次のような「ループ」を作成しないようにする方法です。
ツリー設計の例:
- a
- b
- c
- d
- e
- へ
- g
ユーザー「a」がユーザー「g」を親として取得した場合、作成されるループは次のようになります。
質問:ユーザー「a」がツリー内のユーザー「g」の下に移動したいときに、ユーザー「g」がユーザー「a」の下にあるかどうかを確認する良い方法は何ですか? (これらの特定のケースでアクションを防ぐことができるように)
考慮すべき重要なポイント: 2 つのツリーが 1 つにマージされることは、非常に頻繁に発生します。ツリーのレベル数が仮想的に 80 の場合、ループを防ぐためのチェックにかなりの時間がかかる可能性があるため、効率的な方法を探しています。
編集済み: 私が持っていた現在のオプションは(私は懐疑的ですが)次のとおりです。
テーブル内の各ユーザーの現在の「ルート」ユーザーを示す追加の列を作成します。そのような場合、「ルート」ユーザーが親を取得するたびに、その下にいるすべてのユーザーが新しい「ルート」ユーザーで更新される必要があり、私が心配しているのは、これがサーバーにどれほどの負担をかけるかということです。多くのユーザーと、「ルート」ユーザーが親を取得する頻度が高い場合。
彼に親を与える前に、「ルート」ユーザーのパスを確認します。上記のケースで、ユーザー「g」が、g を超える各ユーザーを 1 つずつループしてパスをチェックし (ルートに到達するまで、親が何であるかを何度も確認します)、ルートがユーザー「a」であることがわかった場合。 、はい、アクションを防ぐことができますが、これがサーバーにどれほど負担をかけるかはわかりません. 誰かがアイデアを持っているなら、私に知らせてください!
c++ - BGL デシリアライゼーションに関するさらに別の問題
データをグラフ形式でシリアライズおよびデシリアライズしようとしています。私のグラフの定義は次のとおりです。
シリアル化プロセスには問題がないように思えますが、逆シリアル化部分にはいくつかの問題があります。実際、このコードがソースに追加されるまで、リンク エラーは発生しません。
ここでいくつかの質問を読んだり、Boost のマニュアルを読んだりしましたが、問題は解決しませんでした。特に、次のエラーがあります。
ちなみに、ブーストでサポートされていると思われる「ネイティブデータ型」である文字列と符号なし整数をシリアライズおよびデシリアライズしています。
編集はい、ソース コードを BGL と Boost のシリアル化の両方にリンクしています。これは、CMake スクリプトの次の部分によって達成されます。
php - シーケンスのリストから隣接構造を作成する
PHPでシーケンスのリストから隣接リストを作成したいと思います。問題は、シーケンスのリストが配列になっており、次のようになっていることです。
ここで、次のように隣接リスト モデルになるように変換したいと思います。
したがって、私の $arr1 は、ツリー ビュー (jsTree) のテーブルで「parentId」を表します。
誰かが私を正しい方向に向けてくれますか、またはどこから解決策を探し始めるべきですか.
ありがとうございました。
r - Rで大きな隣接行列を適切にプロットする
視覚的に表現しようとしているかなり大きな (しかし非常にまばらな) 隣接行列 (500x500) があります。力有向グラフに似たものが私の最善の策であるように思われ、これを実装する最良の方法を見つけようとしているときに、R に関する複数のリソースに出会いました。最も役に立ったのはhttp:/のネットワーク可視化でした/kateto.net/network-visualization R は使ったことがありませんが、このような視覚化に役立つ機能がたくさんあるようです。
以下のプロットを作成できましたが、画像はかなり小さく、ノードが積み上げられています。
PNG ではなく pdf に印刷すると、解像度がわずかに向上しますが、スタッキングの問題はまだあります。したがって、私の質問は、これらの問題を解決するために、R で大きな隣接行列を適切にプロットするにはどうすればよいかということです。
これまでの私のコードは次のとおりです (最後の数行で、データをプロットするためにいくつかの異なる方法を試みました)。どんなヒントでも大歓迎です。前もって感謝します。
便宜上、https://github.com/BStricklin/DataVizの GitHub を参照する 2 つのファイルをアップロードしました。
編集:どうやってこれをやったのか疑問に思っている人のために、MATLABを使用し、グラフとプロット関数を利用する必要がありました。R イメージと同じくらい見栄えが悪いですが、ノードのカスタマイズとズーム機能の使用により、十分に機能しました。ただし、Rでこれを行う方法にはまだ興味があります。
sql-server - SQL 複雑な再帰 CTE
私は SQL Server 2014 で作業しています。奇妙なデータ階層の状況があります。(少なくとも、私は以前にそのようなことを経験したことがありません。)
私の階層には、いくつかのルート/最上位オブジェクトがあります。ルート レベルより下のすべてのオブジェクトは、その上の 1 つのオブジェクトだけにマップされます。すべてのノード パスが同じ長さではありません。たとえば、あるパスには 2 つのオブジェクト レベルがあり、別のパスには 20 のオブジェクト レベルがある場合があります。
階層内のすべてのオブジェクトには、IsInherited
属性とその他の属性 ( と呼びますSomeAttribute
) があります。この属性は、指定されたオブジェクトが最も近い親からIsInherited
の値を継承するかどうかを示します。SomeAttribute
当然のことながら、オブジェクトのIsInherited
属性が「Y」の場合、指定されたオブジェクトは最も直接のSomeAttribute
親から値を継承します (さらに、最も直接の親の値を継承することもできます)。それ以外の場合は、オブジェクトのSomeAttribute
値が指定されます。
さて、上記のすべてが必ずしも珍しいわけではありません。この状況を珍しいものにしているのは、この継承の特定の実装です。この階層は単一のテーブルに格納され (これは隣接リスト モデルになりますか?)、属性が「Y」の場合、指定されたオブジェクト/行の値SomeAttribute
は入力されません。IsInherited
SomeAttribute
私の目標は、階層内のすべてのオブジェクトの値を返すことです。
テーブルのサンプルは次のとおりです。
これにより、次のノード パスが得られます。
したがって、このサンプル テーブルでは、次の結果が返されると予想されます。
これにはおそらく再帰的な CTE が必要であることを知っています。このためのSQLを書くのに苦労しています。必要な出力を返すにはどうすればよいですか?