タグ付けされた質問 「trees」

特別な種類のグラフ、つまり、接続されたサイクルフリーのグラフに関する質問。

3
バイナリツリーが検索ツリーであるかどうかをテストし、完全なブランチをカウントするアルゴリズム
再帰的アルゴリズムを作成して、バイナリツリーがバイナリ検索ツリーであるかどうかを確認し、想定されるグローバルカウント変数を使用して、そこに完全なブランチがいくつあるか(左と右の両方の子ノードを持つ親ノード)を数える必要があります。これは私のデータ構造クラスの割り当てです。 これまでのところ void BST(tree T) { if (T == null) return if ( T.left and T.right) { if (T.left.data < T.data or T.right.data > T.data) { count = count + 1 BST(T.left) BST(T.right) } } } しかし、これを実際に理解することはできません。2番目のifステートメントがtrueでない場合、カウントはゼロになるため、このアルゴリズムは問題を解決しないことを知っています。 誰かがこれを手伝ってくれる?

3
バイナリツリーの最小の高さなぜですか?
私のJavaクラスでは、さまざまなタイプのコレクションの複雑さについて学習しています。 間もなく、私が読んでいる二分木について議論します。この本は、二分木の最小の高さはであると述べていますが、それ以上の説明はありません。log2(n+1)−1ログ2⁡(ん+1)−1\log_2(n+1) - 1 誰かが理由を説明できますか?

1
ローズツリーの用途は何ですか?
私は最近、ローズツリーのデータ構造について知りましたが、Haskellのdata定義とそのウィキペディアの小さな説明から抜け出しただけで、ローズツリーがどのようなアプリケーションを持っているのかを理解するのに問題があります。 参考までに、Haskellのdata定義: data RoseTree a = RoseTree a [RoseTree a] Haskellに不慣れな人にとっては、これは任意の型を持つ再帰的なデータ型定義でaあり、型コンストラクタには型のリテラルがあり、aその後RoseTreeに同じ型のオプションの空の型リストが続きaます。 私の見立てでは: このデータ構造はデフォルトでは順序付けされていません(ただし、ほとんどの実際的なアプリケーションは、検索のために何らかの形式の順序付けを実装していると思います) データ構造は、単一のノードを持たなければならないグローバルルートを除いて、どの時点でもレイヤーごとに固定数のノードを強制しません。 その最小限の情報を考えると、このタイプのツリーをいつ使用できるかを理解するのに苦労しています。 タイトルの質問に加えて、ローズツリーのほとんどのアプリケーションで検索が実際に実装されている場合、これはどのように行われますか?
10 trees 

2
ハフマンツリーと最大深度
各シンボルの周波数を知っていると、ハフマンアルゴリズムを適用せずにツリーの最大の高さを決定することは可能ですか?この木の高さを与える式はありますか?


1
定数kが与えられた場合、ルートからリーフへのすべてのパスについて、そのノードのアリティの合計がkに等しい場合、最大のルート付きツリーを見つけますか?
例として、の場合に考えられるすべてのツリーを次に 示します。 各ノードには、アリティ(=子の数)が書き込まれます。k=3k=3k=3 これは動的プログラミングで解決できるはずですが、これには組み合わせの結果があったと思います(正確またはかなり細かい上限)。誰か知っていますか? 編集: ツリーのサイズは、ノードの数です。したがって、最大のツリーは、ノードの最大数を持つツリーになります。

3
フォレスト内のすべてのノードの高さを見つける
私にはフォレスト、つまり有向エッジがあり、サイクルがない(有向または無向)ノードがあります。頂点高さを、vvv入力エッジがない場合は0として定義するか、高さ0の頂点に到達するために逆方向に移動するエッジの最大数を定義します。 また、ノードの平均次数は小さな定数、たとえば2程度であることも知っています。すべての頂点の高さを見つけるには、2つのアルゴリズムを考えることができます。 歩行アルゴリズム 入力エッジのない頂点について、とマークしh = 0h=0h=0ます。 各頂点について、出て行くエッジをたどり、以前の高さがより小さければ、遭遇した各頂点の高さを更新します。h = 0h=0h=0 フロンティアアルゴリズム 通過マークのない着信エッジを持つ頂点の、およびフロンティアとしてこれらをマークします。h = 0h=0h=0 すべてのフロンティア頂点について、親がフロンティア以下に子を持っているかどうかを確認します。もしそうであれば、親に加え、その子の中で最大の高さがあることをマークします。親がフロンティアにいるとマークします。111 フロンティアを超えるものがなくなるまで、2を繰り返します。 私の質問: この問題に名前はありますか、そして最もよく知られている最速の解決策はありますか? 私はすべての頂点から単に上に行くことが最も速い解決策であると考える傾向があります。私は正しいですか?h = 0h=0h=0

1
ミニマックスツリーの最小値は何に使用されますか?
敵対的な検索問題のためにミニマックスツリーを検討してください。たとえば、次の図では(アルファベータ剪定): 木をマークするとき [min,max][min,max][\min,\max]値がボトムアップの場合、最初にノード333をトラバースし、B. \ max = 3を割り当てますB.max=3B.max=3B.\max = 3。次に、121212と888をこの順序でトラバースします。これにより、B.max=3B.max=3B.max = 3ます。 しかし、なぜB.min=3B.min=3B.\min = 3でしょうか。その値の用途は何ですか?

1
可変2D配列のプレフィックス合計
M[n][n]整数の2D配列があるとしましょう(実際、バイナリは問題ありませんが、問題ではないかと思います)。次の形式のクエリの繰り返しに興味があります。座標ペア与えられた場合、は何 もちろん、これらの値はすべて合計時間で計算でき、その後、クエリはます。ただし、私の配列は変更可能であり、値を変更するたびに、明らかな解決策として更新が必要です。k,lk,lk,lΣi = 0k − 1Σj = 0l − 1M[ i ] [ j ] ?∑i=0k−1∑j=0l−1M[i][j]? \sum_{i = 0}^{k-1} \sum_{j = 0}^{l-1} M[i][j]? O(ん2)O(n2)\mathcal O(n^2)O(1)O(1)\mathcal O(1)O(ん2)O(n2)\mathcal O(n^2) 上に四分木を作成できますM。前処理にかかる、これは私たちが行うことができ、クエリで、およびアップデートで。O(ん2ログ(n ))O(n2log⁡(n))\mathcal O(n^2\log(n))O(nログ(n ))O(nlog⁡(n))\mathcal O(n\log(n))O(log(n))O(log⁡(n))\mathcal O(\log(n)) 私の質問は: 更新をあまり犠牲にすることなく、クエリを大幅に改善できますか? 特に、更新操作とクエリ操作の両方を準線形にしたり、特に両方をしたりすることに興味があります。O(んε)O(nϵ)\mathcal O(n^\epsilon) 編集:詳細については、この制限なしでも問題は興味深いと思いますが、大まかにクエリを実行し、更新することを期待しています。理想的な目標は、実行時間全体を約です。したがって、クエリがをするのに、更新がをする状況も興味深いでしょう。O(ん3)O(n3)\mathcal O(n^3)O(ん2)O(n2)\mathcal O(n^2)O(ん3 + ϵ)O(n3+ϵ)\mathcal O(n^{3+\epsilon})O(nログ(n ))O(nlog⁡(n))\mathcal O(n \log(n))O(ログ(n ))O(log⁡(n))\mathcal O(\log(n))

2
N項ツリーの事前、事後、および順序付きウォークは何を意味しますか?
このWikipediaの記事で説明されているツリートラバーサルメソッドは、予約注文、注文注文、および注文注文です。これらの方法は二分木に限定されていますか?アルゴリズムは、左と右の子に関して定義されているようです。n進ツリーに使用できる場合、どのようにですか? n-aryツリーには、任意のノードに1つの親とnの子があります。ここで、nは各ノードの任意の整数です。 必要な場合は、下の図を使用してこれを説明してください。

1
深さ優先検索の時間の複雑さ[終了]
休業。この質問には詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善してみませんか?詳細を追加し、この投稿を編集して問題を明確にしてください。 3年前休業。 初心者の質問をすることを許してください。しかし、私はアルゴリズムと複雑さの初心者であり、特定のアルゴリズムの複雑さがどのようにして生じたのか理解するのが難しい場合があります。 コーメンのアルゴリズムの紹介から DFSアルゴリズムを読んでいましたが、これがアルゴリズムでした。 G -> graph G.V -> set of vertices in G u.π -> parent vertex of vertex u G.Adj[u] -> adjacency list of vertex u DFS(G) 1 for each vertex u ∈ G.V 2 u.color = WHITE 3 u.π = NIL 4 time = 0 …

1
二分根ツリー同型
私の木は根が張られており、すべての頂点に最大で2つの子があります。以下の質問の一部またはすべてを解決するのに役立つリファレンスが必要です。 n個の頂点を持つツリーの同型クラスはいくつありますか? 与えられた2つのツリーが同型であるかどうかを判断するための古典的なアルゴリズムは何ですか? 素敵な(計算可能な?)同型不変量はありますか? もちろん、答えは木を定義するために使用された構造に依存するかもしれませんが、構造の正しい選択は私が求めている答えの一部だと思います。

1
(木)言語がブチを認識できないことを証明する
私はツリーオートマトンについてのいくつかのノートをレビューしていて、教授が不完全に残した証拠を結論づけようとしています。ステートメントは次のとおりです。 しましょう A={a,b}A={a,b}A = \{a,b\} そして T={t∈TωA∣every path in t contains a finite number of a}T={t∈TAω∣every path in t contains a finite number of a}T = \{t \in T_A^{\omega} \mid \text{every path in $t$ contains a finite number of $a$}\}。証明してくださいTTT ブチは認識できません。 次のツリーのサブセットを定義できます tn⊆Ttn⊆Tt_n \subseteq T どこ t∈tnt∈tnt \in t_n 持っている …


3
バイナリツリーは、実際のアプリケーションでハッシュテーブルよりも優れているのはいつですか?
私は現在、データ構造と基本的なアルゴリズムを利用しています。その一部がバイナリツリーです。私はアルゴリズムを理解し、二分探索木などを実装する方法を理解しています。O(log n)時間でルックアップを実行できるのは非常に賢明です。 しかし、ハッシュテーブルが同じ/より良い仕事をしないバイナリツリーを使用する場合の例を見つけるのに苦労しています。私は周りを検索していて、それが3Dグラフィスに使用されていることを発見しました。表示するアイテムについての何かですが、これに関連して苦労しています。 ハッシュテーブルよりもバイナリツリーを使用した方がよい例を教えてもらえますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.