20182310 2019-2020-1「オブジェクト指向プログラミングとデータ構造、」学習要約の8週目
コンテンツの概要を学びます
1.一般的には、
継承を介して、多型の前を通って導かれ、オブジェクトは、Object型の点のアレイは、次いで、配列は理論的であり、すべてのデータタイプを保存することができる限り、すべてのタイプの親クラスであります極端な例では
、しかし、兄弟変換型との間に問題が発生しやすいオブジェクトの使用は、コンパイラが文句をしないであろうが、実行時エラーが発生しました。
ジェネリック:クラスを定義することができ、およびデータ操作を保存することができ、だけインスタンス化する際のタイプが判定された場合(典型的には、一般的なTによって表されます)
class Box<T>
{
T类型对象的声明与操作代码
}
ボックスは、データが使用される場合、特定の種類の例として、それを達成するため、代わりにTと定義します
ボックス
ボックス
...
リニア方式の検索2.
線形探索法を使用すると、ターゲット要素を見つけるか、最後まで見てまで、リストの各要素と比較して、見つけるために、ゼロからスタートすることですが見つかりませんでした。
以下の方法は、線形探索を実現しています。このメソッドは、ブール値を返し、真の場合は、要素が発見され、そうでない場合はfalse、見つからないという意味します。
public static <T>
boolean linearSearch(T[] data, int min, int max, T target)
{
int index = min;
boolean found = false;
while (!found && index <= max)
{
found = data[index].equals(target);
index++;
}
return found;
}
バイナリサーチ
バイナリ検索は、(ルックアップセルがソートされた)の代わりに、一端または他端から始まるソートされたリストの開始の真ん中を見つけることです。あなたは最終的にはターゲット要素または実行可能な候補者がもう存在しない見つからなくなるまで同じように検索を続ける、比較することにより、実行可能な代替案を識別し、再び要素の半分の量だけ減らします。
キーは、各半分のバイナリ比較が実行可能な候補者を削除されます見つけることです。
以下の方法は、バイナリ検索を実装し、前記最小屈折率と配列の最大屈折率は、内(可能性のある候補)ルックアップの一部を画定します。
public static <T extends Comparable<T>>
boolean binarySearch(T[] data, int min, int max, T target)
{
boolean found = false;
int midpoint = (min + max) / 2; // determine the midpoint
if (data[midpoint].compareTo(target) == 0)
found = true;
else if (data[midpoint].compareTo(target) > 0)
{
if (min <= midpoint - 1)
found = binarySearch(data, min, midpoint - 1, target);
}
else if (midpoint + 1 <= max)
found = binarySearch(data, midpoint + 1, max, target);
return found;
}
}
注:このアルゴリズムでは、中間点=(MIN + MAX) / 2、 塩基は、自動的にintに変換するときに分+最大値が得られる、小数部分を無視する、すなわち、決定するときに選択されたインデックスの中点(小さい方)は、2つの第一の中間値。
アルゴリズムを見つけるために比較
線形検索とバイナリ検索のために、最善の状況が正確にターゲット要素は、私たちの調査の最初の要素であるが、最悪の場合、ターゲットグループでもありません。したがって、線形探索時間複雑度はO(N)であり、バイナリサーチ時間の複雑さはO(LOG2(N))です。
nが大きい場合の要素の特に多数、バイナリ検索が大幅に効率を向上させる場合、すなわち、です。比較的小さいn個の場合には、リニアは、一般的に線形検索を使用し、小さな問題にも良好なデバッグが容易に見て、ソートを必要としない、と。
3.並び
替え:特定の基準に基づいて、アイテムのセットは、特定の所定の順序で配置されています。
シーケンシャル発注:一般的にソートするネストされたループのペアを使用してn個の要素は、程度のn ^ 2の比較になります。
ログランク:典型的にはnlog2(N)の比較についてかかりn個の要素をソートします。
3つの一般的なソート順:
①ソートの選択、②挿入ソート、③バブルソート、
2つの一般的な対数分類:
①クイックソート、②マージソート
ソートを選択:最小(または最大)を見つけるの要素を繰り返しにより、 、および要素をソートするための最終的な位置に挿入します。
挿入ソート:サブリストによって繰り返し、既に要素をソートの実現、ソートに挿入する要素の前に。
バブルソート:繰り返し隣接する要素を比較し、要素をソートするためにそれらを交換することによって。
クイックソート:要素によってソートされていないが、2つのパーティション、各パーティションに分割され、その後、再帰的にソートします。
クイックソートの平均時間計算量はO(nlogn)です。O(nlogn)アルゴリズムのすべての平均時間計算量は、クイックソートの平均パフォーマンスは最高です。
のにJavaAPIクラスのArrayListとLinkedListのクラス4.は異なる基礎構造のリストによって実現されます。
クラスのArrayListとLinkedListのクラスは、java.util.Listのインタフェースを実装します。示すように、いくつかの方法の一覧インタフェース:
教科書の学習と問題解決のプロセス
- 問題1:キュー・インターフェースと2つのメソッドを追加するには、例外処理のいずれかの異なるを提供します。
問題1つのソリューションは、キューが要素を与えていることを確認するための操作を追加します。与えられた要素がキューに追加されていない場合、操作は例外をスローします。
キューに挿入オペレータ指定された要素を提供し、成功した挿入あれば、そうでない場合はfalseを返し、trueを返します。- 質問2:ASLの意味
問題2ソリューション:平均長さ(平均検索の長さ、ASLは):成功を見つけるために時間の平均の長さを見つけるための検索アルゴリズムと呼ばれるキーワードの数を、比較行動の重要なニーズと期待を指定します。アルゴリズムの効率を測定するために使用します。
プロセスで解決コードのデバッグおよび問題
- 質問1:ヌルについて
- 問題1ソリューション:null値は、オブジェクトのインスタンスではないので、次の例では関係なく、変数宣言の種類をfalseを返しません。
S = null文字列;
IF(instanceofは文字列S)強制,:保存WQ、再度Gitのプッシュすることができ、アップロードした後。 - 質問2:追加操作nullポインタ例外の順序付きリストを達成するためのリストを使用しています。
- 問題2ソリューション:
public void add(T element) {
if (!(element instanceof Comparable))
throw new NonComparableElementException("OrderedList");
Comparable<T> comparableElement = (Comparable<T>)element;
LinearNode<T> current = head;
LinearNode<T> previous = null;
LinearNode<T> node = new LinearNode<>(element);
while (( current != null) && (comparableElement.compareTo(current.getElement()) > 0))
{
previous = current;
current = current.getNext();
}
if (previous == null )
{
head = node;
}
else {
previous.setNext(node);
}
node.setNext(current);
count++;
modCount++;
}
挿入は、ここでは、エラーの位置を、デバッグを実行した後、コードのリストを命じました。
while ( comparableElement.compareTo(current.getElement()) > 0 && current != null )
これは、エラーコードの始まりです。この間判定動作の大きさを比較するのcompareToあることはなく、電流が空であるかどうかを決定することであるが、ことを見出しました。現在は空であるときに、直接ヌルポインタ例外がありました。
だから、ちょうど2つの条件が相互にクリックを逆転している必要があります。
コードホスティング
先週試験間違った質問の概要
先週、何の試験なので、何も間違った質問はありません。
ペアピアレビューと
採点
- 学習課題やブログワース:
- 学習:結論として、詳細な画像に問題がある、と私はいつも問題も時間に誤差の独自の情報源を見つけることができるコードで表示され、スクリーンショットを忘れてしまいました。
- 質問:学習内容の要約は十分に詳細ではありません。
- あなたのコード内の価値の学習や問題:なし
- 15ポイント:スコアに基づいて、私はこのブログの得点を与えます。次のようにスコアは以下のとおりです。
- 適切な使用のマークダウン構文(1点):
- 要素の範囲(1点)テンプレート
教科書の学習と問題解決のプロセス、問題プラス1ポイント()
- コードのデバッグおよび問題解決プロセス、問題プラス1ポイント()
- 週300以上の支店有効なコード(プラス2ポイント)
- その他のプラスのポイント:
- 感情、経験は大きな空の1ポイントを残しません
- 組版の微プラス1ポイント
- プログレスバーは、学習時間を記録し、1ポイントの状況を改善します
- ハンズオン新しいコードを書くことがありますが、1ポイントを追加
- クラスの選択は、1ポイントを確認した後、
- 深さの間違った質問を学ぶ、1ポイントを追加
- コメントは真剣に、私は、問題やブログのコードに加えて1ポイントを指摘することができます
- ペアは本物のプラス1ポイントを学びます
コメントは、学生のブログやコードを持っていました
その他(知覚、思考、など、別売)
知識はコードの量に対応し、データ構造の最も最近の研究では、最大もっと仕事になり、教室での練習はかなり変更されました。しかし、ブログは真剣果たすことになって、私は自分自身が少し厄介コードリポジトリクラウドは整理する必要が発見されました。それを維持します。
学習の進捗バー
コードの行の数(/蓄積を追加) | ブログ量(/蓄積を追加) | 学習時間(/蓄積を追加) | 重要な成長 | |
---|---|---|---|---|
目標 | 10,000行 | 30 | 400時間 | |
最初の週 | 200分の155 | 2/2 | 20/20 | Linuxのコマンド、JavaアプレットとデバッグJDBの初期把握 |
二三週間 | 625分の470 | 2/4 | 20/40 | 協会は、スキャナ定義されたクラスを使用して定義されます |
4週 | 1444/2069 | 2/4 | 20/60 | IDEAとテストコードを書いて、ダウンロードしてプラグインをインストールし、TDDのデバッグを学びます |
5週目 | 1917/3986 | 2/8 | 20/80 | シンプルなクライアントとサーバを書くことを学びます |
6週 | 1324/5310 | 1/9 | 20/100 | Javaのカプセル化、継承、ポリモーフィズム |
7週 | 2795/8105 | 3/12 | 140分の40 | スタック、リンクされたリスト |
8週目 | 1135/9240 | 1/13 | 180分の40 | 選択ソート、他のソート、検索、など |