アルゴリズム
日本語 | 解決手順 |
英語 | algorithm |
ふりがな | あるごりずむ |
フリガナ | アルゴリズム |
ある処理を行う際の手順。
特に、配列等の「複数個のデータ」を処理する際の手順を指す。
複数個のデータを処理する場合、その処理手順によって処理時間が異なる。
たとえば、ソート。
ソートを行う場合、「どの要素とどの要素を比較するか」によって、「要素を比較する回数」が変わってくる。
要素の比較手順、つまり「アルゴリズム」によって、「要素を比較する回数」、つまり「処理の掛かる時間」が大きく異なる。
そのため、様々なアルゴリズムが生み出され、利用されている。
ただし、実際に使用するアルゴリズムは少ない。
ある程度速く、汎用的に使えるアルゴリズムであれば、たいがいの処理に使えるため、そのようなアルゴリズムを全般的に使用した方が良い。
また、「最速のアルゴリズム」は使用する場面が限定されている事も多く、あまり速さにこだわらない方が良い。
一般的なアルゴリズムは、J2SEに実装されていたり、その他のライブラリに存在する場合も多い。
たとえばソートであれば、Arraysクラスのsort()メソッドでクイックソート及び修正マージソートでソートすることができる。
アルゴリズムは一般に複雑であり、注意して作らないとバグを生みやすい。また、Arraysクラスのsort()メソッドのような「ComparableインターフェイスやComparatorインターフェイスを用いた汎用化」を行わないと、ソートする対象毎にソートメソッドを作らなければならず無駄が出る。
アルゴリズムの研究や大学の課題等でアルゴリズムを作製するのはいいが、業務処理等にはすでに実装されているアルゴリズムを使用し、自作のものは使用しない方がいいだろう。
特に、配列等の「複数個のデータ」を処理する際の手順を指す。
複数個のデータを処理する場合、その処理手順によって処理時間が異なる。
たとえば、ソート。
ソートを行う場合、「どの要素とどの要素を比較するか」によって、「要素を比較する回数」が変わってくる。
要素の比較手順、つまり「アルゴリズム」によって、「要素を比較する回数」、つまり「処理の掛かる時間」が大きく異なる。
そのため、様々なアルゴリズムが生み出され、利用されている。
ただし、実際に使用するアルゴリズムは少ない。
ある程度速く、汎用的に使えるアルゴリズムであれば、たいがいの処理に使えるため、そのようなアルゴリズムを全般的に使用した方が良い。
また、「最速のアルゴリズム」は使用する場面が限定されている事も多く、あまり速さにこだわらない方が良い。
一般的なアルゴリズムは、J2SEに実装されていたり、その他のライブラリに存在する場合も多い。
たとえばソートであれば、Arraysクラスのsort()メソッドでクイックソート及び修正マージソートでソートすることができる。
アルゴリズムは一般に複雑であり、注意して作らないとバグを生みやすい。また、Arraysクラスのsort()メソッドのような「ComparableインターフェイスやComparatorインターフェイスを用いた汎用化」を行わないと、ソートする対象毎にソートメソッドを作らなければならず無駄が出る。
アルゴリズムの研究や大学の課題等でアルゴリズムを作製するのはいいが、業務処理等にはすでに実装されているアルゴリズムを使用し、自作のものは使用しない方がいいだろう。
参考サイト
// Sample.java
public class Sample
{
public static void main( String[] args )
{
// 出力する配列を用意します。
int[] ints = new int[]{ 4, 9, 3, 5, 8 };
for( int iF1 = 0; iF1 < ints.length; ++iF1 )
{
System.out.print( ints[iF1] + ", " );
}
System.out.println();
// 4, 9, 3, 5, 8,
// バブルソートします。
bubbleSort( ints );
for( int iF1 = 0; iF1 < ints.length; ++iF1 )
{
System.out.print( ints[iF1] + ", " );
}
System.out.println();
// 3, 4, 5, 8, 9,
}
/**
* 最も簡単なソートアルゴリズム、バブルソートをします。
*/
private static void bubbleSort( int[] array )
{
// 「入れ替え先」のループです。
// 左端から1ずつ増えて、右端のひとつ前まで進みます。
for( int iOut = 0; iOut < array.length - 1; iOut++ )
{
// 右端から左端方向へのループです。
// ただし「入れ替え先」までです。
for( int iIn = array.length - 1; iOut < iIn; iIn-- )
{
// ある要素と、その要素の「ひとつ左」を比較します。
if( array[iIn] < array[iIn - 1] )
{
// 「ひとつ左」の方が大きいので入れ替えます。
int iTemp = array[iIn];
array[iIn] = array[iIn - 1];
array[iIn - 1] = iTemp;
}
}
}
}
}
public class Sample
{
public static void main( String[] args )
{
// 出力する配列を用意します。
int[] ints = new int[]{ 4, 9, 3, 5, 8 };
for( int iF1 = 0; iF1 < ints.length; ++iF1 )
{
System.out.print( ints[iF1] + ", " );
}
System.out.println();
// 4, 9, 3, 5, 8,
// バブルソートします。
bubbleSort( ints );
for( int iF1 = 0; iF1 < ints.length; ++iF1 )
{
System.out.print( ints[iF1] + ", " );
}
System.out.println();
// 3, 4, 5, 8, 9,
}
/**
* 最も簡単なソートアルゴリズム、バブルソートをします。
*/
private static void bubbleSort( int[] array )
{
// 「入れ替え先」のループです。
// 左端から1ずつ増えて、右端のひとつ前まで進みます。
for( int iOut = 0; iOut < array.length - 1; iOut++ )
{
// 右端から左端方向へのループです。
// ただし「入れ替え先」までです。
for( int iIn = array.length - 1; iOut < iIn; iIn-- )
{
// ある要素と、その要素の「ひとつ左」を比較します。
if( array[iIn] < array[iIn - 1] )
{
// 「ひとつ左」の方が大きいので入れ替えます。
int iTemp = array[iIn];
array[iIn] = array[iIn - 1];
array[iIn - 1] = iTemp;
}
}
}
}
}
// Sample.java public class Sample { public static void main( String[] args ) { // 出力する配列を用意します。 int[] ints = new int[]{ 4, 9, 3, 5, 8 }; for( int iF1 = 0; iF1 < ints.length; ++iF1 ) { System.out.print( ints[iF1] + ", " ); } System.out.println(); // 4, 9, 3, 5, 8, // バブルソートします。 bubbleSort( ints ); for( int iF1 = 0; iF1 < ints.length; ++iF1 ) { System.out.print( ints[iF1] + ", " ); } System.out.println(); // 3, 4, 5, 8, 9, } /** * 最も簡単なソートアルゴリズム、バブルソートをします。 */ private static void bubbleSort( int[] array ) { // 「入れ替え先」のループです。 // 左端から1ずつ増えて、右端のひとつ前まで進みます。 for( int iOut = 0; iOut < array.length - 1; iOut++ ) { // 右端から左端方向へのループです。 // ただし「入れ替え先」までです。 for( int iIn = array.length - 1; iOut < iIn; iIn-- ) { // ある要素と、その要素の「ひとつ左」を比較します。 if( array[iIn] < array[iIn - 1] ) { // 「ひとつ左」の方が大きいので入れ替えます。 int iTemp = array[iIn]; array[iIn] = array[iIn - 1]; array[iIn - 1] = iTemp; } } } } }