2016-11-12 12 views
0

저는 결정 트리에서이 책을 읽고 있습니다. 저자는 한 세트에서 파워 세트를 생성하는 코드의 예를 들었습니다. 설명은 신이 끔찍하며 모든 작업의 ​​구문과 의미를 이해합니다. 나는이 알고리즘의 추론을 얻지 못한다.아이템 목록의 파워 세트 생성을위한이 프로그램의 논리는 무엇입니까

# generate all combinations of N items 
def powerSet(items): 
    N = len(items) 
    # enumerate the 2**N possible combinations 
    for i in range(2**N): 
     combo = [] 
     for j in range(N): 
      # test bit jth of integer i 
      if (i >> j) % 2 == 1: 
       combo.append(items[j]) 
     yield combo 

답변

0

생성기는 큰 반복자에 대해 매우 효율적인 방법이다.

한 번 호출 할 수 있습니다! 코드에서 으로 많은 값을 반환 할 수 있습니다. 전체 배열을 반환하는 함수 대신 return이 사용되면 생성기는 한 번에 하나의 값을 산출합니다. 이렇게하면 메모리가 덜 필요합니다.

수율 콤보 아픈 콤보 생성

(2 ** N) 시간