[TIL]JS:ツリー、三重位置決めを行う😢


21年08月08日


ああ、本当に、どうしてその課題を完成したのですか.7日に書くTILですが9日の朝に書いていますか?私はJS文法が本当に無知のように分からないものが多すぎることに気づいた!プログラマーレベル1とか無理に解けるレベルなんだけどレベル3~4の問題を出してくれたから涙がたくさん出たから一晩中グーグルゲームやってたけど大変だった.悲しい物語を書こうしかし、この木を巡る前列、後列、中列の順番がその巡り方を理解し、再帰呼び出しで繰り返される動作用を簡潔にするコードで実現すれば!(重要な)影は本当に頭の中で細部の構造をうまく描けないので、これによって自動完成方法を実現するにはどうすればいいのでしょうか.はい、深刻です.それに加えて、私がそれを論理的に編んでも、私はその文法に適した罠を知らない.中ではグーグルゲームしかやっていないので、宿題の提出時間が3時間も残っていて、一人ではやりきれないと思って助けを求めました!天使😇)本当に基礎文法から順を追って説明して、残りのコードは自分で書くことができます!
残りの周末は本当に勉强しなければならないことがたくさんありますが、平日は忙しくて、结局日曜日の夜10时に倒れて寝てしまいました.特に今日は诞生日で、周末には家族や恋人と食事を约束しました.時間がかかるので、あまり勉強に打ち込めませんでしたが、こんな時間があったので気持ちもスッキリして、また今週走る力を得たようです.

📝 前列、中列、後列を使用してバイナリツリーを巡回


イキントリーが何なのか知っていますか.バイナリ探索やCSを勉強したときに覚えたと言っていますか?バイナリ探索を行うと,探索時間はO(n)からO(logn)に減少する.(TMI)
とにかく、この機会に、私たちは確かにバイナリツリーと巡回探索に関する知識を学びました!私はこのように再帰呼び出しによって実現した.

特に使用過程で回帰呼について不明確な点があり,課題終了後に民政大人が非常に感謝して資料を作成し,回帰呼の操作方法について説明したが,これはより明確な理解の時間である.
また、メソッド固有の再帰呼び出しの基本ステップでは、
if(node != null) 
空のノードを判断する条件を与えるよりも
if(!node)
nullとundefinedを同時に処理できるので、より使いやすいです.

実装中に発生した問題


  • ナビゲーション順序を出力すると、コンソールが表示されます.log()視覚的には、1行1行が実装され、以降の実際の実装では、この機能の実装が有効であると仮定すると、ループメソッドでは、ループの順序に従ってスレッドが一時的に宣言され、最後にその順序を出力しようとすると、出力がアレイにきれいに変換される.できるだけやった.

  • また、この過程で、どこでこの案を発表するかも悩ましい問題だ.Treeクラスで宣言し、次にクラスコードを実行するときにその配列が存在するかどうか、またはTreeクラスとメソッドは関数と同じ役割を果たすだけで、直接実行するときにTreeクラスを使用してツリー変数を宣言し、上にのみ書きます.(これは言葉ではっきり説明できるかどうか…)要するに,後者を選択し,動作は正常であったが,この部分については,基東指導者がコードの先端に並べ替え宣言を行ったほうがよいというフィードバックを得,修正を行った.

  • また,繰返し動作を処理する際に再帰呼び出しを使用すると,コードの簡潔性が大幅に向上するが,for,whileなどの繰返し文を使用するよりもメモリ効率の面で優れているかどうか疑問であり,指導者は재귀 함수가 반복적으로 자기 자신을 호출하면서 stack 메모리에 계속해서 쌓이기 때문에, 메모리 측면에서는 반복문(for문)이 더 좋다고 생각하며 재귀 함수는 overflow 문제도 발생할 수 있어 멘토님께서는 for문을 더 선호하신다と答えた.
  • バイナリツリーとツアーのコンセプトについては次回詳しく書きます.

    📝 ツリー構造によるキーワード自動補完


    小会議でも書いたように、テリーの構造は本当に頭に入りにくい.実は今でもこれが明確だとは言えませんが、私の頭の中でパソコンの動作を体現するのはまだ少し難しいと思いますが、これはゆっくり勉強して適応する問題だと思いますので、焦らないでください.
    要するに,この課題のタスクは,ユーザがある文字を入力する際に,既存入力のデータセットからユーザが入力した文字列に一致する文字列を自動完了キーワードとして提供することである.
    👇 自動完了メソッドコードは次のとおりです.

    実装中に発生した問題


  • すべてだから...これ以上少なくはありません.

  • しかし、コードを理解して私のコードにした後、コード実装で少し注意した点は(非常に...細かい部分ですが)、自動完了キーワードを出力する際に、簡単にリストして終了するだけでなく、アルファベット順に並べ替えて出力することです.あとで本当にオートコンプリート機能が実現したら、この部分は検索したキーワードを回数順に並べ替えてもらい、時間があればあとで検索回数も入力値として実現するのがベストです.
  • フィードバックセクション

  • trie.autoComplete("");実行時、指導教師は、実際には、ユーザーはキーワードなしに空の文字列を入力しなければならないが、空の文字列と一致する文字列の文字列は現在のtrieに存在するすべての文字列であるため、入力されたすべてのデータセットに出力の問題があるとフィードバックした.
  • // when users search an empty string, we will quit this process
    
        if (userInput === "") {
          console.log('검색을 희망하는 키워드를 입력해주세요.');
          return false;
        }
    したがって、autoCompleteメソッドの上部に対応するコードを追加して、コードが空の文字列であるか否かを判断し、空の文字列である場合、メソッドの実行を終了する.
  • チームメンバーは、既存のデータセットにabcabcdが含まれていても、trie.autoComplete("a");を実行する場合、最高abcはリーフノードとみなされないため、abcdのみを出力する例外を処理する必要があるとフィードバックした.実は最初は意味がよくわからなかったので、出力値を調べてみるとわかります.したがって、insert(userInput)メソッドが既存のデータ入力値を受信すると、文字列の最後の
  • userInput += '*'; // endpoint
    これにより、端点が指定されるが、出力時に露出されることは望ましくないため、autoCompleteメソッドでは、文字列がキーワード出力を自動的に完了するスタックに最終的にスタックされるpush前に
    let keyword = currentNode.value.replace(/\*$/, '');
    文字列の最後に「*」がある場合は、空の文字列で置換されたコードが追加されます.
    本当に思いもよらなかった部分で、チームメンバーのフィードバックに感謝し、そのためにコードを修正し、少し前に学んだ正規表現を利用しました.(喜んでいます)

    n/a.結論


    週末に書いたこのコードは完全に私のものだと言いたいのですが、実はまだ難しいことがたくさんあります.より良い方法で、これらの機能を簡単に実現できる開発者になるように努力し続けます.思い切ってこの課題を達成します!の最後の部分
    今週も頑張ります!