タグ

algorithmとjavascriptに関するnitoyonのブックマーク (15)

  • はてなブログ | 無料ブログを作成しよう

    は思想や未来に影響を与える。お前もブックサンタにならないか? 12月ですね。しわーっす!(挨拶) 年末になると募金だとか寄付、助け合いの話題が盛り上がりますね。 以前にも、インターネットに恩返しして、人類の発展に貢献しちゃおうという記事やら、Be My Eyes について書いたりしたのですが、ちょっとした自分の時間や少しのお金

    はてなブログ | 無料ブログを作成しよう
    nitoyon
    nitoyon 2009/04/02
    canvas で流体シミューレション。水のように粒子が動く。数式の解説あり。
  • ニテンイチリュウ : Image Evolution

    最初は、50個のポリゴンを重ねてモナリザを作ったよというRoger Alsing氏の記事だった。その発想と過程が非常に面白かった。 ソースコードが公開されるのを待っていたら、2日経って、同じことをjavascript+canvasで実装した別の人が登場! Image Evolution 200x200ピクセルまでのイメージをアップロードすると、canvasで描かれた半透明のポリゴンで描画してくれます。その過程が非常に面白い。 canvasのgetImageDataのブラウザ実装の関係で、Firefox3.0.4/Opera9.61/Webkit r39090でのみ動作。WebKitでの実行が超高速なため、WebKit推奨。Safari3.2.1では動作しません。 また描画中の状態をDNAという形でインポート/エクスポートすることも可能。 その発想と技術力に脱帽。 必見!

    nitoyon
    nitoyon 2008/12/11
    50個の半透明三角形だけで任意の画像を再現していく。試行錯誤で試すのかな(?) / JS+canvasでできてるのでソースコード読めるかな..→ AS3に移植してみた http://d.hatena.ne.jp/nitoyon/20090217/polygon_monalisa
  • TinySegmenter: Javascriptだけで実装されたコンパクトな分かち書きソフトウェア

    TinySegmenterはJavascriptだけ書かれた極めてコンパクトな日語分かち書きソフトウェアです。 わずか25kバイトのソースコードで、日語の新聞記事であれば文字単位で95%程度の精度で分かち書きが行えます。 Yahoo!形態素解析のように サーバーサイドで解析するのではなく、全てクライアントサイドで解析を行うため、セキュリティの 観点から見ても安全です。分かち書きの単位はMeCab + ipadicと互換性があります。 デモ 日語の文章を入力し、解析ボタンをクリックしてください。 ダウンロード TinySegmenterはフリーソフトウェアです. 修正BSDライセンスに従ってソフトウェアを使用,再配布することができます. Download TinySegmenter version 0.2 使い方 <script type="text/javascript" src

    nitoyon
    nitoyon 2008/05/25
    25KBで形態素解析(品詞は判別せず)
  • JavascriptでSuffixArray - やればできる子の日記

    全文検索エンジンを試作してみたよ - やればできる子の日記とJavascriptを組み合わせてもうちょっとなにかできないかなあと思って、JavascriptでSuffixArrayを作ってみました。 上手い具合に組み合わせるアイデアが思いつけなかった(どうせ全文検索用のインデックスを保持しちゃうので、別途SuffixArrayを保持する意味がなさそう)ので、素のまま公開しちゃいます。 ちなみに、Javascriptも自信ないです。僕はJSでのべ2000行程度しか書いたことないはず。 /* Suffix Array構築のアルゴリズムは色々研究されています。 以下のコードはかなり最悪なアルゴリズムなので、実用の際は調査してください。*/ function genSA(text){ var sa = new Array(text.length) for(var i = 0; i < text.l

    JavascriptでSuffixArray - やればできる子の日記
    nitoyon
    nitoyon 2008/04/22
    Suffix Array を JS で。
  • 「再帰→ループ」の変換が大変だった件 - IT戦記

    まず、ループは再帰で表現できる ループというのはすべて再帰呼び出しで表現できる。 たとえば、コレは var array = [1, 2, 3]; for (var i = 0; i < array.length; i ++) alert(array[i]); こんな感じになる (function f(array, i) { if (i < array.length) { alert(array[i]); return f(array, i+1); } })([1, 2, 3], 0); もし、 array がこの目的以外に使われないならコッチのがキレイかも (function f(array) { alert(array.shift()); if (array.length) return f(array); })([1, 2, 3]); ということは、再帰はループで表現できるはず という

    「再帰→ループ」の変換が大変だった件 - IT戦記
    nitoyon
    nitoyon 2007/10/16
    pushをunshiftにして、firstChildとnextSiblingを入れ替えると、幅優先探索になりますね! / stack.pop() の前に if (!stack.length) break; をすべきかと。
  • The JavaScript Canvas Hyperbolic Tree

    The JavaScript (Canvas) Hyperbolic Browser Works in Firefox 1.5+, Safari and Opera 9.5 05/10/2008 IMPORTANT UPDATE: This library is now part of the JavaScript Information Visualization Toolkit. Changes will no longer be published on this page. What's a Hyperbolic Tree? A Hyperbolic Tree (HT) is a "focus+context" information visualization technique used to display large amount of inter-related

    nitoyon
    nitoyon 2007/10/11
    Hyperbolic Tree を Canvas に描画。Poincaré Disk model(http://en.wikipedia.org/wiki/Poincar%C3%A9_disc_model)にプロット。 via ajaxian
  • 100% Pure JavaScript Camellia - mixi engineer blog

    NTTと三菱電機が共同開発した共通鍵ブロック暗号 "Camellia" の実装について以前調査していた時、ついカッとなってJavaScriptで実装してしまいました。類似の実装も既にあるようですし今は反省しているのですが、死蔵しておくのもナンなので晒しておきます。 ソースコードと使い方 小ネタなので、このソースコードはpublic domainということにしますね。 CryptoCipherCamellia-js-1.0.2 CryptoCipherCamellia.jsは128-bitブロック暗号Camelliaのプリミティブの実装と、暗号利用モードとしてCBCモードの実装を含んでいます。例を簡単に示すと次のような感じです: var SECRET_KEY = CryptoUtil.arrayFromHex( "00112233445566778899AABBCCDDEEFF"); var

    100% Pure JavaScript Camellia - mixi engineer blog
    nitoyon
    nitoyon 2007/08/07
    Camellia を JS で実装。24.2KB
  • Javascriptでdiffる ( with 形態素解析 ) (nakatani @ cybozu labs)

    Javascript で diff というのはいくつか試された例はあるようですが、まだこれといった決定打は出ていない様子です。 実は diff は見た目ほど軽い処理ではないので、Javascript にやらせるのはこれが結構大変…… diff の計算量は、おおざっぱに言うと比較対象の要素数の二乗に比例し(実際にはそれより小さくすることができるのですが、まあ話のイメージとして)、かつメモリを大量に消費するので、バッチ的な処理に最適化されていない Javascript にはどうしても荷が重いものとなってしまいます。 比較対象の要素数を減らせば当然計算量は減りますが、行単位で比較してもあまり嬉しくない(わざわざ Javascript で処理するということは自然文が対象と思って良いでしょう)。最小の文字単位だとギブアップ。 ということは形態素解析で分かち書きして、単語単位で diff するのが J

    nitoyon
    nitoyon 2007/06/29
    diff は計算量が多い。形態解析で単語単位にしてから「An O(NP) Sequence Comparison Algorithm」という論文のアルゴリズムで実装。さらに amachang で高速化。
  • Javascriptで継続渡し - ヒビノキロク

    id:nozom:20060317#1142577630の続き。世界で最も誤解された言語とも呼ばれるJavascriptを使って継続渡しを書いてみた。 なお、Javascriptの処理系としてRhino*1を使った。参考文献は『入門Javascript』(ISBN:4756138713)。 function fib(n) { if ((n == 1) || (n == 2)) return 1; else return fib(n - 1) + fib(n - 2); } function fib_cps(n, k) { if ((n == 1) || (n == 2)) return k(1); else return fib_cps(n - 1, function(v1) { return fib_cps(n - 2, function(v2) { return k(v1 + v2);

    Javascriptで継続渡し - ヒビノキロク
    nitoyon
    nitoyon 2007/03/06
    Lisp っぽくフィボナッチ。理解できん....
  • JavaScript1.7で平行プログラミングモデルを - ラシウラ

    Firefox2.0に搭載されているJavaScript1.7にはPython2.5風のgenerator機構があります。 function内でyield式を使うことで、その呼び出し結果がiteratorと同じインタフェースで利用可能なgeneratorオブジェクトになる。 generatorオブジェクトはnext()のほかにsend(v)メソッドを持つ。send(v)でyield式に復帰したとき、その式の値をvに置き換えられる。 generatorを使って平行プログラミングモデルの(擬似)システムを作るのは常套手段です。関数だけで中断再開を実現するには、処理させるコードをContinuation Passing Styleで書かなくてはいけないのですが、generator機構のyieldによって中断可能な処理でも比較的フラットに書くことができるからです。 平行モデルはいろいろあるのですが

    JavaScript1.7で平行プログラミングモデルを - ラシウラ
  • JavaScriptによる全文検索エンジン - llameradaの日記

    JavaScriptでインデックス型の全文検索エンジンを作ってみた。全文検索エンジンを作る際に問題となるのは、インデックスデータを部分的に読み込む方法である。通常はmmapやpreadなどを使ってファイルの一部を部分的に読み込むのだが、もちろん、ブラウザには使えない。ブラウザでファイルの一部分を読み込むには2通りの方法がある。1つは、ファイルを多数のファイルに分割する方法であり、もう1つはHTTPリクエストのRangeヘッダを利用して、ファイルの一部を取得する方法である。前者の利点は、ブラウザのキャッシュが効くことや、対応ブラウザが多いことである。後者の利点は、ファイル数が少なくなるので、インデックスの管理が容易になることである。今回はRangeヘッダの実用性にも興味があったので、後者の方法を用いた。 参考ページ:最速インターフェース研究会 :: Ajaxを使ったシンプルなチャット 転置イ

    JavaScriptによる全文検索エンジン - llameradaの日記
    nitoyon
    nitoyon 2007/01/24
    Content-Range で GET して大きいファイルの一部を非同期で読み取る。
  • 【インフォシーク】Infoseek : 楽天が運営するポータルサイト

    日頃より楽天のサービスをご利用いただきましてありがとうございます。 サービスをご利用いただいておりますところ大変申し訳ございませんが、現在、緊急メンテナンスを行わせていただいております。 お客様には、緊急のメンテナンスにより、ご迷惑をおかけしており、誠に申し訳ございません。 メンテナンスが終了次第、サービスを復旧いたしますので、 今しばらくお待ちいただけますよう、お願い申し上げます。

    nitoyon
    nitoyon 2006/09/08
    度分秒や度の相互変換ができるフォーム。
  • フリーハンドでベジェ曲線を描く

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

    nitoyon
    nitoyon 2006/05/18
    かっこいい。確定したら色が変わるのがすてき。
  • [JavaScript] Animation.Cube - サイコロ回転エフェクト (rotating cube animation)

    Kawa.netxp [JavaScript] Animation.Cube - サイコロ回転エフェクト (rotating cube animation) Animation.Cube クラスは、JavaScript のみでサイコロ回転風の アニメーションエフェクト(rotating cube animation)を実現するライブラリです。 事前に画像ファイルを加工(拡大縮小や分割処理)せず、JavaScript のみで リアルタイムにアニメーション処理を行います。 2画像の切替えエフェクト処理用、または、 サイコロの4面に貼り付けた画像をループで回転させるような処理に利用できます。 画像の拡大縮小処理が入っているため、 ラスタスクロール よりもマシン負荷が高いようです。 Opera だと少しスムーズなようです。 画像サイズを抑えれば、Celeron 2.4GHz 機でも十分に回転してく

    nitoyon
    nitoyon 2006/04/24
    同じ画像のIMGをサイズを変えて表示して3Dに見せている。強引すぎてかっこいい。
  • for 文 2.0(笑) - IT戦記

    まぁ、かなり知られてる話ですが JavaScript は .(ドット) の計算がかなり遅い。まぁ、簡単なスクリプトなら問題にならないが。web2.0的には大違いなのであります。ちなみに、.(ドット) の計算に比較演算の 3 倍のコストがかかる(IEはとくに)。 ということで、for 文は下のように(比較に .(ドット) を使わない)書くくせをつけましょう。地道な差が大きなパフォーマンスを生みます。 // for 文 2.0 for(var i = 0, len = array.length; i < len; i++) { .... }各種ライブラリの for 文 1.0 を for 文 2.0 化するだけで、CPU 使用率がけっこう下がりました。 予断ですが、間違っても .(ドット) を避けるために with 文を使うようなことはやめてください。 with 文のコストは 比較演算の 8

    for 文 2.0(笑) - IT戦記
    nitoyon
    nitoyon 2006/01/29
    .を使う回数を減らして高速化。
  • 1