Post

Algorithm

2019-12-04 22:30:37

アルゴリズムとデータ構造 - ハッシュテーブル

概要アルゴリズム図鑑を参考に、アルゴリズムとデータ構造を学ぶ。 実装はgithub - bmf-san/road-to-algorithm-masterにも置いてある。 ハッシュテーブル ハッシュ値を添え字とした配列 ハッシュの衝突処理 開番地法 衝突が生じた際に、ハッシュ関数とは別の関数を使って別の番地を求める方法。 連鎖法 衝突が生じても新しい番地を求めずに、衝突した番地に衝突したキー同士をポインタでつないだリンクリストを格納することで対応する方式。 計算時間データへのアクセス O(1) 添字を使ってランダムアクセスが可能。 データの追加 O(1) 配列の場合は、線形探...

プログラミング

Algorithm Data structure hash table

2019-11-17 15:30:27

アルゴリズムとデータ構造 - キュー

概要アルゴリズム図鑑を参考に、アルゴリズムとデータ構造を学ぶ。 実装はgithub - bmf-san/road-to-algorithm-masterにも置いてある。 キュー 常に先に追加されたデータからしかアクセスできないようにデータを一列に並べた構造 スタックとは追加と削除の方向が逆になる。 FIFO(First In First Out) 先入れ先出し 待ち行列ともいう。 データの追加をenqueue、削除をdequeueという。 計算時間配列や連結リストなど実装形式による。 実装package main // Queue is a queue. type Queue st...

プログラミング

Algorithm Data structure queue

2019-11-17 15:28:54

アルゴリズムとデータ構造 - スタック

概要アルゴリズム図鑑を参考に、アルゴリズムとデータ構造を学ぶ。 実装はgithub - bmf-san/road-to-algorithm-masterにも置いてある。 スタック 常に最新のデータからしかアクセスできないようにデータを一列に並べた構造 LIFO(Last In First Out) 後入れ先出し 常に最新のデータへアクセスしたいときに便利な構造 データの追加をPush、削除をPopという。 他にDup、Peek、Swap(またはExchange)、Rotateといった操作がある。 cf. Wikipedia - スタック 計算時間配列や連結リストなど実装形式に...

プログラミング

Algorithm Data structure stack

2019-11-02 20:47:49

アルゴリズムとデータ構造 - 配列

概要アルゴリズム図鑑を参考に、アルゴリズムとデータ構造を学ぶ。 実装はgithub - bmf-san/road-to-algorithm-masterにも置いてある。 配列 データを1列に並べたもの データへのアクセスは容易だが、追加や削除には時間がかかる 配列のデータはメモリの連続した領域に順番に格納される 固定長のメモリを確保する 宣言時に確保(静的確保) 実行時に確保(動的確保) 計算時間配列に格納されているデータ数をnとする。 データへのアクセス O(1) メモリアドレスが添字を使って計算することができるため、データに直接アクセスすることができる。(ランダムアクセス)...

プログラミング

Algorithm Data structure array

2019-10-18 01:54:54

アルゴリズムとデータ構造 - リスト

概要アルゴリズム図鑑を参考に、アルゴリズムとデータ構造を学ぶ。 実装はgithub - bmf-san/road-to-algorithm-masterにも置いてある。 リスト(線形リストの片方向リスト) データを一直線上に並べた構造 各ノードは次のノードへのポインタを持つ データの追加や削除は容易だが、アクセスには時間がかかる リストでは、データは連続したメモリ領域に格納される必要はない 一般的には離れた領域に格納される 計算時間リストに格納されているデータ数をnとする。 データへのアクセス O(n) データの先頭から順次アクセス(シーケンシャルアクセス)する必要があるため、線形時...

アルゴリズムとデータ構造

Algorithm Data structure linked list singly linked list

2019-09-25 09:36:59

A Trie implementation in Golang

概要トライ木のアルゴリズムと実装についてかく。 bmf-san/road-to-algorithm-master  トライ木とはトライ木(プレフィックス木ともいう。英語はそれぞれ、trie、prefix tree)は文字列の集合を扱う木構造の一種。 各ノードは単一または複数の文字列あるいは数値を持ち(ノードは必ずしも値を持つ必要はない)、根ノードから葉に向かって探索して値をつなげていくことで単語を表現する。 ネットワークのレイヤーならIPアドレスの探索、アプリケーションレイヤーならhttpのルーティングに、機械学習とかの文脈であれば形態素解析といったところでトライ木の応用が見受けられる。 言葉...

プログラミング

Golang Algorithm prefix tree trie

2019-03-24 21:58:28

URLルーティングをつくる エピソード3(完結編)

概要URLルーティングをつくる エピソード1 とURLルーティングをつくる エピソード2 でURLルーティングの自作について試行錯誤の過程を記してきたが、ようやく一段落させることができたので完結編という形で締括くりたい。 完結、といっても課題はいくらでもあるし突き詰めるとこればっかりに時間をかけることができるようなモノであるということは承知している。。。 前回までの話しエピソード1 では、ルーティングのデータ構造を考えたり、とりあえず手を動かして実装のイメージを掴もうとした。(動くところまで持っていけなかった。。。) エピソード2では、データ構造を見直したり、参考になりそうなリポジトリを漁って...

プログラミング

PHP URLルーティング HTTP Algorithm 木構造

2019-01-09 02:20:08

URLルーティングをつくる エピソード2

概要URLルーティングをつくる エピソード1の続き。 とりあえず動く形のものを仕上げてpackagist - ahi-routerという名前でパッケージ公開した。 エピソード1からの変更点エピソード1では、データ構造に木構造を採用してルーティングを作ろうというと試みた。 パフォーマンスが考慮されているライブラリでは、木構造を生成するロジックを用意して、最適化された探索アルゴリズムを実装するような形になっているようだが、木構造を生成するロジックをかくのはめん(ry 時間がかかりそうだったので、探索部分だけ頑張る方向性でやってみることにした。 前回はルーティング定義のデータ構造を、 <?ph...

プログラミング

HTTP URLルーティング Algorithm 木構造

2018-12-19 02:38:10

URLルーティングをつくる エピソード1

URLルーティングをつくる エピソード1概要以前、Reactで非常に軟弱なルーティング(cf. ReactとHistory APIを使ってrouterを自作する)を作ったが、改めてそこそこにちゃんとしたルーティングを自作したいと思い、挑戦することにした。きっかけは、最近触っているGolangだ。Golangでは標準ライブラリを駆使することでアプリーケーションをうすーく実装できるようだが、ルーティング周りは標準ライブラリがパワー不足なのものあって、外部のライブラリに依存するケースが多いらしい。そんなこともあってルーティングを自作できるようになるとGolangでもそれ以外でもルーティングを自前で用...

プログラミング

HTTP Algorithm URLルーティング 木構造

2018-07-17 01:05:15

JavaScriptで始めるアルゴリズム

概要JavaScriptでアルゴリズムを学ぶ。 サーチのアルゴリズムリニアサーチリストや配列のデータに対して、先頭から順番に比較を行っていくアルゴリズム。 配列の長さ分処理を繰り返し、目的のデータに到達したら処理を終了する。目的とするデータが後ろにあるほど処理が遅くなる。 const targetData = 5; const data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; (function () { for (let i = 0; i < data.length; i++) { if (targetData == data[i])...

プログラミング

Algorithm バイナリーサーチ リニアサーチ バブルソート セレクションソート