アルゴリズム、二分探索 (Binary Search)をPython、PHP、Javascriptでの実装したサンプルコード(ChatGPT)

ChatGPT アルゴリズム,ChatGPT

アルゴリズム、二分探索 (Binary Search)をPython、PHP、Javascriptでの実装したサンプルコード(ChatGPT)

OpenAIの対話型AIモデル「ChatGPT」にアルゴリズム、二分探索 (Binary Search)をPython、PHP、Javascriptで実装したサンプルコードを教えて貰いました。

確認環境
  • ChatGPT PLUS

二分探索 (Binary Search)について

アルゴリズム、二分探索 (Binary Search)についてを教えて下さい。

二分探索 (Binary Search)は、ソート済みの配列から特定の要素を見つけるための効率的なアルゴリズムです。配列が小さい場合には、線形探索 (Linear Search)で目的の要素を探すことができますが、大きな配列に対しては、二分探索の方が効率的です。

二分探索のアルゴリズムは以下のようになります。

  1. 配列の中央にある要素を選択します。
  2. この要素が目的の要素であるかどうかをチェックします。 a. 目的の要素であれば、探索終了。 b. 目的の要素より小さい場合、配列の左側にある要素を対象に再帰的に探索を行います。 c. 目的の要素より大きい場合、配列の右側にある要素を対象に再帰的に探索を行います。

このアルゴリズムは、配列の中央要素を選択することで、最悪の場合でも $O(log_2 n)$ 回の比較で目的の要素を見つけることができます。ただし、配列をソートするための時間が必要であるため、配列が更新される頻度が高い場合には効率的ではありません。

また、配列内に同じ要素が複数存在する場合、どの要素が見つかるかは保証されないことに注意してください。

二分探索 (Binary Search)をPythonで実装するサンプルコード

アルゴリズム、二分探索 (Binary Search)をPythonで実装した場合のコード例を教えて下さい。

以下は、二分探索を実装するPythonコード例です。ここでは、リストを対象に二分探索を行います。

def binary_search(data_list, target):
	"""
	リストの二分探索を行う関数
	:param data_list: 探索対象のリスト(昇順にソートされていることを前提としています)
	:param target: 探す値
	:return: インデックス(見つからなかった場合は-1)
	"""
	left = 0
	right = len(data_list) - 1
	while left <= right:
		mid = (left + right) // 2
		if data_list[mid] == target:
			return mid
		elif data_list[mid] < target:
			left = mid + 1
		else:
			right = mid - 1
	return -1

# 二分探索の実行例
data_list = [1, 2, 3, 4, 5]
target = 3
result = binary_search(data_list, target)
print(result)  # 2

上記のコードでは、リストの二分探索を実装しています。二分探索は、探索対象のリストが昇順にソートされていることを前提としています。まず、リストの中央にある要素を調べ、目的の値と比較します。目的の値が中央の値と等しい場合は、そのインデックスを返します。目的の値が中央の値よりも大きい場合は、中央より右側の部分リストに対して同じ操作を行います。目的の値が中央の値よりも小さい場合は、中央より左側の部分リストに対して同じ操作を行います。このように、探索対象のリストを半分ずつに分割していき、目的の値が見つかるまで繰り返します。目的の値が見つからなかった場合は、-1を返します。

二分探索 (Binary Search)をPHPで実装するサンプルコード

アルゴリズム、二分探索 (Binary Search)をPHPで実装した場合のコード例を教えて下さい。

以下は、PHPで二分探索を実装するコード例です。ここでは、配列を対象に二分探索を行います。

function binary_search($data_array, $target)
{
	/*
    配列の二分探索を行う関数
    $data_array: 探索対象の配列(昇順にソートされていることを前提としています)
    $target: 探す値
    戻り値: インデックス(見つからなかった場合は-1)
    */
	$left = 0;
	$right = count($data_array) - 1;
	while ($left <= $right) {
		$mid = (int)(($left + $right) / 2);
		if ($data_array[$mid] == $target) {
			return $mid;
		} elseif ($data_array[$mid] < $target) {
			$left = $mid + 1;
		} else {
			$right = $mid - 1;
		}
	}
	return -1;
}

// 二分探索の実行例
$data_array = array(1, 2, 3, 4, 5);
$target = 3;
$result = binary_search($data_array, $target);
echo $result;  // 2

上記のコードでは、配列の二分探索を実装しています。二分探索は、探索対象の配列が昇順にソートされていることを前提としています。まず、配列の中央にある要素を調べ、目的の値と比較します。目的の値が中央の値と等しい場合は、そのインデックスを返します。目的の値が中央の値よりも大きい場合は、中央より右側の部分配列に対して同じ操作を行います。目的の値が中央の値よりも小さい場合は、中央より左側の部分配列に対して同じ操作を行います。このように、探索対象の配列を半分ずつに分割していき、目的の値が見つかるまで繰り返します。目的の値が見つからなかった場合は、-1を返します。

二分探索 (Binary Search)をJavaScriptで実装するサンプルコード

アルゴリズム、二分探索 (Binary Search)をJavaScriptで実装した場合のコード例を教えて下さい。

以下は、JavaScriptで二分探索を実装するコード例です。ここでは、配列を対象に二分探索を行います。

function binarySearch(dataArray, target) {
	/*
	配列の二分探索を行う関数
	dataArray: 探索対象の配列(昇順にソートされていることを前提としています)
	target: 探す値
	戻り値: インデックス(見つからなかった場合は-1)
	*/
	let left = 0;
	let right = dataArray.length - 1;
	while (left <= right) {
		const mid = Math.floor((left + right) / 2);
		if (dataArray[mid] === target) {
			return mid;
		} else if (dataArray[mid] < target) {
			left = mid + 1;
		} else {
			right = mid - 1;
		}
	}
	return -1;
}

// 二分探索の実行例
const dataArray = [1, 2, 3, 4, 5];
const target = 3;
const result = binarySearch(dataArray, target);
console.log(result);  // 2

上記のコードでは、配列の二分探索を実装しています。二分探索は、探索対象の配列が昇順にソートされていることを前提としています。まず、配列の中央にある要素を調べ、目的の値と比較します。目的の値が中央の値と等しい場合は、そのインデックスを返します。目的の値が中央の値よりも大きい場合は、中央より右側の部分配列に対して同じ操作を行います。目的の値が中央の値よりも小さい場合は、中央より左側の部分配列に対して同じ操作を行います。このように、探索対象の配列を半分ずつに分割していき、目的の値が見つかるまで繰り返します。目的の値が見つからなかった場合は、-1を返します。