선형 검색: Python, C++ 예시

⚡ 스마트 요약

선형 검색은 목표 값을 찾거나 리스트가 끝날 때까지 리스트의 각 요소를 순차적으로 검사합니다. 이 방법은 정렬된 데이터가 필요하지 않으며, O(n) 시간 복잡도로 작동하고, 규모가 작거나 정렬되지 않은 컬렉션에 효과적입니다.

  • 🔍 핵심 메커니즘: 선형 검색은 대상 요소를 인덱스 0부터 모든 요소와 비교하여 일치하는 요소가 발견되면 해당 위치를 반환하거나, 검색이 종료되면 -1을 반환합니다.
  • ⚙️ 함수 동작: 해당 루틴은 값이 존재하면 0에서 n-1 사이의 인덱스를 반환하고, 검색 요소가 배열에 없으면 -1을 반환합니다.
  • 💻 Code 구현 사항: 일 C++ Python 이 예제들은 단일 반복문을 사용하여 정수 배열을 순회하고 찾고자 하는 값이 나타나는 인덱스를 출력합니다.
  • 📊 복잡성 프로필: 시간 복잡도는 최악의 경우와 평균적인 경우에 O(n)에 도달하고 최상의 경우에는 O(1)에 도달하는 반면 공간 복잡도는 전체적으로 O(n)으로 유지됩니다.
  • 🚀 최적화 기술: 키 전치 및 맨 앞으로 이동 기능은 자주 검색되는 키를 앞쪽으로 재배열하여 반복 검색 시 비교 횟수를 줄입니다.

선형 검색 알고리즘

검색 알고리즘이란 무엇인가요?

검색 알고리즘은 주어진 데이터 구조를 가진 요소 또는 객체들의 모음에서 특정 요소 또는 객체를 찾는 알고리즘입니다. 예를 들어, 주어진 높이 목록에서 최소 높이를 찾거나, 숫자 목록 또는 배열에서 최고 점수를 찾는 알고리즘이 있습니다. 대표적인 검색 알고리즘으로는 선형 검색, 이진 검색, 점프 검색, 피보나치 검색 등이 있습니다.

선형 검색이란 무엇입니까?

선형 검색 선형 검색은 가장 간단한 검색 알고리즘 중 하나입니다. 주어진 리스트나 배열에서 원하는 요소를 하나씩 찾아냅니다. 선형 검색은 리스트 전체를 순회하며 특정 요소가 찾고자 하는 요소와 같은지 확인합니다. 이 알고리즘은 또한 가장 간단한 검색 알고리즘이라고도 불립니다. 순차 검색.

선형 검색 기능은 무엇을 합니까?

정수 배열은 "Numbers,” 변수 “item”에는 검색할 정수가 포함됩니다.

이제 선형 검색 알고리즘은 다음과 같은 출력을 제공할 수 있습니다.

  • "-1"은 주어진 요소가 배열에서 발견되지 않았음을 의미합니다.
  • 0에서 n-1 사이의 숫자; 이는 검색 요소를 찾았으며 배열에 있는 요소의 인덱스를 반환한다는 의미입니다. 여기서 n은 배열의 크기를 나타냅니다.

선형 검색은 어떻게 작동하나요?

정수들이 담긴 배열이 있다고 가정해 봅시다. 주어진 숫자를 배열에서 찾는 것이 목표입니다.

  • 숫자가 배열에 있으면 해당 숫자의 인덱스를 반환해야 합니다.
  • 주어진 숫자를 찾을 수 없으면 -1을 반환합니다.

순서도에서 “Data”는 정수 배열이고, “N”은 배열의 크기, “item”은 배열에서 검색하려는 숫자입니다.

선형 검색 알고리즘의 흐름도:

선형 검색 알고리즘 흐름도

순서도의 단계는 다음과 같습니다.

단계 1) 검색항목 'item'을 읽어보세요.

단계 2) i=0, 인덱스=-1로 초기화합니다.

단계 3) 만약 내가

단계 4) Data[i]가 "item"과 같으면 5단계로 이동합니다. 그렇지 않으면 6단계로 이동합니다.

단계 5) 인덱스 = i (해당 항목이 인덱스 번호 i에서 발견되었으므로). 8단계로 이동합니다.

단계 6) 나는 = 나는 +1이다.

단계 7) 3 단계로 이동합니다.

단계 8) 중지합니다.

단순화를 위해 정수 배열의 예를 제공합니다. 선형 검색은 문자열, 객체 배열 또는 구조체에도 적용 가능합니다.

별명 Code 순차 탐색 알고리즘의 경우

다음 의사 코드는 위에서 설명한 선형 검색의 논리를 나타냅니다. 배열의 첫 번째 인덱스부터 순회하며 일치하는 항목이 있으면 해당 위치를 반환하고, 그렇지 않으면 -1을 반환합니다.

function linearSearch: in → Data[], item
    foundAt = -1
    for i in (0 to data.length):
        if data[i] equals item:
            // item is found in the array
            // returning the index
            return i
    // item not found in the array
    // -1 means no item found, as a negative index is not valid
    return -1

C++ Code 선형 검색 예

다음은 전체 내용입니다. C++ 순차 검색을 구현하고 검색된 값의 인덱스를 출력하는 프로그램입니다.

#include <bits/stdc++.h>
using namespace std;

int linearSearch(int *arr, int item, int n) {
    int idx = -1;
    for (int i = 0; i < n; i++) {
        if (arr[i] == item) {
            idx = i;
            break;
        }
    }
    return idx;
}

int main() {
    int array[] = {1, 9, 8, 7, 6, 3, 11, 4, 6, 9, 7, 2, 0, 19, -10};
    int n = sizeof(array) / sizeof(array[0]);
    int item;
    cout << "Enter a number to search: ";
    cin >> item;
    int idx = linearSearch(array, item, n);
    if (idx >= 0) {
        cout << item << " is found at index " << idx << endl;
    } else {
        cout << "Could not find " << item << " in the array" << endl;
    }
}

출력:

Enter a number to search: -10
-10 is found at index 14

Python Code 선형 검색 예

동일한 논리가 적용됩니다. Python 리스트 인덱스를 순회하는 단일 루프를 사용하여 일치하는 요소의 위치를 ​​반환합니다.

def linearSearch(data, item):
    for i in range(len(data)):
        if data[i] == item:
            return i
    return -1

data = [1, 9, 8, 7, 6, 3, 11, 4, 6, 9, 7, 2, 0, 19, -10]
item = int(input("Enter a number to search: "))
idx = linearSearch(data, item)
if idx >= 0:
    print("{} is found at index {}".format(item, idx))
else:
    print("{} was not found".format(item))

출력:

Enter a number to search: -10
-10 is found at index 14

선형 탐색 알고리즘의 복잡도 분석

일반적으로 시간 복잡도는 특정 작업을 수행하는 데 필요한 CPU 시간을 의미합니다. 선형 검색 알고리즘에서 작업은 배열의 요소 중에서 검색 키를 찾는 것입니다.

시간 복잡도에는 세 가지 유형이 있습니다.

  • 최악의 시나리오
  • 최고의 사례 시나리오
  • 평균 사례 시나리오

최악의 시나리오에서 선형 검색의 시간 복잡도:

크기가 "n"인 배열에서 선형 검색을 수행해야 한다고 가정해 보겠습니다. 검색 대상은 인덱스 0부터 n-1 사이에서 찾을 수 있습니다. 최악의 경우, 알고리즘은 배열의 모든 요소를 ​​검색 대상 요소와 일치시키려고 시도할 것입니다.

이 경우 최악의 경우 시간 복잡도는 O(n)이 됩니다. 여기서 "O"(빅 O 표기법)는 시간 복잡도 함수를 의미합니다.

최고의 시나리오에서 선형 검색의 시간 복잡도:

배열의 첫 번째 위치에 있는 요소를 찾는다고 가정해 보겠습니다. 이 경우 선형 검색 알고리즘은 배열의 모든 n개 요소를 검색하지 않습니다. 따라서 시간 복잡도는 O(1)이 됩니다. 즉, 상수 시간입니다.

평균적인 경우의 선형 검색의 시간 복잡도:

배열의 중간 인덱스에서 요소가 발견되면 선형 검색에 대한 평균 케이스 복잡도는 O(N)이라고 할 수 있습니다. 여기서 N은 배열의 길이를 의미합니다.

선형 탐색 알고리즘의 공간 복잡도:

선형 검색의 공간 복잡도는 항상 O(N)입니다. 왜냐하면 선형 검색 함수에서는 어떤 종류의 임시 변수도 저장하거나 사용할 필요가 없기 때문입니다.

선형 검색 알고리즘을 개선하는 방법

프로그램 실행 주기 동안 검색은 여러 번 수행될 수 있습니다. 또한 선형 검색 알고리즘을 실행하여 특정 키를 여러 번 검색하는 것도 가능합니다. "를 사용할 수 있습니다.이진 검색 알고리즘” 배열이 정렬된 배열인 경우.

배열이 10개의 숫자로 구성되어 있고 대상 요소가 5000번째 인덱스에서 발견된다고 가정합니다. 따라서 알고리즘은 5000개의 요소를 비교하려고 합니다. 이제 비교는 CPU에 많은 부담을 주는 작업입니다. 선형 검색 알고리즘을 최적화하기 위해 두 가지 옵션이 있습니다.

  • 전치
  • 앞으로 이동

전치:

이 방법에서는 배열에서 찾고자 하는 요소를 바로 앞 요소와 교환합니다. 예를 들어 다음과 같은 배열이 있다고 가정해 보겠습니다.

데이터[] = {1,5,9,8,7,3,4,11}

이제 검색을 하려고 합니다. 4. Steps of Transposition:

선형 검색의 전치

단계 1) "4"는 인덱스 6에 있습니다. XNUMX번의 비교가 필요했습니다.

단계 2) 데이터[6]와 데이터[5]를 교환합니다. 그러면 데이터 배열은 다음과 같습니다.

데이터[] = {1,5,9,8,7,4,3,11}

단계 3) 4를 다시 검색하세요. 인덱스 5에서 찾았습니다. 이번에는 XNUMX번의 비교가 필요했습니다.

단계 4) data[5]와 data[4]를 바꿉니다. 그러면 data 배열은 다음과 같이 됩니다.

데이터[] = {1,5,9,8,4,7,3,11}

자, 보시면 아시겠지만, 키를 검색하는 빈도가 높을수록 인덱스 값이 감소합니다. 즉, 비교 횟수가 줄어드는 것입니다.

앞으로 이동:

이 방법에서는 검색 요소를 0번째 인덱스로 바꿉니다. 다시 검색하면 O(1) 시간 안에 찾을 수 있기 때문입니다.

선형 검색에서 앞으로 이동

선형 검색 알고리즘 적용

다음은 우리가 사용할 수 있는 몇 가지 선형 검색 애플리케이션입니다.

  • 배열 크기가 작거나 목록에 요소가 몇 개 없는 경우에는 선형 검색을 사용하는 것이 더 쉽습니다.
  • 선형 검색 방법은 단일 또는 다차원 배열 또는 다른 데이터 구조.
  • 일반적으로 선형 검색은 "순서가 지정되지 않은" 데이터에서 검색을 수행하는 데 간단하고 효율적입니다. 주어진 정렬되지 않은 목록에서 단일 데이터를 쉽게 가져올 수 있습니다.

자주 묻는 질문

선형 검색은 데이터 전처리 과정에서 정렬되지 않은 특징 목록, 작은 조회 테이블, 레이블 집합 등을 스캔합니다. AI 파이프라인은 데이터가 정렬되지 않았거나 인덱스를 구축하기에 너무 작을 때 특정 값을 찾기 위해 선형 검색을 자주 사용합니다.

네. AI 비서는 선형 검색을 작성할 수 있습니다. Python, C++및 Java 단순한 설명에서 출발합니다. 논리가 간단하기 때문에 오류는 드물지만, 빈 배열이나 요소 누락과 같은 예외적인 경우를 테스트해야 합니다.

선형 검색은 각 요소를 순서대로 확인하고 정렬되지 않은 데이터에 대해 O(n) 시간으로 작동합니다. 이진 검색 정렬된 배열을 반복적으로 절반으로 나누는 데 O(log n) 시간이 걸리므로 대규모 정렬 컬렉션에서 훨씬 빠릅니다.

데이터가 작거나, 정렬되어 있지 않거나, 자주 변경되는 경우에는 정렬을 먼저 수행하는 것보다 직접 스캔하는 것이 비용이 더 많이 들기 때문에 선형 검색을 사용하는 것이 좋습니다. 또한 연결 리스트나 임의 접근이 불가능한 단일 패스 검색에도 적합합니다.

이 게시물을 요약하면 다음과 같습니다.