タグ

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

  • 関連タグはありません

タグの絞り込みを解除

AlgorithmとALgorithmとProgrammingに関するagwのブックマーク (1,893)

  • JavaScript でソートアルゴリズムを可視化 - bkブログ

    JavaScript でソートアルゴリズムを可視化 JavaScript でソートアルゴリズムを可視化するプログラムを書いてみました。元ネタは Jon Bentley による ソートアルゴリズムを可視化する Java アプレットです。 アルゴリズム 要素数 動作確認は Firefox 2, IE 7, Opera 9 で行いました。要素数は最大で200まで選べますが、かなり重くなるので遅いマシンで実行すると危険です。 English version is also available. ソースコード: sort-animation.js 解説 X軸が配列の添え字、Y軸が配列の要素の値を示しています。最初に要素がランダムに並んでいる配列 (値に重複なし) を作って、それを各種のソートアルゴリズムでソートする様子をアニメーションで表示します。 ただし、要素のあらゆる変更に対して毎回表示を更新し

  • ハードウェア乱数 - odz buffer

    昔,パソコンで光栄の「三國志」を遊んでいたときのこと,タイトル画面の後に「乱数の初期化をするから,少し待ってスペースキーを押せ」というような指示があったことを覚えている。わざわざそんな宣言をしなくても裏で勝手に初期化しておけばよいことなのだけれど,まあ,そう宣言しておくことで説得力を与えることができたんだと思う。当時小学生だった僕は,素直に少し待ってから,スペースキーをちょこんと押していたことを思い出す。 説得力て。普通に考えてそのスペースキーを押すタイミングを乱数生成の種に使っているんじゃあるまいか。 氏はこの方式によって秒間約 100 バイトの乱数列を生成することができると述べている。 ちょ、遅え。現実問題としていくら擬似でない物の乱数とはいえ、これだけでは使い物にならないなぁ。実際にはこの乱数を擬似乱数の種に使うのが関の山か。 あと、お手軽なハードウェア乱数としてファイルの生成・削

    ハードウェア乱数 - odz buffer
  • [を] 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. 二

  • GPUSORT

    Introduction Most present day computers sport powerful GPUs (Graphics Processing Units) capable of beating even high-end CPUs in terms of raw FLOPS when performing at their peak. Consequently, there has been lot of work recently on implementing different problems on GPUs to exploit their high processing power. One such problem is sorting, which has been a major computational bottleneck in applicat

  • ヒューリスティックス Heuristic問題解決,判断,意思決定をおこなう際に,規範的な計算手順(アルゴリズム)によらず

    ヒューリスティックス Heuristic 問題解決,判断,意思決定をおこなう際に,規範的でシステマティックな計算手順(アルゴリズム)によらず,近似的な答えを得るための解決法である。1970年代以降,トバースキーとカーネマン(TverskyとKahneman)の一連の研究によって,簡便な方略としてのヒューリスティックスとその系統的なバイアスに焦点が当てられるようになった。 現実世界では,人は,情報処理能力や知識,時間の制約のもとで,最適化をはかる必要がある。そこで,認知的倹約家としての人は,ヒューリスティックによって,素早く,おおまかな認知的処理をする。これは制約された合理性あるいは,適応の点から見ると生態学的合理性があるといえる。 ヒューリスティックは認知的処理のための道具箱のようなもので,問題に応じて利用されやすいものがある。 不確実状況下での確率や判断などに用いられるヒューリス

  • 定番アルゴリズムを徹底理解! - 今からでも遅くない!アルゴリズム入門:selfup

    このパートでは,プログラミングを勉強するうえで欠かせないアルゴリズムの中でも定番中の定番を紹介します。ソート(並べ替え)やサーチ(検索)などの機能は今では標準のライブラリとして提供されています。実用的なプログラムを作るときにそのものずばりをいちいち書く機会は少ないかもしれません。しかし定番のアルゴリズムは,様々に形を変えて普段のプログラミングに登場します。 解説を読んで仕組みがわかったら,ぜひそれをプログラムにしてみてください。読んだだけではプログラムを書けるようにはなりませんし,プログラムを書いてみて初めて,実は十分に理解できていなかったと気付くことがよくあります。しかもアルゴリズムは特定のプログラミング言語に依存しないので,一度身に付ければ,後でどんな言語を学ぶ場合でも役に立ちます。 1番目から6番目まではソートのアルゴリズム,7番目から9番目まではサーチのアルゴリズムです。一つひとつ

    定番アルゴリズムを徹底理解! - 今からでも遅くない!アルゴリズム入門:selfup
  • The Aggregate Magic Algorithms

    There are lots of people and places that create and collect algorithms of all types (here are a few WWW sites). Unfortunately, in building systems hardware and software, we in The Aggregate often have found it necessary to do relatively obscure low-level things very efficiently. Many of the tricks we've devised or collected either require assembly language coding or are not entirely portable when

  • 最速インターフェース研究会 :: 実践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 ごく普通に実装

  • 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で配列をシャッフル
  • The Cartoon Animation Filter

  • プログラムを2倍から4倍早くする方法 - GIGAZINE

    プログラミングの話なので、ソフトウェアを使うだけのユーザーには関係ない話です。 要するに実行速度の遅いプログラムを2倍から4倍高速化させるには非常に基的なトリックというか技術を使えば可能ですよ、というお話。 アルゴリズムの考え方なので、仕事上どうしてもプログラムの実行速度を上昇させる必要があるが、やり方がイマイチよく分からないという人は必見。 Dr. Dobb's | An Algorithm for Compressing Space and Time | 3 1, 2006 かの有名な「ライフゲーム」を例に出し、プログラミングのコードの内容を高速化するにはどういうアプローチを取ればいいのか、その際に使用する再帰的アルゴリズムの考え方、複雑な式を簡単な式に圧縮する方法、圧縮することで実行時間の節約が可能になること、などをやたら詳細に解説しています。 ぶっちゃけ、これが理解できるのであれ

    プログラムを2倍から4倍早くする方法 - GIGAZINE
  • Rabin Karp アルゴリズムでコード重複の検出 blog.bulknews.net

    Rabin Karp アルゴリズムでコード重複の検出 YAPC::NA で会った Fotango の Norman Nunley がつくってる Algorithm::RabinKarp モジュールが面白げです。 Rabin Karp 文字列探索アルゴリズム (wikipedia) を使って文字列のハッシュ(ダイジェスト)をチェックし、同一の値を示す部分を重複しているとみなしてレポートしてくれます。つまり、プロジェクト内のコードのコピーペーストを検出するツールとして使えるというわけ。 ためしに Plagger で試してみた結果は rabin.txt のようになりました。プラグインの register_hook や CustomFeed での Feed オブジェクトの生成など、イディオム的に使う部分が大半になってしまっていますが、いくつか実際コピペで再利用しているコードが検出できています。 c

  • 画像配信の負荷分散も比較的簡単?(その1) - 最速配信研究会(@yamaz)

    30万個ぐらいの静的ファイルを配信するサーバーの選び方 で静的な配信サーバに関することが述べられている. naoyaさんが公開されてるInside Hatena Bookmark's Backend の資料などを読むと、mod_perlなサーバーやMySQLサーバーの選び方の参考になったりするわけですが、世の中を見渡してみても、静的コンテンツ(画像とか)を配信するサーバーの指南書らしきものはなかなか見あたりませんでした。 なので、経験を元に書いてみることにします。 ということらしい.書いてあることはすべて同意だけど, つい3ヶ月くらい前まで 平均15k×1万URL×50億httpアクセス/day 平均4KByte×100万URL×3億HTTPアクセス/day な画像サーバと某所で向き合ってたため,ちょっとは役に立てるかもしれないと思ったので,私の経験を書いてみようと思う. 動画配信の負荷分

    画像配信の負荷分散も比較的簡単?(その1) - 最速配信研究会(@yamaz)
  • 画像配信の負荷分散も比較的簡単?(その2) - 最速配信研究会(@yamaz)

    http://d.hatena.ne.jp/yamaz/20060426 の続き.待ち行列理論に従うと遅延のないサービスを行うためには サーバの単位時間のリクエスト処理能力 > ユーザの単位時間のリクエスト数 という非常に単純なことを行えばいいことになる.「なにをあたりまえのことを...」と思われるかもしれないがもうちょっと付き合っていただきたい. ところでたいていのBlogや画像サービスのサービスURLはこうなってる. http://ホスト名/<ユーザ名>/ http://ホスト名/id?ユーザ名 http://ホスト名/ディレクトリ名/コンテンツ名 例で言うと下記のような感じだ. http://d.hatena.ne.jp/yamaz/ http://mixi.jp/show_friend.pl?id=128497 http://i.yimg.jp/images/search/head

    画像配信の負荷分散も比較的簡単?(その2) - 最速配信研究会(@yamaz)
  • 画像配信の負荷分散も比較的簡単?(その3) - 最速配信研究会(@yamaz)

    画像配信の負荷分散も比較的簡単?(その2)のつづき. 初めての方は画像配信の負荷分散も比較的簡単?(その1)からどうぞ. アクセス/保持データ量ともに多くなってきてどうにもならなくなったらどうするか?お金があるところはサーバを強化したりメモリを増やしたりするのも手だろう.ただもっと安上がりで効果的な方法がある. どうにかなるまで1台あたりのアクセス数と保持データ量を減らせばいいのだ. ずっこけた人がいるかもしれないけど,こっちは大真面目である(笑).別にアクセスが少なくなるまでサービスを縮小させろという意味ではないので,もうちょっと付き合っていただきたい. 下記のような仮想の実装例を考えてみよう. http://i.yimg.jp/images/search/head_050825.gif にアクセスがあったらURLを10で割ってその余りに応じて img0.yimg.jp img1.yim

    画像配信の負荷分散も比較的簡単?(その3) - 最速配信研究会(@yamaz)
  • 画像配信の負荷分散も比較的簡単?(その4) - 最速配信研究会(@yamaz)

    http://d.hatena.ne.jp/yamaz/20060509の続き. 初めての方は画像配信の負荷分散も比較的簡単?(その1)からどうぞ. Googleはimages.google.com 1つで1,187,630,000(11.8億!)の画像を保持している(ように見える).1つの画像が10KBだったとしても12.5TBの画像を保持していることになる. GoogleがこんなことができてるのはGoogleFileSystemがあるからだ. http://labs.google.com/papers/gfs.html GoogleFileSystemは簡単に言うとデータバックアップ機能つきの分散NFSのようなものだ. GoogleFileSystemに関しては上記URLのPDFに詳しいので,そちらを参照してほしいが,基的な考え方は今まで負荷分散の考え方となんら変ることはない.つまり

    画像配信の負荷分散も比較的簡単?(その4) - 最速配信研究会(@yamaz)
  • 知ってた?8進数のナゾ:Alternative 笑門来福:オルタナティブ・ブログ

    C、JavaJavaScriptなどで、「0123」という数はどういう意味でしょうか。プログラマーであれば、これが8進数の「123」で、10進数で「83」(1×82+2×81+3)という数値だということは常識です。では、なぜ0から始まると8進数ということになっているのか? 実は、今週の社内勉強会の中でこの疑問が出て、残念ながら参加者の中にこの疑問に答えられる人がいませんでした。そこで、Webでわかる範囲で調べてみた結果わかったのが以下のことです。 なぜ8進数が必要だったのか? さて、この答えにたどり着くには、まず「そもそもなぜ8進数が必要だったのか?」ということを理解しなければなりません。 これは、コンピュータの歴史に遡ります。実は、その昔、コンピュータの処理ビット数は3の倍数が普通でした。たとえば、IBMの70xシリーズや70xxシリーズは36bit機(例:701, 7094) 、DE

    知ってた?8進数のナゾ:Alternative 笑門来福:オルタナティブ・ブログ
  • Pythonで作られた「エボリューショナリ アート」画像

    遺伝学的プログラミングに基づき、生物学的な進化のアルゴリズムによってRGBの各要素を枝分かれさせてできあがったアートです。 動物の体表の模様などのアルゴリズムと理屈的には同じ。再読込する度に違う模様が出てくるので非常に面白い。ソースコードもダウンロードできます。 閲覧は以下から。 Evolve | Vote on organisms http://artdent.homelinux.net/evolve/vote/ 今まで生成された画像の一覧 http://artdent.homelinux.net/evolve/view/ ソースコードのダウンロードは以下から。 http://artdent.homelinux.net/evolve/about/ Python、Django、numarray、Python Imaging Libraryを使っているそうで。 「エボリューショナリ アート」

    Pythonで作られた「エボリューショナリ アート」画像
  • [を] 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

  • フリーハンドでベジェ曲線を描く

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