7
サブアレイへの変換を行う必要があり、サブアレイのサブアレイ上での変換などが必要になることがあります。Haskellでの配列の修正とインデックスの記憶
ハスケルでこれを行うための直感的な方法がありますか?たとえば、サブアレイなどの定義ですか?私は "穏やかな紹介"で配列のセクションを読んで、それに対処していないし、それを行う方法を見つけるのは難しい。
これは、ウィキペディアでhereと記載されているハンガリーアルゴリズムの実装用です。
だから、これまでのところ、私は次のことを行っている:
import Array
step1 :: (Ord a , Num a) => Array (Int,Int) a -> Array (Int,Int) a
step1 a = a // [ ((i,j), f (i,j)) | (i,j) <- range (bounds a) ] where
f (i,j) = a!(i,j) - minRow i
minRow i = minimum [ a!(i,j) | j <- [1..(snd . snd . bounds) a] ]
step2 :: (Ord a , Num a) => Array (Int,Int) a -> Array (Int,Int) a
step2 a = a // [ ((i,j), f (i,j)) | (i,j) <- range (bounds a) ] where
f (i,j) = a!(i,j) - minCol j
minCol j = minimum [ a!(i,j) | i <- [1..(fst . snd . bounds) a] ]
問題が解決される場合には、私は部分行列に手順を続けて手順3と4を実装する方法がわからないということです容易に入手できない。
Hackageに役立つサンプルコードがあります.http://hackage.haskell.org/packages/archive/Munkres/0.1/doc/html/src/Data-Algorithm-Munkres.html#hungarianMethodInt –
私は本当に理解していないここにコードの多く。たとえば、 '@ '演算子はどのように定義されていますか?これは、 'xxs @(x:xs)'のような式で、ほぼ2行目で使用されます。 – Undreren
'@'演算子は、パターンにマッチするコンポーネントに名前を付けるために使用されます。これは、 'xxs'が'(x:xs) 'と一致する式を参照するために使用できることを意味します。 –