Find subset with K elements that are closest to eachother

后端 未结 6 912
误落风尘
误落风尘 2020-12-30 04:44

Given an array of integers size N, how can you efficiently find a subset of size K with elements that are closest to each other?

Le

6条回答
  •  悲哀的现实
    2020-12-30 05:16

    itertools to the rescue?

    from itertools import combinations
    
    def closest_elements(iterable, K):
        N = set(iterable)
        assert(2 <= K <= len(N) <= 10**5)
    
        combs = lambda it, k: combinations(it, k)
        _abs = lambda it: abs(it[0] - it[1])
        d = {}
        v = 0
    
        for x in combs(N, K):
            for y in combs(x, 2):
                v += _abs(y)
    
            d[x] = v
            v = 0
    
        return min(d, key=d.get)
    
    >>> a = [10,100,300,200,1000,20,30]
    >>> b = [1,2,3,4,10,20,30,40,100,200]
    >>> print closest_elements(a, 3); closest_elements(b, 4)
    (10, 20, 30) (1, 2, 3, 4)
    

提交回复
热议问题