私はデータ構造とアルゴリズムと呼ばれるユニットをやっています。私たちはちょうど始まったばかりです。私の教授は、Algebraic Semanticsの基礎と公理の基礎について教えてくれました。これまで、私はTreesを配列の形で使ってきました。 tree(value、tree、tree)としてpre-ordered treeのシグネチャを使用していません。ここで、valueはノード内の値で、左のノードは最初のツリーで、右のノードは2番目のツリーです。ツリー抽象データ型
ツリー(値、ツリー、ツリー)またはNilとしてツリーを定義しているので、addNode(value、tree)の代数を定義する方法を理解できません。
各レベルではますます複雑になっていきます。そして、とにかく1つのレベルを1回スキャンして1時間のように試してみることはできません。代数は、私たちが木を下っていくにつれ、より多くのelsesに分かれていきます。私はそれを正しくしていますか?あなたは正しい方向に私を向けることができますか?または、ツリーをツリー(値、ツリー、ツリー)として実装することはできませんか?
これは私のチュートリアルの一部です(追加の質問に値する価値はありません)。しかし、私は瞬時に答えを探しているわけではありません。テーマが好きで、もっと学びたいです。
編集1:私はウィキペディアをチェックアウトしましたが、明確な答えを得るために教科書を使いたくないのですが、私は正しい方向に向かってヒントを探しています。ツリーをツリー(値、ツリー、ツリー)として定義します。フォームADTをリスト形式で表すことができます。しかし、私はそれについて本当に考えたかったのです。それが理にかなってほしい。ありがとう、たくさんの人!
編集2:うん、インターネットで説明するのは難しい。たとえば、「ツリー」という新しいデータ構造を定義しています。 私はそれをツリーとして定義します:tree(value、tree、tree)OR nil それはありません。プログラミングコード、それは私がそれを定義する方法です。ツリーは値+ 2の他のツリーです。ツリーはゼロです。 addNode(value、tree)は、ノードをツリーに追加します。 プログラミングコードではなく、単なる代数的意味論です。私はそれを正しく説明できるかどうかわかりません。しかし、私はキューまたはスタックを使用して達成できる解決策に達しましたが、それは私が定義しなければならない別のADTです。これは有効ではありません。
編集3:私は実際にそうなっていたよりも難しくなった多くのことを想定していたようです。まず、私が与えた少しの説明から、ガメカットの答えは完璧でした。しかし、私はコメントに同意する、それは完全に他のADTを含めることが有効です。実際、Intを使用するものを構築するときは、その構造に対してADTを使用しています。私は各ADTがユニークでなければならないと思いました。とにかく、あなたの答えのために多くの人に感謝!
を追加します。あなたがより具体的であれば、addNodeは何をしなければならないのですか?(ルートとしての価値を追加する - バランスを保つ?)そして今どのようにしていますか(例えば、公理)?私が今言うことができるのは、表現がうまくいくということだけです(関数と型の両方で 'tree'を使うことを除いて)。 – mweerden
私は代数部分を取得します。あなたが立ち往生している場所は明確ではない。これまでに得たものの例を挙げることはできますか?それは完全に間違っているかどうかは関係ありません。また、キュー/スタックソリューションで何が問題になっていますか?他のADTが有効でない理由は何ですか? – mweerden