タグ

algorithmに関するgfxのブックマーク (57)

  • 簡潔データ構造超入門 〜つくって学ぶ簡潔ビットベクトル〜 - EchizenBlog-Zwei

    簡潔データ構造は各種操作を高速に保ったままでデータサイズを情報理論的な下限近くまで圧縮できる。大規模データを扱うことの多くなってきた現在、特に注目を集めている技術である(※個人的な見解です)。 しかし有用性とは裏腹にまとまった教科書等がないこともあり入門者に対して敷居が高いようにも感じられる。そこで記事では簡潔データ構造の基であるビットベクトルに対する簡潔構造の実装方法をC/C++のコードを交えて解説してみる。 ビットベクトルに対する簡潔構造は、単純には疎ベクトルを表現するのに利用することができる。よって記事でも簡潔ビットベクトルを実装し、疎ベクトルを実現してみようと思う。 今回は疎ベクトルとして値がint(4byte)の256次元のベクトルを考える。ただし疎ベクトルなので256次元のうちいくつかの次元にしか値が入っていないものを仮定する。例えば v[5] = 10 v[100] =

    簡潔データ構造超入門 〜つくって学ぶ簡潔ビットベクトル〜 - EchizenBlog-Zwei
  • ウェーブレット木の世界

    2013/1/9に統数研チャンネルにて、ウェーブレット木の解説をしました。岩波書店より出版されました「高速文字列解析の世界」の解説になっています。

    ウェーブレット木の世界
  • 計算量オーダーの求め方を総整理! 〜 どこから log が出て来るか 〜 - Qiita

    NTT データ数理システムでリサーチャーをしている大槻 (通称、けんちょん) です。今回は計算量オーダーの求め方について書きます。 0. はじめに 世の中の様々なシステムやソフトウェアはアルゴリズムによって支えられています。Qiita Contribution ランキング作成のために用いるソートアルゴリズムのような単純なものから、カーナビに使われている Dijkstra 法、流行中のディープラーニングに用いられている確率的勾配降下法など、様々な場面でアルゴリズムが活躍しています。アルゴリズムとはどんなものかについて具体的に知りたい方には以下の記事が参考になると思います: アルゴリズムとは何か ~ 文系理系問わず楽しめる精選 6 問 ~ アルゴリズムを学ぶと $O(n^2)$ や $O(n\log{n})$ や $O(2^n)$ といった計算量オーダーの概念が登場します。こうした記法を見ると

    計算量オーダーの求め方を総整理! 〜 どこから log が出て来るか 〜 - Qiita
  • ソートアルゴリズムを極める! 〜 なぜソートを学ぶのか 〜 - Qiita

    NTT データ数理システムでリサーチャーをしている大槻 (通称、けんちょん) です。 今回はソートについて記します。 0. はじめに データ構造とアルゴリズムを学ぶと一番最初に「線形探索」や「ソート」が出て来ます。これらのテーマは応用情報技術者試験などでも頻出のテーマであり、アルゴリズムの Hello World とも呼ぶべきものです。 特にソートは、 計算量の改善 ($O(n^2)$ から $O(n\log{n})$ へ) 分割統治法 ヒープ、バケットなどのデータ構造 乱択アルゴリズムの思想 といった様々なアルゴリズム技法を学ぶことができるため、大学の授業でも、アルゴリズム関連の入門書籍でも、何種類ものソートアルゴリズムが詳細に解説される傾向にあります。記事でも、様々なソートアルゴリズムを一通り解説してみました。 しかしながら様々な種類のソートを勉強するのもよいが、「ソートの使い方」や

    ソートアルゴリズムを極める! 〜 なぜソートを学ぶのか 〜 - Qiita
  • 「プログラミングの常識」を時々見直す必要性について|Rui Ueyama

    自分の中のプログラミングの常識というものは、ときどき現実のハードウェアに合わせて調節しないといけない。ハードウェアが進歩し続けているので、コンピュータで簡単にできることと相対的に難しいことのバランスが変化し続けているからだ。ここでは特にストレージにフォーカスして書こうと思う。 昔はメモリが相対的にとても貴重な資源だったので多くのプログラマがメモリを節約することに血道を上げていた。例えばWindowsの初期の頃に設計されたデータ構造には、メモリをバイト単位ででもいいから節約したいという意図の痕跡がいまでも多く見受けられる。DRAMの次に速い記憶装置はHDDだったので、メモリが足りなくなればHDDにデータを保存せざるを得ないのだが、DRAMとHDDのランダムアクセスの速度差は、机の上のの開いているページを見るのと、そのAmazonで注文して到着するのを待つのと同じくらいのスケールで違うの

    「プログラミングの常識」を時々見直す必要性について|Rui Ueyama
    gfx
    gfx 2017/11/02
    "凝ったアルゴリズムは局所性が悪いので、理論的には速い凝ったアルゴリズムを考案してみても、配列などを使った単純だが効率の悪そうなアルゴリズムに勝つことは結構難しい"
  • 文字列アルゴリズムの学びかた - Hatena Developer Blog

    こんにちは!はてなアプリケーションエンジニアの id:takuya-a です。 みなさんは、このような疑問をもったことはありませんか? grep はどのように文字列を検索しているのか? MeCab はどうやって辞書を高速にルックアップしているのか? パーサやコンパイラを作りたいけど、何から始めればいいのか? 稿では、「文字列アルゴリズムとはどんなものなのか?」「なぜ重要なのか?」「何を知っておくべきか?」「どうやって勉強すればいいのか?」といった疑問にお答えしていこうと思います。 文字列アルゴリズムの意外な応用や、モチベーションを保ちやすい勉強のしかた、文字列アルゴリズムを勉強するために行った社内での取り組み、実装するときのコツといったトピックについても触れています。 このエントリは、はてなエンジニアアドベントカレンダー2016の22日目の記事です。昨日は id:syou6162 さんに

    文字列アルゴリズムの学びかた - Hatena Developer Blog
    gfx
    gfx 2016/12/29
    いい道標だ…
  • GitHub - shinnya/awesome-algorithms: A curated list of awesome places to learn and/or practice algorithms.

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - shinnya/awesome-algorithms: A curated list of awesome places to learn and/or practice algorithms.
  • とても長い配列の上位M件だけをクイックソートより高速に取り出す - Qiita

    というわけで、10倍の差がでた。 当然、配列の長さやソートする長さ、また実装の方法によって性能差は変わってくるが 今回の方法は有効であるということは確認できた。 既存の記事(2015/11/09 20:22 追記) コメント欄でUnordered partial sorting にそれらしきことが書いてあると教えていただいた。 そちらでは、「上位k個を取り出す(ソートは不要)」という問題を考えている。 同様に分割統治法を用いてソートしていきながら、上位k個以内の小区間になったらその区間はソートせずに全て選択して良いとしている。 早い話が、QuickSelectによりk+1番目の要素を探してそれより上位の要素をごそっと抜き出している。 分割統治法で大雑把にソートしていきながら、不要なソートを行わないようにする という同様のアプローチである。 C++のSTLの場合(2015/11/09 22:

    とても長い配列の上位M件だけをクイックソートより高速に取り出す - Qiita
  • exponential backoffのメモ

    exponential backoffとは? データ送信処理が失敗して再送信するときに、失敗回数が増えるに連れて再送信するまでの待ち時間を指数関数的に増やす仕組みを exponential backoff という。 有名な例としては Carrier sense multiple access with collision detection (CSMA/CD) や Carrier sense multiple access with collision avoidance(CSMA/CA) といった通信方式で、失敗回数 N に対して、[0, 2^N-1] からランダムな数を選び、その slot time 分だけ待って再送信するようになっている。 ランダムに選んでいるのは、複数の通信が同じタイミングで失敗した時に、また同じタイミングで再送されないようにするため。 また、失敗回数が一定値を超え

    exponential backoffのメモ
  • 配列のランダマイズ、出来ますか?(前編)

    先日、When Random Isn't Random Enough: Lessons from an Online Poker Exploit(英文注意)という記事がタイムラインに流れてきて、同僚と少し配列ランダマイズの話になったので備忘録として書いておきます。 配列のランダマイズというのは、たとえば上の記事にあるようなトランプのシャッフルであるとか、音楽プレイヤーの再生リストのランダム再生とかで実装しますね。ゲームを作るときなどには実装することが多いでしょうが、記事を読む前に、自分だったらどのように実装するか是非少し考えてみてください。 自分が中学生の頃に書いた記憶のあるコードは、たしか次のようなものでした。 // 配列の初期化 var a = []; for(var i = 0; i < 1000; i++) { a[i] = i; } function swap(s, d) { v

  • ビザンチン将軍問題 - Wikipedia

    ビザンチン将軍問題(ビザンチンしょうぐんもんだい、英語: Byzantine Generals Problem)とは、相互に通信しあう何らかのオブジェクト群において、通信および個々のオブジェクトが故障または故意によって偽の情報を伝達する可能性がある場合に、全体として正しい合意を形成できるかを問う問題である[1]。フォールトトレラントシステムでの多数決の妥当性や分散コンピューティングの処理の妥当性に関わる問題と言え、二人の将軍問題を一般化したものと言える。 ビザンチン将軍問題に帰結される故障や障害をビザンチン故障(Byzantine Failure、あるいはビザンチン障害)と呼ぶ。また、ビザンチン将軍問題が発生しても全体として正しく動作するシステムをビザンチン・フォールトトレラント性(Byzantine Fault Tolerance)があるという。 問題[編集] ビザンチン将軍問題は、東ロ

  • Deflate (gzip) のアルゴリズムを視覚化してみた

    のような感じにエンコードされることが分かります。 自分の好きなデータで試すことができて便利!という話でした。 PS. 以下は実行結果です。 % make % gzip < alice.txt > alice.txt.gz % ./puff -10 alice.txt.gz puff() succeeded uncompressing 1328 bytes 8 compressed bytes unused inpos=406,inbits=224,outpos=0,outbytes=45 41 6c 69 63 65 20 77 61 73 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 20 67 65 74 20 76 65 72 79 20 74 69 72 65 64 20 6f 66 20 73 69 74 74 A l i c e w a s b

  • 編集距離 (Levenshtein Distance) - naoyaのはてなダイアリー

    昨日 最長共通部分列問題 (LCS) について触れました。ついでなので編集距離のアルゴリズムについても整理してみます。 編集距離 (レーベンシュタイン距離, Levenshtein Distance) は二つの文字列の類似度 (異なり具合) を定量化するための数値です。文字の挿入/削除/置換で一方を他方に変形するための最小手順回数を数えたものが編集距離です。 例えば 伊藤直哉と伊藤直也 … 編集距離 1 伊藤直と伊藤直也 … 編集距離 1 佐藤直哉と伊藤直也 … 編集距離 2 佐藤B作と伊藤直也 … 編集距離 3 という具合です。 編集距離はスペルミスを修正するプログラムや、近似文字列照合 (検索対象の文書から入力文字にある程度近い部分文字列を探し出す全文検索) などで利用されます。 編集距離算出は動的計画法 (Dynamic Programming, DP) で計算することができることが

    編集距離 (Levenshtein Distance) - naoyaのはてなダイアリー
  • 古くて新しい自動迷路生成アルゴリズム - やねうらおブログ(移転しました)

    最近、ゲーム界隈ではプロシージャルテクスチャー生成だとか、プロシージャルマップ生成だとか、手続き的にゲーム上で必要なデータを生成してしまおうというのが流行りであるが、その起源はどこにあるのだろうか。 メガデモでは初期のころから少ないデータでなるべくど派手な演出をするためにプロシージャルな生成は活用されてきたが、ゲームの世界でプロシージャル生成が初めて導入されたのは、もしかするとドルアーガの塔(1984年/ナムコ)の迷路の自動生成かも知れない。 なぜ私が迷路のことを突然思い出したのかと言うと、最近、Twitterで「30年前、父が7年と数ヶ月の歳月をかけて描いたA1サイズの迷路を、誰かゴールさせませんか。」というツイートが話題になっていたからである。 この迷路を見て「ああ、俺様も迷路のことを書かねば!俺様しか知らない(?)自動迷路生成のことを後世に書き残さねば!」と誰も求めちゃいない使命感が

    古くて新しい自動迷路生成アルゴリズム - やねうらおブログ(移転しました)
  • 「高速文字列解析の世界」を読む前に知っておくと良いこと - EchizenBlog-Zwei

    「高速文字列解析の世界」という大変すばらしいが発売された。わりと敷居が高いではあるので読む前に知っておくとよさそうなことを書いておく。 「高速文字列解析」とは 書でいう高速文字列解析というのは主に2つのことを指している。ひとつはデータを圧縮して小さくしてディスクよりメモリ、メモリよりキャッシュというようにより高速な記憶装置で扱いましょう、という話。もうひとつはデータ構造を工夫することで複雑な操作もそこそこ高速に扱えますよ、という話。つまり「圧縮」の話と「効率的なデータ構造」の話があると考えておくと良い。 キーワードは3つ オビにも書いてあるけれど、書が主に扱うのは「BWT」「簡潔データ構造」「ウェーブレット木」の3つ。具体的には「BWT」が「圧縮」に関わっていて「ウェーブレット木」が「効率的なデータ構造」に関わっている。「簡潔データ構造」は基的な道具として書の色々なところで出て

    「高速文字列解析の世界」を読む前に知っておくと良いこと - EchizenBlog-Zwei
  • ソシャゲへの反感はワインの方程式が生んだ反感と同じ ?ゲームと心理学(2) | 新清士の「デジタルと人が夢見る力」 - コミニー[Cominy] / ブログ

    プロフィール 新清士 ジャーナリスト。立命館大学映像学部非常勤講師。1970年生まれ。慶應義塾大学商学部及び環境情報学部卒。著書に、『ゲーム産業の興亡』(アゴラブックス)。 2008年に、プリンストン大学の経済学者オーリー・アッシェンフェルターが発表した論文「ボルドーワインの質と価格を予想する(Predicting the Quality and Prices of Bordeaux Wines)」という論文は、ビンテージワインの専門家に対して、とどめを刺すとでもいえるような論文だ。 ビンテージワインは同じブドウ園で生産されたワインであっても、年によって出来不出来があるために、値段が変化する。品質によっては、10倍以上の差が生まれることがある。世界中にはワインコレクターがおり、将来にワインが成熟して評価が高まることで、値段が高くなることを見越して投機の対象として購入している人々もいる。 実

  • あなたの知らないハッシュテーブルの世界

    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.

  • Hopscotch hashing - Wikipedia

    Hopscotch hashing. Here, H is 4. Gray entries are occupied. In part (a), the item x is added with a hash value of 6. A linear probe finds that entry 13 is empty. Because 13 is more than 4 entries away from 6, the algorithm looks for an earlier entry to swap with 13. The first place to look in is H−1 = 3 entries before, at entry 10. That entry's hop information bit-map indicates that d, the item at

    Hopscotch hashing - Wikipedia
  • 汎用ソート殺し - d.y.d.

    00:26 12/12/18 BookLive! 7月に出会ってからずっと電子書籍ストアとして BookLive! をひいきにしているのですが、一体どこが好きなのか語りたくなりました。 ITMedia の これでもう迷わない、電子書店完全ガイド という一連の記事の、 電子書籍の端末の話よりストアの話をしましょうよというコンセプトに思いっきり影響されています。 といっても、第一印象が「普通のことが普通にできるので感激した!!」というもので、 つまり今年の前半に使っていた幾つかの電子書籍ストア/専用アプリが残念だっただけかもしれません。 買ったがどこをクリックすれば読めるのか理解するのに10分かかった、とか、 6冊以上買うと棚アプリから画面外にがはみ出るので手でいちいち棚を変えて整理しないと読めない、とか。 当に普通に使えるという以上に特筆することもないんですが、 あ、でも、今年になる

  • PHP5.4.8までにhashdos攻撃の危険性?

    徳丸 浩 @ockeghem PHP5.4.9リリース…『max_input_vars doesn't filter variables when mbstring.encoding_translation = On』←げっ、こんなバグがあったのか(要確認) http://t.co/K8iEBeg2 2012-11-23 11:52:34

    PHP5.4.8までにhashdos攻撃の危険性?