2005年06月10日
Haskell で冪のソートを
Haskell を使って「冪の下の桁から辞書順ソート」を組んでみた.メモリを節約するアイデアは Java のときと同様,必要な下の桁だけ計算すること.Java の実装では必要になった上位桁の再計算を明示的に書かなければならなかったが,Haskell だと遅延評価で勝手に必要なところだけを計算してソートしてくれる.おかげでコードもすっきり.いやぁ,遅延評価って本当に良いですねぇ.
> module Main (main) where > import List > import System > import Char > atoi :: String -> Int > atoi = foldl (\x y-> x*10 + ord y - ord '0') 0 > main = getArgs >>= \lines -> let (n,b) = getOpt lines (10000, 2) in printans n b > getOpt :: [String] -> (Int, Int) -> (Int, Int) > getOpt [] p = p > getOpt [x] p = p > getOpt (x:y:zs) (n, b) = case x of > "-b" -> getOpt zs (n, atoi y) > "-n" -> getOpt zs (atoi y, b) > _ -> getOpt (y:zs) (n, b) > printans n b = putStr (sortedliststring n b) > sortedliststring n b = (foldr (\x y-> show b ++ "^"++(show x) ++"\n"++y) [] (sortedlist n b)) > sortedlist n b = map (\(x,y)->y) (List.sort(take n (powers b))) > powers k = pows ([1], 0) > where > pows (an, n) = (map nrev p, n+1):pows (p, n+1) > where p = mmult an 0 > base = 1000 > mmult [] c = if c == 0 then [] else (c `mod` base):mmult [] (c `div` base) > mmult (x:xs) c = let v = x * k + c in (v `mod` base):mmult xs (v `div` base) > nrev x = nrev' base 0 x > where > nrev' 1 r n = r > nrev' b r n = nrev' (b `div` 10) (r * 10 + (n `mod` 10)) (n `div` 10)
ちなみに,b = 2, n = 1000000 でうちのマシンだと 46秒 + Mem500M ていど.Java で 25秒 + Mem80M ていどなので,まあスピードはこんなもんでしょう.メモリは簡約を続けるために覚えとく分が多いからしょうがないし.
2^2000000 までで 2分+Mem1G. 限界... ついでなのでソースを置いておこう.Haskellバージョン, Javaバージョン
- Comments: 0
- TrackBack (Close): -
新聞屋の勧誘員は馬鹿なのだろうか?
- 2005-06-10 (Fri)
- 一般
新聞の勧誘員に対して「新聞要らない」と答えたところ「なぜ?」と返された.要らない物が要らない事に「要らない」以外の理由はない.とりあえずこのとおりに答えてドアをバタン.学習能力のない集団なのでどうせまたくるだろうけど.ホンと邪魔だなぁ.
- Comments: 0
- TrackBack (Close): -
ビットレートが高すぎか?
この前買った Rio carbon に VBR の WMA を入れてみたところどうもノイズがのりまくる.CBR192kbps だとノイズが載らないので VBR が悪いのか VBR で一時的に bps が上がるから悪いのか? とりあえず今まで取り込んだデータを再び CBR で取り込みなおさねば... めんどい.
- Comments: 0
- TrackBack (Close): -
MT内のホスト名が...
- 2005-06-10 (Fri)
- ソフトウェア
MT の内部でホスト名を取っている部分があるはずなのだが,これが ls-al.jp でなく ls-al.sakura.ne.jp のほうを返してしまっているらしい.別に害があるわけではないが,検索とかの時だけにホスト名が変わっているのは美しくない.どうにか解決できないものか?
- Comments: 0
- TrackBack (Close): -