取得と再帰


💛 サーチ(サーチ)

  • 特定のノードを追加または削除するには、まず検索を行います.
  • の複数のアルゴリズムが使用される場合、最適なアルゴリズムパスを測定するために使用される.
  • 検索
  • の集合がランダムでソートされていない場合、線形検索は基本的な検索方法である.
  • # 선형 검색 알고리즘
    # 하나의 반복문과 리스트의 인덱스, 조건문을 활용하여 특정값을 검색할 때까지 반복한다.
    
    def linear_search(arr, target):
        #입력배열의 각 항목을 반복
        for index in range(len(arr)):
            #현재 인덱스의 항목이 비교대상과 같은지 확인
            if arr[index] == target:
                return index
        #전체 배열을 반복할 수 있다면, 비교 대상은 존재하지 않는다.
        #찾는 대상이 없다면 의미없는 숫자인 -1을 반환한다.
        return -1

    💛 再帰

  • アルゴリズムと方法論でよく言及され,重要な概念であり,繰り返し熟知する必要がある.
  • 再帰の概念は数学的思考に基づいており,コードを記述する前に問題を解決するコールバックロジックを発見する必要がある.
  • はアプリケーションスタックの概念を再帰的に呼び出し、関数の内部はスタックのように後進先出(LIFO)によって管理される.
    欠点:再帰を使用すると、関数が繰り返され、より多くのメモリが使用されます.
  • 数学的に概念が複雑であれば、時間と空間(メモリ)の複雑さの面で効率が悪くても、再帰を使用して問題を解決することが望ましい.
  • 回帰では,条件による繰返し計算に重点を置く必要がある.
  • 再帰的に問題を解決する方法の1つは分割征服である.
    分割征服法하나의 문제를 분할하고 해결하는 구체적인 방법론으로 하위 문제를 쉽게 해결할 수 있을 때까지 문제를 더 작은 단위로 나누는 것을 의미한다.
  • 再帰は,問題を解決するために特定の機能を再呼び出す観点から用いられ,分割征服は問題を分割し解決する具体的な方法論である.
  • 分割征服法を用いるためには,再帰概念(再呼び出し機能)を導入する必要がある.
  • my_list = [1,2,3,4,5]
    def sum_list(items):
        sum = 0
        for i in items:
            sum = sum + i
        return sum
    
    sum_list(my_list)
    
    #아래의 코드처럼 문제를 두 개의 하위 문제로 나눌 수 없을 때까지 분할할 수 있다.
    1 + 2 + 3 + 4 + 5
    (1 + (2 + 3 + 4 + 5))
    (1 + (2 + (3 + 4 + 5)))
    (1 + (2 + (3 + (4 + 5))))
    (1 + (2 + (3 + (4 + (5)))))
    
    #분리된 내용을 의사코드를 활용해서 먼저 로직을 해석해볼 수 있다.
    sum_list(items)
        if the length of item is 1:
            return the 1 item in the list
        else:
            return the first items from the list + sum_list(the rest of the items)
            
    #의사코드를 구현되는 코드로 만들어주기
    def sum_list(items):
        if len(items) == 1:
            return items[0]
        else:
            return items[0] +sum_list(items[1:])

    回帰条件1:基本的な状況があります。


    1)基本的な状況(基本的な状況または条件)が必要です.
  • アルゴリズムは、特性的に反復を停止することができる.
  • 以下のsum list関数にはアルゴリズムを繰り返すのを止める条件もある.
  • def sum_list(items):
        if len(items) == 1: #base case
            return items[0]
        else:
            return items[0]+sum_list(items[1:])

    回帰条件2:付加条件と基本状況の違い


    2)基本状況と付加条件に差があること.
    def sum_list(items):
        if len(items) == 1: # Base Case(항목이 1개인 경우가 기본 케이스)
            return items[0]
        elif len(items)>1:
            print("items:",items[0:])
            return items[0] + sum_list(items[1:]) # items[:]는 한 항목씩 감소한다.
            
    print("sum_list:",sum_list([2,3,4,5]))
    上の再帰ではsum listに渡されるItemsが逐次減少する.

    回帰条件3:自己(関数)を呼び出す必要があります。


    3)復帰条件を満たすためには,自分自身を呼ぶ必要がある.
    △関数の最後に再帰的な操作を行う場合が多いようです.
    def sum_list(items):
        if len(items) == 1: # Base Case
            return items[0]
        else:
            return items[0] + sum_list(items[1:]) # 반복적으로 자기자신을 호출한다.