德尔福阵列的电源组
发布时间:2020-12-15 04:09:16 所属栏目:大数据 来源:网络整理
导读:我正在尝试编写一个函数,它将在输入和返回数组的数组上采用数组,包含所有可能的输入数组子集(没有空元素的幂集).例如对于输入:[1,2,3],结果将是[[1],[2],[3],[1,2],[2,3]]. 这个函数在python中完成了这个工作: def list_powerset(lst): result = [[]] for
我正在尝试编写一个函数,它将在输入和返回数组的数组上采用数组,包含所有可能的输入数组子集(没有空元素的幂集).例如对于输入:[1,2,3],结果将是[[1],[2],[3],[1,2],[2,3]].
这个函数在python中完成了这个工作: def list_powerset(lst): result = [[]] for x in lst: result += [subset + [x] for subset in result] result.pop(0) return result 但我正在寻找在Delphi中实现它.这有可能以这种方式实现,还是应该寻找其他东西? 解决方法type TIdArray = array of Integer; TPowerSet = array of TIdArray; function PowerSet(Ids: TIdArray): TPowerSet; // Implementation loosely based on the explanation on // http://www.mathsisfun.com/sets/power-set.html var TotalCombinations: Integer; TotalItems: Integer; Combination: Integer; SourceItem: Integer; ResultItem: Integer; Bit,Bits: Integer; begin TotalItems := Length(Ids); // Total number of combination for array of n items = 2 ^ n. TotalCombinations := 1 shl TotalItems; SetLength(Result,TotalCombinations); for Combination := 0 to TotalCombinations - 1 do begin // The Combination variable contains a bitmask that tells us which items // to take from the array to construct the current combination. // Disadvantage is that because of this method,the input array may contain // at most 32 items. // Count the number of bits set in Combination. This is the number of items // we need to allocate for this combination. Bits := 0; for Bit := 0 to TotalItems - 1 do if Combination and (1 shl Bit) <> 0 then Inc(Bits); // Allocate the items. SetLength(Result[Combination],Bits); // Copy the right items to the current result item. ResultItem := 0; for SourceItem := 0 to TotalItems - 1 do if Combination and (1 shl SourceItem) <> 0 then begin Result[Combination][ResultItem] := Ids[SourceItem]; Inc(ResultItem); end; end; end; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |