タグ

c++とeditorに関するtyruのブックマーク (3)

  • 高速かつ省メモリで文字列を扱うデータ構造「wavelet tree」

    はじめに 大規模なデータを扱うアプリケーションでは、速度とともに作業領域量も大きな問題となります。作業領域がメインメモリに収まらない場合、スワッピングが発生し、大幅な速度低下につながります。そのため近年、データ構造は高速なだけでなく、作業領域量が小さいことも求められています。今回紹介するのは2003年に提案されたデータ構造、wavelet tree(以下「WT」と表記)です。WTは圧縮索引やSuccinct Data Structureなど、データをコンパクトに表現する際に重要なデータ構造です。WTは文字列T[0...n-1]が与えられた時、次の2つの操作を定数時間でサポートします。 rank(p, c)――T[0...p]中のcの出現回数を返す select(i, c)――(i+1)番目のcの位置を返す WTの作業領域量は、文字列をそのまま保存した時の約2倍程度です。 対象読者 C++

    高速かつ省メモリで文字列を扱うデータ構造「wavelet tree」
    tyru
    tyru 2013/02/02
    Bjarne Stroustrupが文字列クラスの実装には様々な実装があるって論文書いてた記憶 / Vimではどうだったかな。シンプルに行ごとのリストでバッファを実現してただろうか。
  • gap_vector

    vector, list の問題点 STL の std::vector, std::list は扱いやすく非常に便利なコンテナだが、一長一短がある。 std::vector は、O(1) でランダムアクセス可能だが、末尾以外での1文字挿入・削除は O(N) である。 std::listは、任意箇所での1文字挿入・削除は O(1) だが、ランダムアクセス不可で、任意位置への移動は O(N) である。 末尾への挿入(push_back())はどちらも O(1) であるが、下図の測定結果をみるとわかるように list は vector の100倍程度遅い(vector: 2.375*10^(-9), list:5.375*10^(-7))。 速度計測環境:C2D(ウルフデール) 3Ghz, 4GMem, WinXP, VC9 テキストエディタ用バッファなどの様に非常に大きなサイズになる可能性のあ

  • テキストエディタ実装技術

    バグつぶしばかりやっていると飽きてくるので、目先を変えるために技術的な文書を作成し、ここで公開することにする(01/06/04)。 意見・質問・間違いのご指摘は 津田 までメールまたはツイートしてください。 新着順 「関数電卓」アプリにおける陽関数グラフ描画 (2016/10/09) mate法を用いた Numberlink 問題自動生成 (Jly-2016) Unity C# Script プログラミング 入門(Nov-2015) C/C++ プログラミング 入門(Nov-2014) JavaScript 入門(Nov-2014) C/C++ static 修飾子 入門(Oct-2014) マップクラス std::map 入門(Oct-2014) 双方向リストクラス std::list 入門(Oct-2014) cocos2d-x 3.1 KeyboardTest(Jun-2014) c

  • 1