タグ

アルゴリズムに関するryochackのブックマーク (17)

  • Snappy の使い方

    矢田 晋 Abstract: Snappy は高速な圧縮アルゴリズムのライブラリです.zlib や libbzip2 などの有名な圧縮ライブラリと比べると,圧縮率は低いものの,圧縮・伸長にかかる時間を桁一つ短縮することができます.圧縮・伸長速度が HDD の転送速度を上回るため,ディスク使用量や通信量の削減だけでなく,I/O の高速化を目的として利用することもできます.記事は,C/C++ から Snappy を利用する方法の解説になっています. はじめに 最新のドキュメントは Subversion のリポジトリ,および公式サイトからダウンロードできるソースコードに含まれています.また,Snappy のヘッダである snappy.h と snappy-c.h には,C/C++ API の説明がコメントとして記述されています. http://code.google.com/p/snappy/

    ryochack
    ryochack 2017/12/02
    "圧縮・伸長速度が HDD の転送速度を上回るため,ディスク使用量や通信量の削減だけでなく,I/O の高速化を目的として利用することもできます."
  • ZIP,LHAの圧縮の仕組み - Qiita

    ZIPのdeflate圧縮やLHAのlhXシリーズ圧縮は、 ハフマン法 と 辞書式 という二つのアルゴリズムで構成されています。 二つのアルゴリズムを使っているのは、脈絡なしに組み合わせてみたものではありません。辞書式の難点をハフマン法がうまく吸収しているうまい組み合わせです。 辞書式 記号列の規則性を利用した圧縮法です。 記号列を読んでいて出てきたフレーズが以前にも出てきたものであるとき、「○○個前から××個」と書き換えてしまうことで省略します。 例えば

    ZIP,LHAの圧縮の仕組み - Qiita
    ryochack
    ryochack 2017/06/02
    “ハフマン法と辞書式という二つのアルゴリズム”
  • 糸が紡ぎ出す明暗 | POSTD

    少し前、私は Petros Vrellis が作り出した芸術作品に出会いました。それを見て、私の中のエンジニア魂が叫びました。「自動化だ!」下の画像で分かるように、Petrosは丸い織機を使って糸で肖像画を作ります。しかし、これにはかなりの根気が必要です。これから、私がざっとこのプロセスを自動化するステップをやってみます。しかし、もちろん、称賛されるべきは、この驚くべきアイディアを思い付くきっかけとなったアーティスト人です。最終的に出来上がるのは、糸だけを使って画像をハーフトーンで表現したものです。 この主なアイデアは、3つのステップに分かれます。ステップ1で、様々な入力画像に対して、糸で作品を表現するためにちょっとした前処理を行います。ステップ2で、最善の画像表現とするために製作者が長い糸をどのように配置していくのか決める処理をPythonで行います。ステップ3では、私の場合、この重労

    糸が紡ぎ出す明暗 | POSTD
    ryochack
    ryochack 2017/02/15
    おもしろいなー
  • 検索と挿入がともにO(1)であるようなHashを作るにはコツがいる

    このところ立て続けに表記の事実を理解していない俺実装のHash(しかもCで!)を見かけたので、おそらく知られていないんだと思う。以降、同じ轍を踏む人が少なくなればと思い、啓蒙のために公開しておく。 先に言っておくがおまえらはHashを再発明するんじゃねよボケが。おとなしくありもののライブラリ使えよ。つうかHashのある言語使えよ。Cとかマゾかよ。 言葉と前提とりあえずHashが何であるかとか、どういう作りになっているかとか、そういうことは既知とする。リストの配列ってことね。←これで何言ってるか分からないおまえらにはこの文章はちょっとはやい。先にデータ構造の教科書を読むことをおすすめ。以下ではHashに登録されるキーとデータのペアのことをentryと呼び、リストの配列と言ったときのリストのほうをbin、配列のほうをbucketと呼ぶ。つまり、 class Hash { typedef lis

    検索と挿入がともにO(1)であるようなHashを作るにはコツがいる
  • 文法圧縮入門:超高速テキスト処理のためのデータ圧縮(NLP2014チュートリアル)

    言語処理学会第20回年次大会(2014/3)のチュートリアル講義資料です。 - 要旨 - 文法圧縮とは,入力テキストをよりコンパクトな文脈自由文法(CFG)に変換する圧縮法の総称である. 文法圧縮の強みは圧縮テキストを展開すること無く,検索等のテキスト処理を効率よく行える点にある. 驚くべきことにその処理速度は,元テキスト上での同じ処理を理論的に,時には実際にも凌駕する. また近年,ウェブアーカイブやログ,ゲノム配列等の大規模実データを高効率に圧縮できることで注目を集めている. しかしながら,文法圧縮についての初学者向けの解説資料はまだまだ少ない. そこでチュートリアルでは,文法圧縮の歴史的背景から最新動向までを幅広く紹介する. 具体的には文法変換アルゴリズム,圧縮テキスト上での文字列パターン検索,文法圧縮に基づく省メモリデータ構造等の解説を行う.Read less

    文法圧縮入門:超高速テキスト処理のためのデータ圧縮(NLP2014チュートリアル)
  • GC - GCアルゴリズム詳細解説 - livedoor Wiki(ウィキ)

    GC¥¢¥ë¥´¥ê¥º¥à¾ÜºÙ²òÀâ ÆüËܸì¤Î»ñÎÁ¤¬¤¹¤¯¤Ê¤¤GC¥¢¥ë¥´¥ê¥º¥à¤Ë¤Ä¤¤¤Æ¾ÜºÙ¤Ë²òÀ⤷¤Þ¤¹ ¥È¥Ã¥×¥Ú¡¼¥¸¥Ú¡¼¥¸°ìÍ÷¥á¥ó¥Ð¡¼ÊÔ½¸ GC ºÇ½ª¹¹¿·¡§ author_nari 2010ǯ03·î14Æü(Æü) 20:47:11ÍúÎò Tweet ¤³¤ÎWiki¤¬Ìܻؤ¹½ê GC¤È¤Ï¡© GC¤ò³Ø¤ÖÁ°¤ËÃΤäƤª¤¯»ö ¼Â¹Ô»þ¥á¥â¥ê¹½Â¤ ´ðËÜ¥¢¥ë¥´¥ê¥º¥àÊÔ Reference Counter Mark&Sweep Copying ±þÍÑ¥¢¥ë¥´¥ê¥º¥àÊÔ IncrementalGC À¤ÂåÊÌGC ¥¹¥Ê¥Ã¥×¥·¥ç¥Ã¥È·¿GC LazySweep TwoFinger Lisp2 Pa

    GC - GCアルゴリズム詳細解説 - livedoor Wiki(ウィキ)
  • 実行時間の差は996倍以上。オンラインハッカソン最速コードの裏側に迫る! - paiza times

    2013年12月2日より2014年1月8日まで開催していたpaizaオンラインハッカソン(略してPOH![ポー!])Vol.1「新人女子の書いたコードを直すだけの簡単なお仕事です!」で0.01秒を叩き出したコード(最遅コードとの差は最大996倍! 詳しくは結果発表をご確認ください)はどんな過程で生み出されたのでしょうか? 今回は前回の最速コード発表レポート(【結果発表】新人女子PGを最も助けたプログラミング言語とは?)に引き続き、最速コードの裏側に迫ります。 ※ちなみにこちらの野田ちゃん画像は、2014年1月17日に開催されたエンジニアサポートcross2014というイベントで等身大パネルとしてpaizaブースを盛り上げてくれました! ■高速化のアプローチ 前回のレポートでもふれましたが、POH Vol.1はアルゴリズムに変更による計算量(オーダー)の改善による大幅な高速化と、定数倍高速化

    実行時間の差は996倍以上。オンラインハッカソン最速コードの裏側に迫る! - paiza times
  • ビットを数える・探すアルゴリズム

    作成日:2004.05.04 修正日:2012.09.01 このページは 2003年の9/11、9/28 の日記をまとめて作成。 はじめに PowerPC 系や Alpha などには population count と呼ばれるレジスタ中の立っているビット数を数える命令が実装されている。 集合演算を行うライブラリを実装したい場合などに重宝しそうな命令である。 職場でこの population count 命令について話をしているうちにビットカウント操作をハードウェアで実装するのは得なのか?という点が議論になった。 CPU の設計をできるだけシンプルにするためには、複雑で使用頻度の低い命令は極力減らした方がよい。 例えば SPARC は命令セット中にビットカウント演算があるが、CPU 内には実装しないという方針をとっている(population 命令を実行すると不正命令例外が発生し、それを

    ryochack
    ryochack 2014/01/19
    x86でのビットを数える命令は“POPCNT”
  • x86x64 SSE4.2 POPCNT

    That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to ustakesako

    x86x64 SSE4.2 POPCNT
    ryochack
    ryochack 2014/01/19
    ビットサーチ、ビットを数える
  • あなたの知らないハッシュテーブルの世界

    Please select the category that most closely reflects your concern about the presentation, so that we can review it and determine whether it violates our Terms of Use or isn't appropriate for all viewers.

  • 文字列検索のいろいろ

    2. 文字列検索って? ● パターンと呼ばれる文字列が 文中のどこに存在するかを見つける手法 ←パターン 文 ※某有名パクツイボット 4. Bruteforce(力まかせ) ● 完全に名前負けしている。 ● 誰でも思いつく以下のような手法である。 ① 文中での比較開始位置を決める。 ② そこからパターンと一致しているか比較する。 不一致が確定した時点で打ち切り。 ③ ①,②を文中の全ての位置に行う。 例) パターン : kyubuns 文: x k y u r i k y u b u n s k y u b u n s ↑ 5. Bruteforce(力まかせ) ● 完全に名前負けしている。 ● 誰でも思いつく以下のような手法である。 ① 文中での比較開始位置を決める。 ② そこからパターンと一致しているか比較する。 不一致が確定した時点で打ち切り。 ③ ①,②を文中の全ての位置に行う。

    文字列検索のいろいろ
  • Rubyで文字列検索アルゴリズムを表現しよう!

    text = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur." text.index("velit") # => 285

    ryochack
    ryochack 2013/10/03
    文字列検索アルゴリズムの比較。BM検索やラビン・カープ検索など
  • プログラミングコンテストでのデータ構造

    GPGPU Seminar (GPU Accelerated Libraries, 2 of 3, cuSPARSE) 智啓 出川

    プログラミングコンテストでのデータ構造
    ryochack
    ryochack 2013/09/03
    Union-Find木,平方分割,パケット法,セグメント木,Binary Indexed Tree
  • Binary Indexed Tree (Fenwick Tree) - naoyaのはてなダイアリー

    圧縮アルゴリズムにおける適応型算術符号の実装では、累積頻度表を効率的に更新できるデータ構造が必要になります。もともと算術符号を実装するには累積頻度表が必要なのですが、これが適応型になると、記号列を先頭から符号化しながら、すでに見た記号の累積頻度を更新していく必要があるためです。 累積度数表をナイーブに実装すると、更新には O(n) かかってしまいます。配列で表を持っていた場合、適当な要素の頻度に更新がかかるとその要素よりも前の要素すべてを更新する必要があります。適応型算術符号のように記号を符号化する度に更新がかかるケースには向いていません。 Binary Indexed Tree (BIT, P.Fenwick 氏の名前を取って Fenwick Tree と呼ばれることもあるようです) を使うと、累積頻度表を更新 O(lg n)、参照 O(lg n) で実現することができます。BIT は更

    Binary Indexed Tree (Fenwick Tree) - naoyaのはてなダイアリー
  • Algorithm - 連想配列の実装としてのハッシュはオワコン? : 404 Blog Not Found

    2012年01月17日11:45 カテゴリアルゴリズム百選Tips Algorithm - 連想配列の実装としてのハッシュはオワコン? 珠玉のプログラミング Jon Bentley / 小林健一郎訳 つまり「終わったコンテナ」。 以前からうすぼんやりと考えて来た危惧が、すこしはっきりと見えてきた。 徳丸浩の日記: Webアプリケーションに対する広範なDoS攻撃手法(hashdos)の影響と対策 もうそろそろハッシュ(テーブル)以外の手段の連想配列の実装手段を格的に模索するべきではないか、と。 そのデータ構造は、君の魂を差し出すに足るものかい? 連想配列(Associative array)がコレクション(Collection)、すなわち数多のデータ構造をまとめるデータ構造としての覇者となったのはもはや疑いようがない事実でしょう「配列で実装されるデータ構造ではなくて、配列を実装するデータ構

    Algorithm - 連想配列の実装としてのハッシュはオワコン? : 404 Blog Not Found
  • diffの動作原理を知る~どのようにして差分を導き出すのか | gihyo.jp

    UNIXの基的なコマンドの1つであるdiff。 これに実装されているアルゴリズムは実に興味深い世界が広がっています。 稿では、筆者が開発した独自ライブラリ「dtl」をもとに「diffのしくみ」を解説します。 はじめに diffは2つのファイルやディレクトリの差分を取るのに使用するプログラムです。 ソフトウェア開発を行っている方であれば、SubversionやGitなどのバージョン管理システムを通して利用していることが多いかと思います。稿ではそのdiffの動作原理について解説します。 差分の計算の際に重要な3つの要素 差分を計算するというのは次の3つを計算することに帰結します。 編集距離 2つの要素列の違いを数値化したもの LCS(Longest Common Subsequence) 2つの要素列の最長共通部分列 SES(Shortest Edit Script) ある要素列を別の要

    diffの動作原理を知る~どのようにして差分を導き出すのか | gihyo.jp
    ryochack
    ryochack 2011/11/12
    diffの解説
  • 「最強最速アルゴリズマー養成講座」関連の最新 ニュース・レビュー・解説 記事 まとめ - ITmedia Keywords

    最強最速アルゴリズマー養成講座: そのアルゴリズム、貪欲につき――貪欲法のススメ アルゴリズムの世界において、欲張りであることはときに有利に働くことがあります。今回は、貪欲法と呼ばれるアルゴリズムを紹介しながら、ハードな問題に挑戦してみましょう。このアルゴリズムが使えるかどうかの見極めができるようになれば、あなたの論理的思考力はかなりのレベルなのです。(2010/9/4) 最強最速アルゴリズマー養成講座: 病みつきになる「動的計画法」、その深淵に迫る 数回にわたって動的計画法・メモ化再帰について解説してきましたが、今回は実践編として、ナップサック問題への挑戦を足がかりに、その長所と短所の紹介、理解度チェックシートなどを用意しました。特に、動的計画法について深く掘り下げ、皆さんを動的計画法マスターの道にご案内します。(2010/5/15) 最強最速アルゴリズマー養成講座: アルゴリズマーの登

  • 1