20182335 2019-2020-1「データ構造とオブジェクト指向プログラミング、」学習要約の7週目

コンテンツの概要を学びます

第12章
アルゴリズム解析

特定の問題を解決するための方法、またはステップの説明:アルゴリズムとは何ですか。

何が(次の基準で)アルゴリズムを実行します。

1.妥当性

2.可読性

3.ロバストネス

4.通用性

効率性とストレージ容量の要件

氷と炎の歌:[時間]と[スペース]複雑

時間複雑:アルゴリズム解析、T(n)が実行文の総数Nは、関数の大きさに関する質問は、NとT(n)を分析し、大きさのオーダーのTの変化(N)を決定します。

T(N)= O(:アルゴリズムの時間複雑性は、アルゴリズムは、で表される、時間の尺度である F(N))。それは問題がサイズと共に増大表し、アルゴリズムの実行時間は、アルゴリズムの進行性の複雑さと呼ばれる成長速度およびF(N)増殖、同じである、時間計算量と呼びます。
ここで、f(n)は、問題のサイズnの関数です。このような大文字のOは、()アルゴリズムの時間表記の複雑さを反映するために、我々はビッグO記法と呼ばれます

第14章

スタック

スタックは、追加および削除要素は一方の端にある、線形セットです。処理データスタックLIFOの方法は、スタックアウト最初のプッシュの最後の要素は、逆の順序でコンプライアンスを用いた処理スタック。

第二、チェーン構造
記憶装置ユニット内の要素のセットのいずれかでは、直線状を格納、ポインタがより便利に、チェーン内の様々な要素の操作を追加または削除することができます。

スタックを達成するために、配列の第三に、使用

第一の配列は、いくつかの重要な特徴を理解する:アレイに記憶されている標準的な要素は、0からN-1、Nは、配列要素の総数であるです。アレイは、インスタンス化オブジェクト毎に格納すべきオブジェクトです。場合スタックアレイ設計、スタックの合計の底部は、位置配列の添字0、順次、配列に格納された連続的なスタック要素に位置しています。ポップの定義、プッシュ、PEEK、このクラスでのisEmpty他の操作。

第四に、スタックを達成するために、チェーンの使用

スタックベースのリストの一端にのみ、この属性は、一方の端部に要素を追加または削除することができため、スタック、リンクされたリストを使用して実装、テーブルのみを指す最初のノードへの参照を必要とし、カウントテーブル内の要素の数を見つけ、それが必要なだけです操作。このクラスでもプッシュ、ポップ、PEEK操作で定義されています。

第15章

キュー

キューは何か:キューは、特殊な線形の形で、唯一のテーブルで、挿入の後端ながら、テーブルの先端に削除を可能にし、同じスタックという点で、キューが制限運転で特別ですリニアテーブル。(先入れ先出し)

キュー

スタックに似て:
各後アレイが満たされ、次の要素は、既存のアレイを拡張するために、配列のサイズを倍に、添加されます。

要素が削除されるたびに、どのくらいの空き領域検出アレイ。アレイのサイズの1/4のみが配列内の要素の数である場合、配列は半分になります。

それを除いて:

それはFIFOであるため、最も始めたキューの先頭から削除。我々はデータの数を除去するときに、キューのデータはアレイの中間部に記憶されています。テンキー、データIDの先頭としてデータキューデータIDの後端ようにすることはHeadIndex、テンキーされる - HeadIndexは、キュー内のデータ要素の数です。

キュー内のデータ要素の数は、アレイの容量の四分の一である場合には、配列は半分、およびデータ配列が左端左キューに移動されます。即ちNum- = HeadIndex; HeadIndex = 0。

教科書の学習と問題解決のプロセス

質問1:時間の複雑さと空間とは何ですか?

本の内容:成長関数は、問題の大きさ(n)の値との関係を示しており、最適化したいです。

個人的な理解:本は詳細に、時間の複雑さと空間の概念の複雑さを説明していないので、私は、関連する情報へのアクセスに行ってきました。時間計算アルゴリズムを意味する必要な計算労力を行い、必要なアルゴリズムの実行メモリ空間の空間的な複雑さを指します。人気の話、アルゴリズムの複雑さを考慮するための時間は、アルゴリズムの効率化と設計に密接に関連している、時間を実行しています。マルチループアルゴリズムがある場合たとえば、それは複雑性が非常に高くなければならない時が来た、最後に行われなければなりません。宇宙複雑さは、アルゴリズムは、占有スペースがある考慮する多くのコンピュータリソースを取る必要があり、その名前が示唆されます。

質問2:ジェネリックとは何ですか?

本の内容:ジェネリッククラスは、定義、保存、およびオブジェクトインスタンスのときに、特定の種類までの動作を管理するために使用することができ
、一般的なプログラミング言語のプロパティ:個人的な理解。強く型付けされたプログラミング言語でコードを書く時間の可変部分を定義するためのプログラマは、これらの部分は、指定された使用前になされなければならないことができます。プログラミング言語とそのコンパイラのさまざまな動作環境は、ジェネリック医薬品のための同じサポートはありません。

質問3:センチネルノードは特殊な状況の最初のノードを処理するために削除することができ、リストの管理、そこにされ、センチネルリンパ節の使用は、どのようにのようなものでしょうか?

質問3ソリューション:私はいくつか紹介センチネルノードのテキストをオンラインで見つける:「センチネルリンパ節(センチネル)はダミーノード(ダミーノード)で、境界条件を簡素化することができますが、最初のようにノードの追加リストノードです。ノードは、便宜のためにのみ操作が導入さ、範囲には何も格納しない。センチネルノードがリストを持っている場合、第2のリニアテーブルの最初の要素は、リストのノードにリンクされるべきである。
多くのセンチネル節のないリスト、最初のノード、即ち、第1のノードが存在しない場合場合、現在のノードに対応する前駆体は、いかなる先行ノードは、それが間違っている可能性があり、特別な治療場合は存在せず、特別な処理がするかどうかコードの複雑さの増加だけでなく、プログラムの効率を低下させる。そしてテーブルのそれぞれのノード位置は線形前駆ノードは単一であってもよい有する。センチネル節場合、
リストが空である場合、リストは、ヘッドノードセンチネルノードではありませんNULL、処理され、そしてそれはまた、他の場合と異なっている。リストとセンチネルノード、それは空のリストである場合 ポインタのみセンチネルリンパ節を含むフィールド、センチネルリンパ節が空で、そして尾の他の事情は同じである。「私は本当に、空で偽の最初のノードとして、ファントムノード彼に電話することを好みますリンクされたリスト内の2番目のノードにおける鎖および第1のインサート要素を削除する最初の要素は、第1ノード上の特別な操作を回避するために、第1のノードと第2ノードとの間で行うことができますそして、効率を向上させます。

プロセスで解決コードのデバッグおよび問題

質問1:における不明確popメソッドLinkedStack。

T結果= top.getElement()。
トップ= top.getNext()。
カウント-;

問題解決策1:コード結合LinearNodeは、第1の上部の要素を取得し、その結果に割り当てられ、結果が返され、次の要素を取得した後LinearNodeのGETNEXT方法の上部に、ポップアップ要素は、動作時に達成される認識します。

マネージドコード(https://gitee.com/li_jinquan/ljq/tree/master/src

https://gitee.com/li_jinquan/ljq/tree/master/

先週試験間違った質問の概要

先週、何の試験ません

コメントは、学生のブログやコードを持っていました

ペア学習今週
20182311を

感情

より今週のものは、時間の不足、タイムリーな調整の必要性を学び、調整に多くの時間と労力を費やしています。続けてください。

参考資料

「Javaプログラミングとデータ構造のコース(第二版)」

「Javaプログラミングとデータ構造のコース(第二版)」研究ガイド

おすすめ

転載: www.cnblogs.com/lijinquan/p/11789679.html