「【Perl, Python】map、grep、sort の比較」に続き、map
、sort
を使って高速なソート手法であるシュワルツ変換を書いてみよう。
シャチ泳ぎとシュワルツ変換 – perl-mongers.org
http://perl-mongers.org/2008/05/schwartzian_transform_and_orcish_maneuver.htmlSchwartzian transform – Wikipedia, the free encyclopedia
http://en.wikipedia.org/wiki/Schwartzian_transform
シュワルツ変換とは、ある配列の要素をそれぞれの属性値に従ってソートする場合、一度属性値を全て計算した配列を作ることでソートを高速化することを言う。
……と、言葉で説明してもアレだし、例を挙げてみよう。次のように、九州の各県の人口を表したテキストファイルがあるとする1。
kyushu.txt
エンコーディングは UTF-8 とする。
長崎県 1,478,632 人 佐賀県 866,369 人 福岡県 5,049,908 人 熊本県 1,842,233 人 大分県 1,209,571 人 宮崎県 1,153,042 人 鹿児島県 1,753,179 人 沖縄県 1,361,594 人
これを人口の少ない順に並べ直し、次のような出力を得たい。
佐賀県 866,369 人 宮崎県 1,153,042 人 大分県 1,209,571 人 沖縄県 1,361,594 人 長崎県 1,478,632 人 鹿児島県 1,753,179 人 熊本県 1,842,233 人 福岡県 5,049,908 人