2
A
답변
0
이와 비슷한 것 (하스켈로 작성)?
import Data.List (minimum, maximum, minimumBy)
minDiff (x:xs) = comb (head x) (diff $ matches (head x)) x where
lenxs = length xs
diff m = maximum m - minimum m
matches y = minimumBy (\a b -> compare (diff a) (diff b)) $ p [] 0 where
md = map (minimumBy (\a b -> compare (abs (a - y)) (abs (b - y)))) xs
mds = [m | m <- foldl (\b a -> filter (\z -> abs (z - y) == abs (y - md!!a)) (xs!!a) : b) [] [0..lenxs - 1]]
p result index
| index == lenxs = [y:result]
| otherwise = do
p' <- mds!!index
p (p':result) (index + 1)
comb result difference [] = matches result
comb result difference (z:zs) =
let diff' = diff (matches z)
in if diff' < difference
then comb z diff' zs
else comb result difference zs
OUTPUT:
*Main> minDiff [[1,3,5,9,10],[2,4,6,8],[7,11,12,13]]
[5,6,7]
+2
하스켈을 모르는 사람 (또는 적어도 읽기 어렵습니다)에게는 아마 읽을 수 없습니다. 알고리즘 설명을 제공 할 때 알고리즘 설명, 주석 및/또는 의사 코드를 포함 시키십시오. – Dukeling
각 세트에 몇 개의 요소가 있습니까? K가 얼마나 클 수 있습니까? – gkiko
각 세트에서 최소값을 선택하면 효과가 있습니까? – dekdev
@ simplecoder : 분명히 아닙니다; 간단하게 두 세트 {1,2,3}과 {-3, -2, -1}을 고려해 보자. –