アルゴリズム

二分木検索とルーティングプロトコルを応用した相対的ソートアルゴリズムを考案した

概要 ルーティングプロトコルのリンクステートのような感じで、絶対的な数値を持たずに2つのノードを比較して相対的に距離を算出。 各ノードは、前方ノードへアクセスするための左に生える木と、後方ノードへアクセスするための右に生える木を持つ。 ノード…

Complement Naive BayesをPHPで実装した

アルゴリズムの理解を深める為、Rubyで書かれた実装をそのままPHPに移植してみた。 Complement Naive Bayes らしきものをRubyで書いた - 記録用 http://d.hatena.ne.jp/laughing/20101114/1289698415 frequency_of_word_by_class = array(); $this->number_o…

C言語でCRC32を計算してみた

バイナリデータから、4バイトのハッシュを生成する。 MD5やSHA1に比べてアルゴリズムが単純で速い。 データベースに文字列を入れる時に、その文字列のCRC32ハッシュをindexにすると検索が速い! って記事を見ていつかやってみようと思ってるけど、まだ実践投…

ソートアルゴリズムについて調べてみた

結構な量のソートアルゴリズムをやってみた。 ここら辺を参考に。 ソート - Wikipedia http://ja.wikipedia.org/wiki/%E3%82%BD%E3%83%BC%E3%83%88 ヒープソートは、かなり短くした。 可読性は酷いもんだ。 気が向いたら他のアルゴリズムも追記するかも知れ…

PHPで二分探索木やってみた

二分木構造で二分探索を行う。 多分こんな感じ。 削除が面倒臭いなぁ。 ソース data = $data; $this->left = null; $this->right = null; } } class BinaryTree { private $_root; // コンストラクタ public function __construct() { $this->_root…

PHPのMath関数を再発明してみた

言うまでもなくdankogai氏の1ヶ月位前のブログに触発されて。 普段から使うMath系の関数もあるけど、中で何をやってるのか知らなかったから再発明してみた。 乱数とX進数からX進数へ変換以外の関数は全て。 四角い車輪。 極力よく見かける公式とかに合わせた…

PHPでハッシュ探索やってみた

PHPでハッシュ探索(ハッシュ法)やってみた。 配列と連想配列の区別がないPHPでやっても意味ない気がするけど、とりあえずアルゴリズムが知りたかった。 ハッシュ関数はsha1を使用。 数字がでか過ぎたからgmp使った。 オープンアドレス法で、初期状態と削除済…

PythonでMD5を車輪の再開発してみた

やっと出来た。 なんか合わない…と思ったらunsigned intの最大値を超えてビット演算してた。 ソース #!/usr/local/bin/python # set encoding=utf-8 import math # define def F(x, y, z): return ((x & y) | (~x & z)) def G(x, y, z): return ((x & z) | (…

PythonでBase64を車輪の再開発してみた

Pythonの練習も兼ねて。 as3cryptoを参考に。 Pythonの場合StaticMethodにせず、直にdefを定義するべきだったのかな。 Base64 encode 3バイト入力して、6ビットずつに分割して、4バイトで出力する。 これで0〜63で表せる。 余ったら=を入れとく。 decode 4バ…

モジュロ演算やってみた

サマーウォーズ見た。 あれはうんこだった。 デジモンアドベンチャー ぼくらのウォーゲーム!と似てるとか、当時出来なかった事をやっただとか、細田氏の集大成だとかそんな風に聞いて期待してただけに残念。 ぼくらのウォーゲームの時は何もかもが新しく斬…