問題タブ [tree]
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.
language-agnostic - この非末尾再帰関数を書き直す良い方法は何ですか?
どういうわけか、この関数を一定のスタックスペースを使用するように書き直す良い方法を考えるのに苦労しています。フィボナッチ関数を使用し、その特定の問題の特性を利用することにより、ツリー再帰のチートに関するほとんどのオンラインディスカッションが行われます。この「現実世界」(フィボナッチ数列よりも現実世界)での再帰の使用について何かアイデアはありますか?
Clojureは、末尾呼び出しの最適化がなく、「recur」特殊形式による末尾再帰のみを備えているため、興味深いケースです。また、可変状態の使用を強くお勧めしません。tree-seqを含む多くの怠惰な構造がありますが、この場合にどのように役立つかはわかりません。C、Scheme、Haskell、または他のプログラミング言語から習得したいくつかのテクニックを誰かが共有できますか?
編集:コメントでリクエストして...
一般的な用語で言い換えると、Schemeを使用します-スタックスペースを消費したり、非自己呼び出しの末尾呼び出しの最適化を必要としないように、次の再帰パターンを書き直すにはどうすればよいですか?
x、macerate、frobnicate、f、g、またはhの代数的特性に依存しない答えを探しているという点を理解するために、迷惑な名前を選びました。再帰を書き直したいだけです。
更新:
Rich Hickeyは、Clojureに明示的なトランポリン機能を追加してくれました。
data-structures - 「20の質問」ゲームのために二分木をディスクに保存したい
要するに、私は二分木をディスク(一般的な木、必ずしもBSTではない)に保存するための洗練された方法を学び/開発したいと思います。これが私の問題の説明です:
「二十の質問」のゲームを実装しています。内部ノードが質問で、葉が回答である二分木を作成しました。ノードの左側の子は、誰かが現在の質問に「はい」と答えた場合にたどるパスであり、右側の子は「いいえ」の答えです。これは二分探索木ではなく、左の子が「はい」で右の子が「いいえ」の二分木であることに注意してください。
プログラムは、ユーザーに自分の答えをコンピューターが考えていたものと区別するように求めることによって、nullの葉に遭遇した場合に、ツリーにノードを追加します。
ユーザーがプレイするとツリーが構築されるため、これは適切です。きちんとしていないのは、ツリーをディスクに保存する良い方法がないということです。
ツリーを配列表現として保存することを考えました(ノードiの場合、左の子は2i + 1、右の2i + 2、親の場合は(i-1)/ 2)が、クリーンではなく、最終的には無駄なスペースがたくさん。
スパースバイナリツリーをディスクに保存するためのエレガントなソリューションのアイデアはありますか?
php - PHP (MySQL / XML / ?) で使用する n/ 深さツリーを再構築する最良の方法
私は現在、教師がオンラインでカリキュラムを計画できるアプリケーションを書き直しているところです。
このアプリケーションは、教師が生徒の作業単位を作成するプロセスをガイドします。現在、このツールは 3 つの州で使用されていますが、それ以上に拡大する計画があります。
このアプリケーションの主な特徴の 1 つは、学生のすべての成果がシステムにプリロードされていることです。これにより、教師は各作業単位で達成される結果を検索または参照して選択することができます。
私が最初にシステムを設計したとき、私はすべての学生の成果が同様の階層に従うと仮定しました。つまり、名前付きのネストされたコンテナとその結果があります。
私が入力した最初の結果セットは 3 層でした。そのため、私のデータベースには次の構造があります。
=========================
太字の表
h1
ID、名前
h2
id、parent___id (h1_id)、名前
h3
id、parent___id (h2_id)、名前
結果
id、parent___id (h3_id)、名前
=========================
n/ レベルの階層を追加できないことは明らかですが、この方法では、データベースに再帰的にクエリを実行せずにすべての標準のリストを表示することも困難でした。
学生の成果 (およびその親カテゴリ) が追加されると、それらを変更する理由はほとんどありません。主な要件は、読みやすく効率的であることです。
これまでのところ、さまざまな学校/州/国からの生徒の成績はすべて、私の仮定にほぼ従っています。これは常に当てはまるとは限りません。
もちろん、既存のデータはすべて現在のデータベースから転送する必要があります。
上記を考慮して、さまざまな学生の成果セットをすべて保存するための最良の方法は何ですか? 私が持っていたアイデアのいくつかを以下にリストします。
再帰または多数の結合を使用する場合は、データベース内の 4 つのテーブルを引き続き使用します。
ネストされたセットを使用する
XML (すべての異なるセットのグローバル XML ファイル、またはそれぞれの XML ファイルのいずれか)
xml - Flex - Tree から Repeater へのデータバインディング
フラッシュで XML 質問エディターを作成しようとしています。基本的に、XMLをツリーコンポーネントにロードします-XMLは次のようになります:
それがツリーに入ります。変更すると、選択した質問 (item..option) のオプションのリストが取得され、その XMLList が (カスタム) コンポーネントに渡されます。そのコンポーネント (これが最善の方法かどうかはわかりませんが、それでも...) - いくつかの Repeater コントロールがあります - 1 つはラジオの質問の XMLList にバインドされ、もう 1 つはチェックの XMLList にバインドされますボックスの質問。各リピーターはオプションの数をループし、TextInput を (オプション テキストを編集するために) 配置し、ラジオまたはチェック ボックスのいずれか (質問の種類に応じて) を配置します。
したがって、私が求めているのは、オプションのテキストが編集されたときです。その TextInput の XML は、ツリーの dataProvider である XML にバインドされます。たとえば、「これはオプション 1 です」が「これはオプション Foo です」に変更された場合、ツリーはそれで更新されます。
これまでのところ、私のリピーター(ラジオ用など)はこのようなものです
バインディングは機能しません-ここで得られるのは次のような警告だけです:
これが事実である理由はある程度わかりますが、ユーザーが編集できるデータをソースxmlにバインドする方法に途方に暮れています。ツリー自体を編集可能にできることはわかっていますが、実際にはここではオプションではありません。
ですから、どんな指針やアイデアも大歓迎です!
c# - ツリーをゼロから実装する
木をゼロから実装して、木について学ぼうとしています。この場合、C# Java または C++ で実行したいと思います。(組み込みメソッドを使用しない場合)
したがって、各ノードにはキャラクターが格納され、ノードごとに最大 26 個のノードが存在します。
各ノードへのポインターを格納するには、どのデータ構造を使用しますか?
基本的に、基数ツリーをゼロから実装しようとしています。
ありがとう、
c++ - C++ ハフマン コード ヘッダー
基本的に、私はハフマンテーブルを次のように持っています
string はビット パターンで、char はそのパターンで表される値です。問題は、それを圧縮ファイルのヘッダーとして保存して、デコードしたいときに同じマップを再度構築できるようにする方法です。
バイナリとして保存しようとしています:
そして後でビルドします:
動作しません。文字列の初期化エラーが発生します... NULL と関係があります。助言がありますか?ビットと値を保存するより良い方法があれば、私が聞きたいです。
java - ツリーを実装するときに java.io.Serializable を使用しますか?
別のシリアライゼーションの質問がありますが、今回はバイナリにシリアライズするときの Java のネイティブ シリアライゼーション インポートに関するものです。別の Java ファイルで生成されたランダム ツリーをシリアル化する必要があります。シリアライゼーションとデシリアライゼーションがどのように機能するかは知っていますが、java.io.Serializable でバイナリ シリアライゼーションを使用した場合に従った例は、単純なオブジェクトなどで行った場合と同じようには機能しませんでした。ここに私のコードセグメントがあります:
writeObject(randomTree) を使用するときに問題があると思います。これが発生すると、いくつかの端末例外が発生します...それらは以下のとおりです。
java.io.NotSerializableException: GeneralTree at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1081) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302) at BinaryS.main(BinaryS.java:24)
編集:GeneralTreeと書かれていることは知っていますが、クラスの開始時にそれを入れました
次に、その下に GeneralTree があります
");
更新: やあみんな、私は自分の問題を理解しましたが、私がばかであることが判明し、追加の .java ファイルをダウンロードする必要があることに気づきませんでした。今すぐ簡単に修正できます! ご協力いただきありがとうございます!
file - ファイルのツリーのテキスト仕様?
たとえば、grep ツールで検索するファイルのセットを指定するために、ツリー構造でファイルを指定する例を探しています。名前の一致によってファイルとディレクトリを含めたり除外したりできるようにしたいと思います。そこに例があると確信していますが、それらを見つけるのに苦労しています。
考えられる構文の例を次に示します。
(これは、拡張子 .py .html .txt .js を持つファイルをインクルードし、.pyc ファイル、.svn ディレクトリの下にあるもの、combo_ .js に一致するすべてのファイルを除外することを意味します)
この種の仕様は以前に他のツールで見たことがあります。これは誰かにとって何か鐘を鳴らしていますか?
optimization - 複数値ノードを持つツリーで最小パスを見つける
私の数学の授業ははるかに遅れており、現在、私が抱えている問題の適切な解決策を見つけるのに苦労しています。ノードがアクションであり、複数の基準に従って「重み付け」されているツリーがあります。言った行動、それがかかる時間、必要な資源、妨害など...
そして、このツリーで、たとえばコストと時間の両方、または外乱とコストと時間などの両方を最小化するパスを見つけたいと思います。私の問題は、立ち上がる以外に、それを行う方法がわからないことです。グローバルコスト関数F(cost、time、resources、...)を使用し、F(...)の結果を唯一の重みとして使用して、通常のツリートラバーサルアルゴリズムを適用します。では、どうすればFを思い付くことができますか?「F(コスト、時間、リソース)=a*コスト+b*時間+c*リソース」のようなものは非常に「専門的ではない」と感じます...
編集:
「合計」という言葉を避けたかったのは、それが実際に進むべき道かどうかわからなかったためですが、本質的には、それが私が行っていることです。そのトップノードをリーフの1つに移動し、コストを最小限に抑える「パス」または「ブランチ」を選択します。問題は、各ノードが必要な時間、財務コスト、リソース使用量などに基づいて重みを持っていることです。
したがって、Stephanが言うように、これらすべてのパラメータをノードごとに1つのグローバルコストに削減する式を考え出す必要があるように思われます。これにより、ツリーを下るときにノード間で合計し、次のパスを選択できます。総コストを最小限に抑えます。
だから私の質問は本当にそうだと思います、それはその機能を選択する方法論がありますか?
あなたの答えとコメントをありがとう、それは今私の頭の中でもう少し明確になり始めています。