タグ

関連タグで絞り込む (187)

タグの絞り込みを解除

Algorithmに関するyassのブックマーク (155)

  • [KMP77] を読んでみた - d.y.d.

    17:53 14/12/22 ソートの逆流れ クイックソートってあるじゃないですか、クイックソート。 配列、たとえば [4,2,1,7,0,6,5,3] があったときに、 小さい方を左に、大きい方を右にまず適当に集める。 この「小さい方」と「大きい方」への二分割を、いわゆる再帰的に、 分かれたブロック両方で同じ事を繰り返していくと… なんと、小さい順に並んだ配列 [0,1,2,3,4,5,6,7] が出来上がるというアルゴリズムです。 逆向き! このデータの流れを「逆向きに」見てみたい。つまり、ソートが終わった最終状態から話が始まります。 しかも、さっきから説明なしで意味ありげにくっついていた、 「入力配列で元々どの位置にあったか」を表す値に注目していきます。 0の上に[4]がくっついているのは、最初は値0は配列のインデックス[4]の位置にあった、 ということを意味しています。(上のソート

    [KMP77] を読んでみた - d.y.d.
  • アルゴリズム図鑑 - @kyanny's blog

    アルゴリズム図鑑 Moriteru Ishida教育無料 恥ずかしながら最短経路探索プログラムを自力で実装できないので、このアプリで(何度目かの)アルゴリズムの勉強をしている。いきなりダイクストラ法とか背伸びせず、幅優先探索から。 ここ数日くらいやっててまだ完成までこぎつけられていないけど、このアプリはアルゴリズムをステップごとにビジュアルで見せる説明でわかりやすいので、なんとか挫折せずくらいつけている。 改めて取り組んでみてようやく、自分は何がわかってなかったのか、がわかりかけてきた。そもそもグラフというデータ構造をプログラムで実装することがちゃんとできていなかった。というか、いわゆる「迷路」、アスキーアートでかかれてる文字列のあれ、あれをグラフにすることがうまくできなかった。二次元配列にはできるけど、その先でつまってしまった。アルゴリズム以前の問題。 なんでこんなこともできないのかと自

    アルゴリズム図鑑 - @kyanny's blog
  • Scalable Bloom Filtersとは一体....? - Qiita

    Wikipediaを漁っていたところScalable Bloom Filters(SBF)というデータ構造を発見してしまったので紹介します1。 参照した論文 http://haslab.uminho.pt/cbm/publications/scalable-bloom-filters SBFの説明に入る前に、Bloom Filterについて簡単に紹介します。もっとも、日語のWikipediaでも十分詳しい説明が載っていたりするのですが……。 ささっと説明 Bloom Filterはちょっと不思議な性質を持つデータ構造の一種です2。 いわゆるSetと同じ操作を提供する 要素を入れる操作と、ある要素が入っているかを調べる操作 どちらも時間計算量O(1)で実現できる ハッシュテーブルなどを用いて実装される同種のデータ型と比して、とても空間効率が良い その代わりに、ある要素が入っているかの判定を

    Scalable Bloom Filtersとは一体....? - Qiita
  • とても長い配列の上位M件だけをクイックソートより高速に取り出す - Qiita

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

    とても長い配列の上位M件だけをクイックソートより高速に取り出す - Qiita
  • キャッシュフレンドリーな二分探索 ー データ構造を再考する | POSTD

    現代のコンピュータのアーキテクチャに搭載されている高速のキャッシュメモリは、 参照の局所性 に優れた(=一連のものとしてアクセスした要素が、互いに近いメモリのアドレスに配置されている)データ構造を好みます。これは、 Boost.Containerの平坦な(ツリー状ではない)連想コンテナ のようなクラスを陰で支えている理論的根拠です。要素を連続的に(かつ順序だてて)保存すると同時に、標準的なC++ノードベースの連想コンテナの機能性をエミュレートします。以下にあるのは、要素が0から30の範囲の時、 boost::container::flat_set の中で 二分探索 がどのように行われるのかを示した例です。 探索で目的の値を絞り込むにつれて、アクセスされる要素は次第に近くなっていきます。そのため、最初のうちは大きな距離を飛び越えていくような感じであっても、参照の局所性は このプロセスの最後の

    キャッシュフレンドリーな二分探索 ー データ構造を再考する | POSTD
  • Lucene lecture at Pisa

    Package: org.apache.lucene.analysis An Analyzer is a TokenStream factory. A TokenStream is an iterator over Tokens. input is a character iterator (Reader) A Token is tuple <text, type, start, length, positionIncrement> text (e.g., “pisa”). type (e.g., “word”, “sent”, “para”). start & length offsets, in characters (e.g, <5,4>) positionIncrement (normally 1) standard TokenStream implementations are

  • Pythonでストリーム暗号RC4を実装し、脆弱性の一端を垣間見る - ももいろテクノロジー

    この頃、SSLの暗号化などにストリーム暗号RC4を使わないほうがいいといった話がよく聞かれるようになった。 2013年版のCRYPTREC暗号リストでも128bitのRC4が「運用監視暗号リスト」に入っているし、先日には、Microsoftからストリーム暗号RC4を使わないようにというセキュリティアドバイザリが出ている。 CVEとしては今年の3月に出ているようだ。 NVD: Vulnerability Summary for CVE-2013-2566 JVNDB-2013-001910 そこで、ここでは実際にPythonでRC4を実装し、RC4の脆弱性に関する簡単な例を再現してみる。 ストリーム暗号とは何か 暗号には大きく分けて公開鍵暗号と共通鍵暗号がある。 公開鍵暗号は、他人に見られても大丈夫な鍵(公開鍵)と自分だけが知っている鍵(秘密鍵)のペアを使って暗号化するもので、代表的なものに

    Pythonでストリーム暗号RC4を実装し、脆弱性の一端を垣間見る - ももいろテクノロジー
  • 0x5f3759df

    This post is about the magic constant 0x5f3759df and an extremely neat hack, fast inverse square root, which is where the constant comes from. Meet the inverse square root hack: float FastInvSqrt(float x) { float xhalf = 0.5f * x; int i = *(int*)&x; // evil floating point bit level hacking i = 0x5f3759df - (i >> 1); // what the fuck? x = *(float*)&i; x = x*(1.5f-(xhalf*x*x)); return x; } What this

    0x5f3759df
    yass
    yass 2014/10/30
    " This post is about the magic constant 0x5f3759df and an extremely neat hack, fast inverse square root "
  • 作って覚える転置インデックス、「検索エンジン自作入門」 - プログラマでありたい

    先行発売で、検索エンジン自作入門を購入しました。まだペラペラと眺めている状況ですが、これが非常に面白いです。 「検索エンジン自作入門」は、集めた文章をいかに整理するかをテーマとして扱っているです。整理するという意味は、検索エンジンを利用するというライフハック的な意味ではありません。整理する為の検索エンジン自体を自分で作ることで理解するという、極めて硬派なです。 「検索エンジン自作入門」とは? 「検索エンジン自作入門」は、未踏IT人材発掘・育成事業にスーパークリエータに認定された山田浩之氏と、Senna/groongaの開発者の末永匡氏の共著です。検索エンジンについて語らせたら、日でこれ以上の人たちはいないだろうという組み合わせです。ということで、内容は非常に濃いのですが、難しい内容を解りやすく解説されています。 一方で、扱っている内容は非常にマニアックです。下に目次付けておくので見て

    作って覚える転置インデックス、「検索エンジン自作入門」 - プログラマでありたい
    yass
    yass 2014/09/23
    " 紙面の5割以上が転置インデックス(Inverted index)についてです。つまり1つのアルゴリズムについて、100ページ以上を割いていることになります "
  • 計算量を具体的に見てみる 2009-01-06 - きしだのはてな

    アルゴリズムの話では、計算量の解析がかかせません。 計算量はオーダー記法で表されますが、これは、データの入力量に対してどのくらい時間がかかるかをあらわしたものです。 こういった話はどのアルゴリズムのにも載ってるはずですが、具体的にどのようなプログラムを書くとそのオーダーになるかという記述はあまりありません。 ということで、やってみました。 計算時間表示のための共通処理を行うクラスは、一番最後に書いてます。 O(1) 計算時間がO(1)のアルゴリズムは、処理が入力の量によらない場合です。 配列の要素のアクセスや、ハッシュテーブルによるデータ検索、連結リストへの追加削除などがこれにあたります。 コードには入力量でのループが含まれません。 public class O1 extends ViewCompFrame{ @Override void compute(int n) { proc();

    計算量を具体的に見てみる 2009-01-06 - きしだのはてな
  • オーダーについて知っておくべき5つのこと - わさっきhb

    研究室のゼミ発表で,「オーダーのことはよく分かっていませんが…」という前置きで計算量の見積もりをしているものを,昨年,今年と見かけました. この日記が役に立つか,余計な御世話になるか分かっていませんが,ここに整理を試みてみました. 1. ビッグ・オー記法 「アルゴリズムの計算量をオーダーで表してみなさい」と指示されたときのオーダーは, 注文,発注という意味でもなく, 順番*1,順序,秩序という意味でもなく, 「百万のオーダー」*2というような使い方でもなく, 数学の位数という意味でもなく, ビッグ・オー記法,あるいはwikipedia:ランダウの記号を用いて表すものを言います. 2. 一番次数の高いもの以外,それと係数は無視 ビッグ・オー記法では,基的に,一つの文字に関するできるだけ簡単な数式に,「O( )」をかぶせます.このとき, 複数の項の足し算なら,次数の最も高いものだけを残し,他

    オーダーについて知っておくべき5つのこと - わさっきhb
  • Bitbucket | Git solution for teams using Jira

    With best-in-class Jira integration, and built-in CI/CD, Bitbucket Cloud is the native Git tool in Atlassian’s Open DevOps solution. Join millions of developers who choose to build on Bitbucket.

    Bitbucket | Git solution for teams using Jira
  • Linear Hashing – Ankit Jain

    Hash table is a data structure that associates keys with values. To know more about liner hashing refer Wikipedia. Here are main points that summarizes linear hashing. Full buckets are not necessarily split Buckets split are not necessarily full Every bucket will be split sooner or later and so all Overflows will be reclaimed and rehashed. s is independent to overflowing bucket At level i, s is be

  • リニアハッシュ(Linear Hash)

    今年の技術士二次試験には、Linear Hashに関する出題がありました。 恥ずかしながら、僕はLinear Hashって分からなかったのですが、Hashに関する一般的な知識から何とか回答することはできました。 木構造との比較でPros & Consを求めた出題ですので、Linear Hashを深追いする必要はないのでしょうけれど、分からなかったことをそのままにしないのが僕のPolicy。なぜかあまり情報が見つからなかったので、Memoっておくことにしました。 Linear HashのHash関数は他にもあるかも知れませんが、調べた感じでは... h[i](c) = c mod (2^i)N 式の意味は後で分かると思うので、実際の動きを追ってみます。 まず、Hash空間のSizeの初期状態が4だとします。(N=4) このとき、iは0としておきます。(今は深く考えないでください。) すると、

    リニアハッシュ(Linear Hash)
  • 1000万件の高評価がたった1件だけの評価に負けないスコアランキングアルゴリズム(ライブラリ)

    Modulesの他、iOSの新しいトピックについても多数解説(NSProgressなど)。 What's New in Objective-C and Foundation in iOS 7 | Ray Wenderlich 注目は Modules。 Modu...

    1000万件の高評価がたった1件だけの評価に負けないスコアランキングアルゴリズム(ライブラリ)
  • DSIRNLP#2で発表しました「作ろう!簡潔ビットベクトル」 - EchizenBlog-Zwei

    DSIRNLP#1に続いて今回の#2も発表の場をいただきました。今回は簡潔データ構造、とくに最も基的なデータ構造である簡潔ビットベクトルについて発表しました。@overlastさん、@kimurasさん、@rindai87さんをはじめ関係者、参加者の皆様どうもありがとうございました。 twitterでも紹介しましたが発表資料リンクを置いておきます。 発表資料:作ろう!簡潔ビットベクトル 第2回 データ構造と情報検索と言語処理勉強会 #DSIRNLP - [PARTAKE] DSIRNLP#1で発表しました「TRIEにトライ!〜今日からはじめるTRIE入門〜」 - EchizenBlog-Zwei なお質疑では以下のようなものがありました。 ・popcountを使った二分探索をするときのpopcount値はいつ持っておくの? =>直前の64bit毎の線形探索時に使ったものを残しておいて使い

    DSIRNLP#2で発表しました「作ろう!簡潔ビットベクトル」 - EchizenBlog-Zwei
  • 完備辞書(簡潔ビットベクトル)の解説 - アスペ日記

    以前、「簡潔データ構造 LOUDS の解説」というシリーズの記事を書いたことがあります。 LOUDS というのは木構造やtrieを簡潔に表すことができるデータ構造なのですが、この中で「簡潔ビットベクトル」というものについてはブラックボックスとして扱っていました。 また、中学生にもわかるウェーブレット行列を書いたときも、その中で出てきた「完備辞書」の実装には触れませんでした。 この「簡潔ビットベクトル」「完備辞書」は、同じものを指しています*1。 今回は、このデータ構造*2について書いてみます。 完備辞書でできること ビット列に対する定数時間の rank と selectです*3。 rank()は、「ビット列の先頭から位置 k までに、1 のビットがいくつあるか」*4。 select()は、「ビット列の先頭から見て、n 個目の 1 のビットの次の位置はどこか」*5。 それぞれ例を挙げます。

    完備辞書(簡潔ビットベクトル)の解説 - アスペ日記
  • robert-bor/aho-corasick · GitHub - Java implementation of the Aho-Corasick algorithm for efficient string matching

  • 文字列検索アルゴリズムの覚え書き - 我らねぶた馬鹿

    マイコミジャーナルの連載記事で、「StringSearch」という文字列検索のためのJavaライブラリを紹介しました。 攻略! ツール・ド・プログラミング (44) 高速な文字列検索を実現するJavaライブラリ「StringSearch」 | マイナビニュース その補足も兼ねて、記事中に出てくる文字列検索アルゴリズムについて少しまとめてみました。細部を省略した大雑把な説明なので厳密な解説ではありませんが、参考までに。 naiveアルゴリズム 対象の文字列とパターン文字列を先頭から順番に比べていき、マッチしなかったら1文字進めてまた最初から比べるという手法です。 java.lang.StringのindexOf()メソッドなどはこの実装だそうです。 Knuth Morris Pattアルゴリズム(KMPアルゴリズム) マッチに失敗した場合に、比較するスタート位置を1文字ずつ進めるではなく、何

    文字列検索アルゴリズムの覚え書き - 我らねぶた馬鹿
  • アルゴリズムパズル

    大学で計算機科学を教える著者が、「パズルを解くことで、アルゴリズム的思考を鍛える」というコンセプトに基づいて、古今東西150の「アルゴリズム的」な数学パズルを収録。優れたアルゴリズム設計戦略と分析テクニックを通して、アルゴリズム的思考と柔軟な発想を育てます。また、近年では、入社試験にパズル的な難問を出す企業も増えており、その対策としても役立つ一冊です。 質問形式の序文 謝辞 パズル一覧 チュートリアルのパズル 編のパズル 墓碑銘パズル 第1章 チュートリアル 一般的なアルゴリズム設計戦略 魔方陣(Magic Square) nクイーン問題(The n-Queens Problem) 有名人の問題(Celebrity Problem) 数当てゲーム(Number Guessing)(別名20の扉(Twenty Questions)) トロミノ・パズル(Tromino Puzzle) アナグ

    アルゴリズムパズル
    yass
    yass 2014/04/14
    " 近年では、入社試験にパズル的な難問を出す企業も増えており、その対策としても役立つ一冊です。"