遍歷數組的所有子集

 

 

問題如題,求數組的所有子集,如items = [1, 2, 3, 4, 5],求所有items的子集

方法一:二進制,思想是n個元素的所有自己有2**n個,而n 位數的二進制數剛好也有2 ** n個,遍歷n位數的所有二進制排序,0代表存在,1代表不存在

def PowerSetBinary(items):
    n = len(items)
    s = np.array(items)
    for i in range(2**n):
        e = list(bin(i))[2:]
        print('before e:', e)
        e = np.array(e) == '1'
        print('=======================')
        print('after e:', e)
        print(s[n-len(e):][e])

部分結果如下,選出來結果爲True的元素 

before e: ['0']
=======================
after e: [False]
[]
before e: ['1']
=======================
after e: [ True]
[5]
before e: ['1', '0']
=======================
after e: [ True False]
[4]
before e: ['1', '1']
=======================
after e: [ True  True]
[4 5]
before e: ['1', '0', '0']
=======================
after e: [ True False False]
[3]

方法二:遍歷  思想:元素每增加一個,子集爲新加的元素與原來子集的組合再加上原來的子集

item爲1時 子集爲[[],[1]]

item爲[1,2]時  新的子集爲原來的子集+[2]  即[[2],[1,2]],在加上原來的子集[[],[1]],以此類推

def PowerSetRecursive(items):
    result = [[]]
    for x in items:
        result.extend([subset + [x] for subset in result])
        print('========', result)
    print(result)
    return result

部分結果爲

======== [[], [1]]
======== [[], [1], [2], [1, 2]]
======== [[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]]

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章