タグ

データ構造とalgorithmに関するlizyのブックマーク (2)

  • d.y.d. 2倍だけじゃない

    10:01 10/07/20 それでも2倍だ 先日のvectorの伸長度合いの記事に関して 当に1.5倍のほうがメモリ効率がよいのか という反応をいただきました。とても興味深い。みんな読みましょう。 自分の理解メモ: 「再利用ができるから嬉しい」等の議論をするなら、 今までに確保したメモリ (1 + r^1 + ... + r^k) のうち、 有効に使えてるメモリ r^{k-1} (バッファ拡大直後) や r^k (次のバッファ拡大直前) の割合で評価してみようじゃないかという。 まず簡単のために再利用をしない場合を考えると、この割合はそれぞれ (r-1)/r^2、 (r-1)/r になります(途中計算略)。 この利用率が最悪になる瞬間 (r-1)/r^2 を最善にしよう、 という一つの指標で考えてみると、式を微分なりなんなりしてみると r = 2 で最大(25%)となることがわかります

  • ソースでわかる!ハッシング

    これまでの2回で、増減するデータを格納して検索するための方法を2つ紹介しました。1つはリスト構造(linked list)、もう1つは二分探索木(binary search tree)です。 この2つは、配列に対する線形探索(linear search)と二分探索(binary search)と同様の探索性能があることを示しました。アルゴリズム性能を表すオーダーOで表すと、それぞれO(n)とO(log2(n))です。 今回は、O(1)である方法を紹介します。今回もプログラムを使いながら見てみましょう。プログラムはこちら(http://www.thinkit.co.jp/images/article/159/3/15931.zip)からダウンロードできます(15931.zip/2 KB)。 アルゴリズム性能がO(1)であるとは、「いつでも一定の時間でアルゴリズムが停止する」ということです。探

  • 1