タグ

sortに関するkamipoのブックマーク (24)

  • overlasting.net

    overlasting.net 2019 Copyright. All Rights Reserved. The Sponsored Listings displayed above are served automatically by a third party. Neither the service provider nor the domain owner maintain any relationship with the advertisers. In case of trademark issues please contact the domain owner directly (contact information can be found in whois). Privacy Policy

    kamipo
    kamipo 2012/01/25
  • 追記: sort を使うときは,LC_ALL=C を忘れずに - ny23の日記

    > wc --lines unigram_raw.txt 290768333 unigram_raw.txtそもそも,たかだか3億要素,1.7Gのデータのソートに,最近のマシンで sort | uniq -c が858分もかかるのは変ですよね. > export LC_ALL=C > time sort -S 2G unigram_raw.txt | uniq -c > tmp.sort.uniq sort -S 2G unigram_raw.txt 389.93s user 16.32s system 99% cpu 6:49.61 total uniq -c > tmp.sort.uniq 15.40s user 1.56s system 4% cpu 6:49.62 totalIntel Xeon E5462 (3.2Ghz) が Dual Core AMD Opteron 1210

    追記: sort を使うときは,LC_ALL=C を忘れずに - ny23の日記
    kamipo
    kamipo 2012/01/15
  • RE: sort を使うときは,LC_ALL=C を忘れずに - ny23の日記

    Twitter ID も livedoor ID もないので直接コメントできないが,sort (GNU coreutils) の名誉のために,ここにメモしておく. 404 Blog Not Found:algorithm - bucketsort.[ch] - 汎用かつlibcの*sortより高速な まず第一印象として,この程度のサイズのファイルのソートで sort (GNU coreutils) がいまどきこんなに遅いはずはない.LC_ALL=C で追試すると,やはり bucketsort との差は無くなった.上の記事(に対するツイート)は Twitter 上でもそれなりにリツイートされているように見えるのだけど,この実行時間に違和感を感じる人が全くいないのはどういうことなのだろうか.sort を実際に使う人がほとんど見ていないのか,それとも計算量が違うから速くて当然という思い込みか.

    RE: sort を使うときは,LC_ALL=C を忘れずに - ny23の日記
    kamipo
    kamipo 2012/01/15
  • algorithm - bucket sort - 比較しなければソートは相当速い : 404 Blog Not Found

    2012年01月11日07:00 カテゴリアルゴリズム百選Math algorithm - bucket sort - 比較しなければソートは相当速い 珠玉のプログラミング Jon Bentley / 小林健一郎訳 絶賛風邪こじらせ中につきコードと戯れることに。 新ソートアルゴリズム「配列挿入ソート」だ! - hp12c その名も「配列挿入ソート」! すでに突っ込み入ってるけど、それ、もしかしたら人類最古のアルゴリズムだから。 最古にして最速? おそらくプログラムを組んだことがない人でも「誰にも教えられずに」知った「天然の」アルゴリズムの筆頭に来るのがこのバケットソートではないでしょうか。 ソートしたいものに適当に番号を振っておく 番号がついたバケツを用意する ソートしたいものの番号がついたバケツにそれを放り込む 必要があればバケツの中身を同じやり方でソートする 番号順にバケツの中身をぶち

    algorithm - bucket sort - 比較しなければソートは相当速い : 404 Blog Not Found
  • 高速な安定ソートアルゴリズム "TimSort" の解説 - Preferred Networks Research & Development

    先日、TimSortというソートアルゴリズムが話題になりました。TimSortは、高速な安定ソートで、Python(>=2.3)やJava SE 7、およびAndroidでの標準ソートアルゴリズムとして採用されているそうです。 C++のstd::sort()よりも高速であるというベンチマーク結果1が話題になり(後にベンチマークの誤りと判明)、私もそれで存在を知りました。実際のところ、ランダムなデータに対してはクイックソート(IntroSort)ほど速くないようですが、ソートというシンプルなタスクのアルゴリズムが今もなお改良され続けていて、なおかつ人々の関心を引くというのは興味深いものです。 しかしながら、オリジナルのTimSortのコードは若干複雑で、実際のところどういうアルゴリズムなのかわかりづらいところがあると思います。そこで今回はTimSortのアルゴリズムをできるだけわかりやすく解

    高速な安定ソートアルゴリズム "TimSort" の解説 - Preferred Networks Research & Development
  • 単体マシン(x86/x64)における最速sort algorithmは何か? - maropuのメモ墓場

    今日はsortの日なのでしょうか・・・ twitterのタイムラインを眺めていると,tim-sortというalgorithmが話題のようです. quick sortよりも高速でmerge sortのように安定しているソートアルゴリズムtim sort http://d.hatena.ne.jp/gfx/20111019/1318981818 単体マシン(x86/x64)における高速なsort algorithmの研究はIntelが近年行っていて,有名な実装だとbufferingを利用したradix-sort実装と,SIMDを利用したmerge-sort(bitonic-sort)実装があります. 1. radix-sort: Fast Sort on CPUs and GPUs: A Case for Bandwidth Oblivious SIMD Sort, SIGMOD'10, ht

    単体マシン(x86/x64)における最速sort algorithmは何か? - maropuのメモ墓場
  • quick sortよりも高速でmerge sortのように安定しているソートアルゴリズムtim sort [勘違い] - Islands in the byte stream

    <追記>ベンチマークプログラムに誤りがありました。ソート済のシーケンスに対してソートを掛けていました。ご指摘ありがとうございます>ak氏 そんな夢のようなソートアルゴリズムがあるのかというと、あるらしいんです。それがtim sortと呼ばれるアルゴリズムです。 画期的(?)なソートアルゴリズム「Sleep Sort」:濃縮還元オレンジニュース|gihyo.jp … 技術評論社 このあたりで拾ってきたネタですね。 merge sortを改良したアルゴリズムで、安定*1しており、しかも実行速度にも優れているとか。アルゴリズムの性能の評価は済んでいるらしく、CPythonやJDK7には既に導入済みのようですね。 ならば当然Perlのソートも…と考えるわけですが、まず評価のためにJavaのソースをC++にそのまま移植してみました。それがこれ(いちおうテスト済): https://github.co

    quick sortよりも高速でmerge sortのように安定しているソートアルゴリズムtim sort [勘違い] - Islands in the byte stream
  • 14.8 heap 演算

  • ヒープソート - Wikipedia

    ヒープソート (heap sort) とはリストの並べ替えを二分ヒープ木を用いて行うソートのアルゴリズムである[2](ヒープ領域とは無関係であることに注意する)。 アルゴリズムは、以下のように2つの段階から構成される。 未整列のリストから要素を取り出し、順にヒープに追加する。すべての要素を追加するまで繰り返し。 ルート(最大値または最小値)を取り出し、整列済みリストに追加する。すべての要素を取り出すまで繰り返し。 計算量は O となる[2]。安定ソートではない[2]。 ヒープ構造は、ポインタ等の制御用データが不要で、データ自体の並び順(配列)だけで表現できるという利点がある。ヒープソートを実装する際にはこの利点を生かし、元のデータ領域をそのままヒープ構造や整列済みリストに転用するインプレースなソートとして実装することが多い。 最初にN個のデータを含む配列が与えられるものとする。添字は1 〜

    ヒープソート - Wikipedia
  • Kazuho at Work: Using Top N Sort on MySQL

    One of the best practices on using MySQL is to avoid filesort. However there are cases where it is inevitable (e.g. ordering the result of fulltext search by modification date), and although in most cases we only the top N rows of sorted resultset are needed, MySQL does not implement top N sort. After wondering for couple of months if I should hack the MySQL core to implement top-N-sort, today I d

  • 開発メモ: トップNソートの検討

    上位N件をソートした状態で取り出すという、いわゆる「トップNソート」の効率的な実装について検討してみた。 背景 データベースに対して、ある順序でソートした時の最初の何件かが欲しいというクエリを投げることはよくあるだろう。SNSで言えば、誰かのコンテンツの最新10件を表示するとかいう場合だ。SQLだと "ORDER BY xxx LIMIT yyy" とかいう感じ。同じような操作は全文検索システムのスコアリングでも定番である。俺もよく自分で実装するわけだが、その度に適当な試行錯誤をして時間がもったいないので、今回は入念に調べて決定版を出そうじゃないか。 全体をソートして上位を取り出せば目的は満たせるのだが、それだと無駄な計算が多い。100万件の中から上位10件だけ欲しい場合に、残りの99万9990件まで律儀にソートする必要はない。ということで、上位N件をソートして取り出すという「トップNソー

  • ランク別で並び替え | 情報処理.com -MySQL-

  • MySQLで任意の順番でソートする : Nacky - Snowland.net

    Info Nacky - Snowland.net - blogを移転しました A k i - B u g 2011-09-18(Sun) 22:00-05:00 @ Bagus(秋葉原) Waaaaan!! 2011-09-22(Thu) @ Module(渋谷) blip festival TOKYO 2011 2011-10-22(Sat)+23(Sun) @ KOENJI HIGH(高円寺) Google CalendarにEvent Schedule (Issei Ishii/Nacky) を公開中>feed IRC(wide系) #snowland DJブッキングはいつでも受付中! nacky(at)snowland.net までメールください. nacky - MyMiniCity 「このカラム内,2~3~1の順番でソートして欲しいんですけど!」 2,3,1でそれぞれSELE

  • Optimization of sort() - Islands in the byte stream (legacy)

    Perlの最適化器はかなり頑張ってsort()の最適化を試みている。具体的には,配列をその場で直接ソートする場合,数値または整数でソートする場合,ソートブロックの$aと$bを単純に入れ替えた場合において,最適化された高速なバージョンが使われる。 以下はすべて5.10.0で確認した。 配列を直接ソートする場合 ソート後のリストを元の配列に代入するケース(たとえば"@array = sort @array")では,sort()に渡された配列を直接並び替えるため,メモリと速度の両方で勝る。 確認コード: $ perl -MO=Concise,-exec -e '@a=sort@a' # ... 7 <@> sort lK/INPLACE # ... ソートオペレータにおける「INPLACE」というフラグがこの最適化の表れである。 数値でソートする場合 ソートブロックでの数値による比較(たとえば"

    Optimization of sort() - Islands in the byte stream (legacy)
  • 自然順ソートを行うPerlワンライナー - ぱせらんメモ

    2009-06-22 PHPの豊富すぎる組み込みの関数の中でも、natsort関数はかなり高機能な関数の一つだと思います。他の言語なら体に組み込まれることは有り得ないのではないでしょうか。 今回のお題は、このnatsortを使ったワンライナーです。 (from hnwの日記) というわけで、PHPのワンライナーは引用元を参照してもらうとして、同じことをPerlでやってみた。 さすがに体には組み込まれてないので、Sort::Naturallyの力を借りてみた。 $ ls bin/php-* | perl -MSort::Naturally -e 'print nsort <>' bin/php-5.0.0 bin/php-5.0.1 bin/php-5.0.2 bin/php-5.0.3 bin/php-5.0.4 bin/php-5.0.5 bin/php-5.1.0 bin/php-

    自然順ソートを行うPerlワンライナー - ぱせらんメモ
  • JavaScriptのsortは必ずしも安定ではないのを覚えといてね - by edvakf in hatena

    配列要素はソート (並べ替え) される。ソートは必ずしも安定的ではない(つまり、等価と比較された要素が元の順で残るとは限らない). comparefn が undefined でないならば、それは 2 個の引数 x と y を受け付け、 x < y ならば負の値、 x = y ならば 0、 x > y ならば正の値を返す関数であるべきである。 15.4 Array オブジェクト (Array Objects) 安定であると仮定した実装はしないでください。(複数列でのテーブルソートなど注意) 以上。 これより先は脱線なので読み飛ばしてもらってかまいません。 脱線1 Tagrolls on Delicious このページを開いたとき、Firefox と Safari ではタグがアルファベット順にソートされる。(たぶん IE も) Chrome と Opera では変な順にソートされる。 htt

    JavaScriptのsortは必ずしも安定ではないのを覚えといてね - by edvakf in hatena
  • N要素の分岐しない odd-even mergesort (GCC+Linux/x86_64用) - memologue

    (こちらの記事の続き) (ジェネレータを生成) % g++ -O2 -Wall gen_sort.cpp -o gen_sort (8要素向けのソート関数を作成) % ./gen_sort 0 8 > oem_sort_8.s % gcc -c oem_sort8.s (ちゃんと作られたようだ) % nm oem_sort_8.o 0000000000000000 T odd_even_sort8 (テストコード書き) % cat > test.c #include <assert.h> void odd_even_sort8(unsigned int* d); int main() { int i; unsigned int s[] = {7,6,5,4,1,2,3,4}; odd_even_sort8(s); for(i = 0; i < 7; ++i) { assert(s[i] <

    N要素の分岐しない odd-even mergesort (GCC+Linux/x86_64用) - memologue
  • 4要素の分岐しないソート (GCC用) - memologue

    (こちらの記事の続き、おまけです) 「分岐しないソート」の、VC++向けのコードをGCC+Linux向けに修正してみました。 実はC言語によるソートである sort4l() のほうも相当速いので、私の手元の環境だと同じくらいの速度しか出なかった*1んですが、面白いのでオッケー。例えば {1,2,3,4} から生成される順列(24通り)を何百万回かわすような処理を書いてみると Celeron 2.4GHz & Linux だとアセンブラ版が10%遅く、Athron64 3200+ & Linux/x86_64, gcc -m32 だとアセンブラ版が10%速く、ARM9 200MHz & Linux だと同じ速度でした。 まずx86向けから。 // for GCC + Linux/x86 void sort4(unsigned int *d) { __asm__ ( "mov (%0), %

    4要素の分岐しないソート (GCC用) - memologue
  • 分岐しないソート (のジェネレータ) - memologue

    分岐しない4要素のソート、GCC/Linux/x86,x86_64,arm版 こちらに、「分岐しないソート」という記事があります。短いので読んでいただくほうがよいと思いますが、文章&アセンブリ言語のコードの内容を要約すると、 4要素のソートは、頑張れば5回の比較と5回の交換でできるよ。さらに、交換を Pentium Pro で追加された命令であるCMOVcc(Conditional Move)で行うことにすれば、「cmp b, a して、 b < a のときだけ b と a をswap」という処理を分岐命令なしで行うことができるから速いよ。 となります。この、「4要素専用・VC++専用の分岐しないソート」を、いつものように(?) GCC向けに書き直してみました。こちら。 分岐しないN要素の odd-even mergesort、GCC/Linux/x86_64版 (x86_64のお勉強がて

    分岐しないソート (のジェネレータ) - memologue
  • emit.jp - emit リソースおよび情報

    This webpage was generated by the domain owner using Sedo Domain Parking. Disclaimer: Sedo maintains no relationship with third party advertisers. Reference to any specific service or trade mark is not controlled by Sedo nor does it constitute or imply its association, endorsement or recommendation.