タグ

algorithmに関するf99aqのブックマーク (95)

  • [P2P]位置情報を数値1つで表す手法「Z-ordering」 - Tomo’s HotLine

    IT技術を中心に、暮らしに役立つ情報からクラシック音楽の解説まで気軽に情報発信しています。 WEBサイトはhttp://toremoro21.world.coocan.jp/ Twitterは@toremoro21です。 □はじめに DHTやSkipgraphなどの技術が注目されるとともに、位置情報をP2Pで扱いたいという要望がでてきている。だがDHTやSkipgraphは1次元の数値で各ノードが扱う情報範囲を扱うため、位置情報など多次元の情報を扱うのには、当初は向いてないと見られていた。しかしあるテクニックを使うとそれは一発で解消する。それがZ-orderingである。なお、このZ-orderingは位置情報を扱えるP2PミドルウェアPIAXでも採用されている。 □簡単な例 多次元を1次元で表すにはどうすればよいのだろうか?まずここで一例を挙げてみる。 例えば、2次元空間においてx={1

    [P2P]位置情報を数値1つで表す手法「Z-ordering」 - Tomo’s HotLine
  • [を] Dynamic Programming による類似文字列マッチの実装例

    Dynamic Programming による類似文字列マッチの実装例 2007-01-22-4 [Programming][Algorithm] 「Modern Information Retrieval」(8.6.1 p.216) での Dynamic Programming (DP) の解説のところのアルゴリズムを 素直に Perl で実装したみた。 さらにマッチ箇所取り出しロジックも実装してみた。 DP はいわゆる「類似文字列検索(あいまい検索)」に使うと 便利なアルゴリズム。 実は、大学院でも前の会社でも、PerlやらC++やらで実装して使ってた。 単純ながら使い勝手もよく、まさに現場向きかと。 grep 式に頭から見ていくので計算量的にはイマイチなのだが、 転置インデックス検索などで範囲を絞ってから適用すれば実用上問題ない。 ■定義みたいなの Q1. 二

    f99aq
    f99aq 2007/01/24
    DP であいまい検索
  • lucille 開発日記 » Flash sort

    http://www.neubert.net/FSOIntro.html I think flash sort algorithm( O(N) time complexity ) is one of the fastest sorting algorithm in the world. Flash sort というソートアルゴリズムが、なかなかよさげです。 紹介文には、『クヌースは「その場での(in-situ, つまり extra なメモリ領域がいらない)ソートアルゴリズムは、平均して O(n log n) 時間を要するだろう」という予測をしたが、しかしこれはもうハズレである。新しいアルゴリズムであるこのフラッシュソートは、 O(n) 時間のその場でのアルゴリズムである』とあるくらいですから、なんとも”スゴ味”が伝わってきます。 ソートのアルゴリズムといえば、 o クイックソート(+ 挿

  • HyperHyper EstraierEstraierのの 設計と実装設計と実装 株式会社ミクシィ 平林 幹雄 mikio@users.sourceforge.net 2006年11月6日 「オープンソースの全文検索、DBMSシステム」 講演資料 アジェンダアジェンダ

    HyperHyper EstraierEstraierのの 設計と実装設計と実装 株式会社ミクシィ 平林 幹雄 mikio@users.sourceforge.net 2006年11月6日 「オープンソースの全文検索、DBMSシステム」 講演資料 アジェンダアジェンダ • Hyper Estraierの概要 • N.M-gramインデックス • スケールアウト戦略 HyperHyper EstraierEstraierの概要の概要 HyperHyper EstraierEstraierとはとは • 読み方 – ハイパーエストレイ(ア|ヤ)(ー)? – estraier: [古仏] 迷う、はぐれる = stray • 全文検索システム – 大量の文書を対象に「フリーワード検索」ができる – 予め転置インデックスを用意することで高速に処理 • 文書規模Nに対する時間計算量 – 全体のインデク

  • suffix array

    更新履歴 2004/01/07  O(N) 構築アルゴリズム三種追加(Ko &Alulu, Kim & al., Karkkainen & Sanders) Suffix Arrayは、最近注目を集めているデータ構造です。その理由として、 (1)大規模なデータに対して、高速に検索、情報抽出を行うことができる (2)BWTとしてデータ圧縮に用いることができる。 ことが挙げられます。(1)に関しては自然言語処理において、膨大な量のコーパスから情報(例えば、単語の出現回数など)を調べるときににSuffix Arrayを用いると非常に高速に求めることができます。 膨大な量のコーパスに基づいた自然言語処理が盛んになってきている今、Suffix Arrayが注目を集めています。 また、ゲノム情報を調べるバイオインフォマティクスにおいても、ここの配列と似ている部分(例えばCCAG)を調べるといった場合

  • OBB vs AABB - Radium Software Development

    This domain may be for sale!

  • javascript - シャッフルシャッフル : 404 Blog Not Found

    2006年08月30日18:30 カテゴリLightweight Languages javascript - シャッフルシャッフル なるほど。Schwartzian Transformの意外な利用法だなあ。 snippets from shinichitomita’s journal - JavaScriptの配列をsort関数でシャッフルする Array.prototype.shuffle = function() { return this.map(function(a){ return { weight: Math.random(), value: a } }) .sort(function(a, b){ return a.weight - b.weight }) .map(function(a){ return a.value }); } でも、実践ではどうだろう。調べてみた。

    javascript - シャッフルシャッフル : 404 Blog Not Found
  • 最速インターフェース研究会 :: 実践JavaScriptで配列をシャッフルする方法リファクタリング

    JavaScriptで配列をシャッフルする話を見て、そういえばArray#shuffleは以前書いた記憶があるなーと思って調べてみたらコピペだった。 http://www.fumiononaka.com/TechNotes/Flash/FN0212002.html Fisher-Yatesというアルゴリズムだそうです。 Array.prototype.shuffle = function() { var i = this.length; while(i){ var j = Math.floor(Math.random()*i); var t = this[--i]; this[i] = this[j]; this[j] = t; } return this; } a = [1,2,3,4,5]; a.shuffle() // 3,1,5,2,4 a // 3,1,5,2,4 ごく普通に実装

    f99aq
    f99aq 2006/08/30
    Fisher-Yates shuffle
  • JavaScriptで配列をシャッフル

    配列をシャッフル、つまりランダムに要素の位置を入れ替えるというのを、sortメソッドを使ってやってみたのだけど、明らかにダメダメなものになってしまった。その後、あーでもないこーでもないと考えたのだけど、算数が得意すぎて頭が痛くなった。ということを某所でぼやいたらはてのくんがコードを見つけてくれた。どうやらFisher-Yatesという有名なアルゴリズムでやると良いらしい。 最初に書いたコードは、 var a = new Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9); a.sort( function (a, b) { return Math.ceil(Math.random() * 3) - 2; } ); というもの。sortメソッドは、パラメータに与えられた関数が負の値・0・正の値を返すことによって要素の順序を決定するので、その関数がランダムに値を返せばランダ

    JavaScriptで配列をシャッフル
    f99aq
    f99aq 2006/08/28
    Fisher-Yates shuffle
  • ゲーム木の探索問題

    ゲーム木の探索をする際に使われる様々な方法を紹介します。 基となる探索法 Depth first search と Breadth first search Iterative deepening Iterative broadening 探索における戦略 Minimax と Negamax 枝刈り法 αβ pruning Scout と NegaScout SSS* と DUAL* (概要) MTD(f) やその他の MTD (概要) その他の手法 Null window search

  • [を] Blowfish アルゴリズム

    Blowfish アルゴリズム 2006-06-02-3 [Algorithm] Blowfish はブルース・シュナイアー(Bruce Schneier)による暗号化 アルゴリズム。特許は取ってないとのことで、自由に使えて安心。 Dr. Dobb's Journal での解説(1995)が分かりやすいです。 http://www.schneier.com/paper-blowfish-oneyear.html P-array と S-boxes の初期化に使っているのは、円周率を16進数で あらわしたもの。 解説では "the hexadecimal digits of pi(less the initial 3)" と 説明があります。 下記URLに16進表記がありました。 http://www.super-computing.org/pi-hexa_current

    f99aq
    f99aq 2006/06/04
    TWOFISHもよろしく
  • これだけは知っておきたいアルゴリズム〜共通鍵暗号編 ― @IT

    実際に運用中の情報システムで利用されている暗号アルゴリズムを移行することは、大規模なシステムであるほど、大変な労力とコストが必要となる。従って、規模が大きく、また長期運用が前提となっているシステムほど、暗号の選定には慎重になるべきである。 その意味で、「システム性能要求上問題がない範囲内であれば、現時点における最も高い安全性が確認されている暗号の中から選択するのが望ましい」というところに、暗号技術の2010年問題【注】の質がある。いい換えれば、現在のデファクトスタンダードだからとの理由だけでその暗号を採用することは必ずしも勧められない。 【注:暗号技術の2010年問題とは】 米国は、現在利用されているすべての米国政府標準の暗号技術を2010年までにより安全な暗号技術へ交代させていく方針を明確に打ち出している。現在、世界中で使われているデファクトスタンダードの暗号技術は、そのほとんどすべて

    これだけは知っておきたいアルゴリズム〜共通鍵暗号編 ― @IT
    f99aq
    f99aq 2006/05/20
    適度にまとまっている
  • フリーハンドでベジェ曲線を描く

    点列をベジェ曲線に変換する BezierGenerator.js のサンプルです。 このサンプルは Firefox, Opera くらいでしか動きませんが、BezierGenerator.js 自体に環境依存性はありません(たぶん)。

  • KENJI

    更新履歴 DNS拡張EDNS0の解析 Linuxカーネルをハッキングしてみよう Windowsシステムプログラミング Part 3 64ビット環境でのリバースエンジニアリング Windowsシステムプログラミング Part2 Windowsシステムプログラミング Part1 Contents インフォメーション 「TCP/IPの教科書」サポートページ 「アセンブリ言語の教科書」サポートページ 「ハッカー・プログラミング大全 攻撃編」サポートページ ブログ(はてな) BBS メール このサイトについて テキスト 暗号 詳解 RSA暗号化アルゴリズム 詳解 DES暗号化アルゴリズム crypt() アルゴリズム解析 MD5 メッセージダイジェストアルゴリズム crypt() アルゴリズム解析 (MD5バージョン) TCP/IP IP TCP UDP Header Format(IPv4) Ch

  • 良い乱数・悪い乱数

    C言語標準ライブラリの乱数rand( )は質に問題があり、禁止している学会もある。 他にも乱数には様々なアルゴリズムがあるが、多くのものが問題を持っている。 最も多くの人に使われている乱数であろう Visual Basic の Rnd の質は最低である。 そもそも乱数とは 乱数とは、来サイコロを振って出る目から得られるような数を意味する。 このような乱数は予測不能なものである。 しかし、計算機を使って乱数を発生させた場合、 次に出る数は完全に決まっているので、予測不能とはいえない。 そこで、計算機で作り出される乱数を疑似乱数(PRNG)と呼び区別することがある。 ここでは、特にことわらない限り乱数とは疑似乱数のことを指すとする。 計算機でソフト的に乱数を発生させることの最大のメリットは、 再現性があることである。 初期状態が同じであれば、発生する乱数も全く同じものが得られる。 このことは