再帰アルゴリズムにおけるリンクリスト操作

再帰アルゴリズムにおけるリンクリスト操作

今日は、問題をさらに一歩進めて、再帰プロセスに対応する操作を追加する予定です。

(免責事項: 以下のソリューションは娯楽目的のみに提供されています。また、サンプル コードはコンパイルおよびデバッグされておらず、多くのアイデアは実際に検証されていません。)

リンク リスト内の N 番目から最後のノードを検索します。

解決策1

最後のノードまでレイヤーごとに再帰的にトラバースし、返されたノードから 1 回再帰的に逆方向に N 回トラバースして、N 番目から最後のノードを見つけます。

  1. プライベートLNode targetNode = null ;
  2. プライベートLNode FindLastNthNode(LNode ヘッド、 intインデックス)
  3. {
  4. (head.Next == null )の場合
  5. {
  6. ヘッドを返す
  7. }
  8.  
  9. 最後のN番目のノードを検索します(head.Next、インデックス);
  10.  
  11. LNode tmpNode = ヘッド;
  12.  
  13. ((head.Next != null ) && (インデックス > 0))の間
  14. {
  15. ヘッド = head.Next;
  16. 索引 - ;
  17. }
  18.  
  19. (head.Next == null && インデックス == 0)の場合
  20. {
  21. ターゲットノード = tmpNode;
  22. targetNodeを返します
  23. }
  24.  
  25. targetNodeを返します
  26.  
  27. }

分析する

1. 追加のグローバル ヘルパー変数。

2. 時間計算量は O(index * n) です。ここで、n はリンク リストの長さです。

3. パフォーマンスのオーバーヘッドは大きくなります。

解決策2(解決策1のバリエーション)

現在のノードが走査されるたびに、ループバックして n 個のノードを走査します。ノードが最後まで走査され、インデックスが 0 に減分された場合、現在のノードは最後に見つかった n 番目のノードであることを意味します。つまり、解決策 1 は後ろから前へ検索し、解決策 2 は前から後ろへ検索します。

  1. プライベートLNode targetNode2 = null ;
  2.  
  3. プライベートLNode FindLastNthNode2(LNode ヘッド、 intインデックス)
  4. {
  5. (head.Next == null )の場合
  6. ヘッドを返す
  7.  
  8. LNode tmpNode = ヘッド;
  9.  
  10. (head != null && index >= 0)の間
  11. {
  12. ヘッド = head.Next;
  13. 索引 - ;
  14. }
  15.  
  16. if (head == null && index == 0)
  17. {
  18. ターゲットノード2 = tmpNode;
  19. targetNode2を返します
  20. }
  21.  
  22. targetNode2を返します
  23. }

分析: ソリューション 1 と同じです。

解決策3

  1. プライベート 整数カウンター = 0;
  2. プライベートLNode targetNode2;
  3.  
  4. プライベートLNode FindLastNthNode2(LNode ヘッド、 intインデックス)
  5. {
  6. (head.Next == null )の場合
  7. {
  8. カウンター = インデックス;
  9. ヘッドを返す
  10. }
  11.  
  12. 最後のN番目のノード2を検索します(head.Next、インデックス);
  13.  
  14. カウンタ - ;
  15.  
  16. (カウンタ == 0)の場合
  17. {
  18. ターゲットノード2 = ヘッド;
  19. targetNode2を返します
  20. }
  21.  
  22. targetNode2を返します
  23. }
カウント用のグローバル変数を定義します。再帰が最後のノードから戻ると、カウンターが減少します。カウンターが 0 に等しい場合、このノードは N 番目に見つかった最後のノードです。分析 1。 2 つの補助変数。 2. 時間計算量はO(n)です。 3. 冗長インデックス、冗長カウンター。 オリジナルリンク: http://www.cnblogs.com/lucasluo/archive/2012/07/31/2617417.html

【編集者のおすすめ】

  1. さまざまな側面からみた Python コードのパフォーマンス最適化に関する新しい講演
  2. 開発者のための時間管理のヒント
  3. 開発者にとって最適なコード エディターは何ですか?
  4. Web開発フレームワーク権限管理システム
  5. インタビューコードの品質を向上させる3つの要素

<<:  データマイニングのためのK平均法アルゴリズムのグラフィカルな説明

>>:  Java で実装されたいくつかの一般的なソートアルゴリズムの詳細な解釈

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

ハーバード大学の新しい研究がサイエンス誌の表紙を飾る:この機械式外骨格は「軽量」なショートパンツだ

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

ファーウェイが推進する「マシンビジョン」はインダストリー4.0成功の鍵となるのか?

最近、「新インフラ」や「デジタルインフラ」がホットワードとなっている。新インフラの一つである「産業イ...

十分なデータを使用してモデルをトレーニングしたかどうかをどのように確認しますか?

[51CTO.com クイック翻訳]ディープニューラルネットワーク (DNN) には大量のトレーニ...

...

ディープラーニングを専門家以外の人に説明するにはどうすればよいでしょうか?

昨年から、AIの普及に関わる仕事がたくさん必要になりました。私は長い間、ディープラーニングがなぜ特に...

最新の電子皮膚が本物の痛みを与え、切断者の触覚回復を助ける

ジョンズ・ホプキンス大学医学部の研究チームは、人間の皮膚にある触覚受容体の複雑な神経ネットワークを利...

AIと機械学習の品質保証

[51CTO.com クイック翻訳]人工知能はここ数年間、人々の注目を集めてきました。 「あなたのた...

AI時代におけるコンピュータのマクロ的な意義について語る

実際、私たち人間は、そのようなことを心配する必要はありません。科学者は、人工知能が人間の脳のレベルに...

...

AESアルゴリズムを簡単に説明すると

AESアルゴリズムAES (Advanced Encryption Standard) は、2001...

オピニオン: 人工知能の失敗を考察する7つの方法

がんの検出から就職面接の実施者の決定まで、AI システムは多くのことを人間よりも速く、正確に、確実に...

強化学習の起源:迷路を歩くネズミから人間に勝つAlphaGoまで

強化学習となると、多くの研究者のアドレナリンが抑えきれないほど湧き上がります!これは、ゲーム AI ...

...

室温超伝導の続編はあるのでしょうか?中国チームはLK-99がマイスナー効果を持つ可能性があることを再び証明し、論文がアップロードされたばかりである。

室温超伝導に関する論文が、再びインターネット上でちょっとした騒動を引き起こした。最近の論文で、著者ら...

ストレージ自動化、予測分析、人工知能について知っておくべき6つのこと

現在、人工知能や予測分析などのテクノロジーは、多くのストレージ製品に組み込まれています。これらのテク...