>  Q&A  >  본문

배열이 발견되었음에도 불구하고 "찾을 수 없음"이라고 보고함: 혼란스러운 검색 딜레마

이것은 다양한 언어로 초보 프로그래머들이 묻는 많은 질문에서 볼 수 있는 논리 오류가 있는 일반적인 질문과 답변입니다.

문제는 특정 입력 기준과 일치하는 요소를 배열에서 검색하는 것입니다. 알고리즘의 의사코드는 다음과 같습니다:

으아아아

이 코드는 일치하는 요소를 성공적으로 찾은 경우에도 "찾을 수 없음"을 보고합니다.

P粉546179835P粉546179835321일 전536

모든 응답(1)나는 대답할 것이다

  • P粉080643975

    P粉0806439752023-12-27 15:57:11

    문제는 배열을 통해 무언가를 선형적으로 검색할 때 배열의 끝에 도달할 때까지 그것이 발견되지 않았다는 것을 알 수 없다는 것입니다. 질문의 코드는 일치하는 다른 요소가 있을 수 있음에도 불구하고 일치하지 않는 각 요소에 대해 "찾을 수 없음"을 보고합니다.

    간단한 수정은 변수를 사용하여 무언가를 찾았는지 추적한 다음 루프 끝에서 해당 변수를 확인하는 것입니다.

    으아아아

    Python의 for 循环中有一个 else: 块。仅当循环运行完成时才执行代码,而不是由于使用 break 而结束。这使您可以避免 found 변수(나중에 처리하는 데 여전히 유용할 수 있음):

    으아아아

    일부 언어에는 루프를 직접 작성하는 대신 사용할 수 있는 메커니즘이 내장되어 있습니다.

    • 일부 언어에는 콜백 함수를 받아들이고 배열의 모든 요소에 대해 함수가 성공했는지 여부를 나타내는 부울 값을 반환하는 anysome 함수가 있습니다.
    • 언어에 배열 필터링이 있는 경우 조건을 확인한 후 결과가 빈 배열인지 확인하는 함수를 사용하여 입력 배열을 필터링할 수 있습니다.
    • 요소를 정확히 일치시키려는 경우 대부분의 언어에서는 일치하는 요소를 검색하는 findindex 기능을 제공합니다.

    자주 검색할 예정이라면 배열을 보다 효율적으로 검색할 수 있는 데이터 구조로 변환하는 것이 가장 좋습니다. 대부분의 언어는 集合和/或哈希表데이터 구조를 제공합니다(후자는 연관 배열, 맵, 사전 등 언어에 따라 다양한 이름으로 지정됨). 일반적으로 검색하는 데 O(1) 시간이 걸리고 배열을 스캔하는 데 O(n) 시간이 걸립니다.

    회신하다
    0
  • 취소회신하다