個人学習シリーズ-分治アルゴリズム
分治アルゴリズムを起こす...
ぶんかつアルゴリズム
概要
分治アルゴリズムは重要なアルゴリズムであり、字面上の解釈は「分而治之」であり、複雑な問題を2つ以上の同じまたは似たようなサブ問題に分解することである.最後のサブ問題が簡単に直接解くことができるまで、元の問題の解、すなわちサブ問題の解の合併、このテクニックは多くの効率的なアルゴリズムの基礎であり、例えばソートアルゴリズム(高速ソート、集計ソート)、フーリエ変換(高速フーリエ変換)...
分治アルゴリズムの3つのステップ
1.分解:原問題をいくつかの規模の小さい問題に分解し、互いに独立し、原問題の形式と同じサブ問題
2.解決:サブ問題の規模が小さい場合は直接解決し、そうでない場合は各サブ問題を再帰的に解く
3.連結:各サブ問題の解を元の問題の解に連結する
コード実装(クイックソート)
正直に言うと、これはまだよく分かりませんが、ここではまず消化してから、戻って書いてみます.
個人情報サイト
http://www.zhouzhaodong.xyz
ぶんかつアルゴリズム
概要
分治アルゴリズムは重要なアルゴリズムであり、字面上の解釈は「分而治之」であり、複雑な問題を2つ以上の同じまたは似たようなサブ問題に分解することである.最後のサブ問題が簡単に直接解くことができるまで、元の問題の解、すなわちサブ問題の解の合併、このテクニックは多くの効率的なアルゴリズムの基礎であり、例えばソートアルゴリズム(高速ソート、集計ソート)、フーリエ変換(高速フーリエ変換)...
分治アルゴリズムの3つのステップ
1.分解:原問題をいくつかの規模の小さい問題に分解し、互いに独立し、原問題の形式と同じサブ問題
2.解決:サブ問題の規模が小さい場合は直接解決し、そうでない場合は各サブ問題を再帰的に解く
3.連結:各サブ問題の解を元の問題の解に連結する
コード実装(クイックソート)
public static int[] quickSort(int[] arr) {
sort(arr, 0, arr.length - 1);
return arr;
}
public static void sort(int[] arr, int left, int right) {
//
if (left > right) {
return;
}
//
int base = arr[left];
int i = left;
int j = right;
//
while (i != j) {
// , base
while (arr[j] >= base && i < j) {
j--;
}
// , base
while (arr[i] <= base && i < j) {
i++;
}
// , i j , ,
if (i < j) {
int num = arr[i];
arr[i] = arr[j];
arr[j] = num;
}
//
arr[left] = arr[i];
arr[i] = base;
//
sort(arr, left, j - 1);
sort(arr, i + 1, right);
}
}
public static void main(String[] args) {
System.out.println(Arrays.toString(quickSort(new int[]{4, 3, 2, 7, 5, 88, 33})));
}
正直に言うと、これはまだよく分かりませんが、ここではまず消化してから、戻って書いてみます.
個人情報サイト
http://www.zhouzhaodong.xyz