タグ

data structureに関するshiumachiのブックマーク (19)

  • Data Structure Visualization

    Currently, we have visualizations for the following data structures and algorithms: Basics Stack: Array Implementation Stack: Linked List Implementation Queues: Array Implementation Queues: Linked List Implementation Lists: Array Implementation (available in java version) Lists: Linked List Implementation (available in java version) Recursion Factorial Reversing a String N-Queens Problem Indexing

  • Python dictionary implementation – Laurent Luce's Blog

    This post describes how dictionaries are implemented in the Python language. Dictionaries are indexed by keys and they can be seen as associative arrays. Let’s add 3 key/value pairs to a dictionary: >>> d = {'a': 1, 'b': 2} >>> d['c'] = 3 >>> d {'a': 1, 'b': 2, 'c': 3} The values can be accessed this way: >>> d['a'] 1 >>> d['b'] 2 >>> d['c'] 3 >>> d['d'] Traceback (most recent call last): File "<s

    shiumachi
    shiumachi 2011/02/10
    Pythonにおける辞書の実装について書かれている。PythonというよりC言語の話
  • Data Structures Cheat Sheet | PDF | Applied Mathematics | Algorithms And Data Structures

  • 両端キュー - Wikipedia

    両端キュー(りょうたんキュー、英: double-ended queue)またはデック(英: deque)は、計算機科学における抽象データ型の1つで、先頭または末尾で要素を追加・削除できるキューである[1]。head-tail linked list とも。 deque を dequeue と書く場合もある。ただし、dequeue はキューから要素を取り出す操作(デキュー)も表すため、技術的な文書では避けるのが一般的である。 それでも、一部のライブラリや、アルフレッド・エイホ、ジョン・ホップクロフト、ジェフリー・ウルマンの書いた教科書 Data Structures and Algorithms でも dequeue という用語を使っている。 また、DEQ や DQ という記法もある。 両端キューはキューやFIFOとは異なる。キューやFIFOでは一方の端からのみ要素を追加し、もう一方の端か

    shiumachi
    shiumachi 2010/12/21
    "deque を dequeue と書く場合もあるが、dequeue はキューから要素を取り出す操作(デキュー)も表すため、技術的な文書では避けるのが一般的である"
  • Mapインターフェイスの実装クラスの違いを知る

    JavaのコアAPIに含まれるjava.util.Mapインターフェイスは、キーと値とのマッピングを表すデータ構造のためのインターフェイスです。同パッケージに含まれるListインターフェイスとともに、Javaプログラミングでは非常によく使われるインターフェイスといえるでしょう。 コアAPIには、このMapインタフェース実装クラスがいくつも用意されています。マップというデータ構造は、常にキーを通して値へのアクセスを行うものです。そのため、キーが許容する値やその格納方法などが、個々の実装を特徴付けるポイントになります。 マップの利用頻度は非常に多いだけに、コアAPIで使えるマップの種類を確認しておくのは、効果的なプログラミングへとつながります。ここでは、java.utilパッケージに含まれる5つのMap実装クラス、Hashtable、HashMap、TreeMap、IdentityHashMa

    Mapインターフェイスの実装クラスの違いを知る
  • MurmurHash - Wikipedia

    MurmurHash is a non-cryptographic hash function suitable for general hash-based lookup.[1][2][3] It was created by Austin Appleby in 2008[4] and is currently hosted on GitHub along with its test suite named 'SMHasher'. It also exists in a number of variants,[5] all of which have been released into the public domain. The name comes from two basic operations, multiply (MU) and rotate (R), used in it

    shiumachi
    shiumachi 2010/06/07
    "a non-cryptographic hash function suitable for general hash-based lookup"hadoopのハッシュのデフォルト値
  • Pregel: Google’s other data-processing infrastructure – Port twenty two

    Inside Google, MapReduce is used for 80% of all the data processing needs. That includes indexing web content, running the clustering engine for Google News, generating reports for popular queries (Google Trends), processing satellite imagery , language model processing for statistical machine translation and  even mundane tasks like data backup and restore. The other 20% is handled by a lesser kn

    Pregel: Google’s other data-processing infrastructure – Port twenty two
  • 区間木 - Wikipedia

    区間木またはインターバル木(英: Interval tree)は、区間を保持するための木構造のデータ構造の一種。計算幾何学のアルゴリズム。特に、指定された区間や点にオーバーラップする全ての区間を探すという問題を効率的に解くことができる。例えば、表示されている地図内に見えている全ての道路を求めるとか、3次元のシーンで見えている全てのオブジェクトを求めるといった用途に使われる。似たものに区分木(英: Segment tree, segtree)があるが別物である。 単純なケースとして、区間が互いにオーバーラップしないなら、単純な2分木で表すことができ、クエリにかかる時間は O(log n) となる。しかし、区間同士がオーバーラップするなら、始点でソートする場合と終点でソートする場合で順序が異なることになるので、挿入時に2つの区間をどう比較すべきかが問題となる。素朴な方法としては、同時に2つの木

    shiumachi
    shiumachi 2010/05/20
    "指定された区間や点にオーバーラップする全ての区間を探すという問題を効率的に解くことができる"
  • ゲーム木 - Wikipedia

    ゲーム木(ゲームき、英: game tree)は、組合せゲーム理論において、ゲームの盤面を有向グラフのノードで、手をエッジで表したものである。完全ゲーム木とは、ゲームの最初から指せる全ての手を含んだゲーム木である。なお、組合せゲーム理論ではない通常のゲーム理論の「ゲームの木」については展開型ゲームを参照。 三目並べの最初の2手のゲーム木 右図は、三目並べのゲーム木の最初の2レベル(あるいは2手)までを示したものである。ここでは、盤面を回転させたり反転させて同じになるものは等価としているため、最初の1手は3種類(中心、角、角と角の間)しかない。2手目は、1手目が中心の場合は2種類、そうでない場合は5種類ある。 完全ゲーム木の葉ノードの数をゲーム木複雑性(game-tree complexity)と呼び、そのゲームが最終的にどれだけの異なる盤面で終わるかを示している。三目並べのゲーム木複雑性は

    ゲーム木 - Wikipedia
    shiumachi
    shiumachi 2010/05/13
    "ゲームの盤面を有向グラフのノードで表し、手をエッジで表したもの"
  • グラフ (データ構造) - Wikipedia

    英語版記事を日語へ機械翻訳したバージョン(Google翻訳)。 万が一翻訳の手がかりとして機械翻訳を用いた場合、翻訳者は必ず翻訳元原文を参照して機械翻訳の誤りを訂正し、正確な翻訳にしなければなりません。これが成されていない場合、記事は削除の方針G-3に基づき、削除される可能性があります。 信頼性が低いまたは低品質な文章を翻訳しないでください。もし可能ならば、文章を他言語版記事に示された文献で正しいかどうかを確認してください。 履歴継承を行うため、要約欄に翻訳元となった記事のページ名・版について記述する必要があります。記述方法については、Wikipedia:翻訳のガイドライン#要約欄への記入を参照ください。 翻訳後、{{翻訳告知|en|Graph (abstract data type)|…}}をノートに追加することもできます。 Wikipedia:翻訳のガイドラインに、より詳細な翻訳の手

    グラフ (データ構造) - Wikipedia
  • グラフ理論 - Wikipedia

    グラフ理論(グラフりろん、英: Graph theory)は、ノード(節点・頂点、点)の集合とエッジ(枝・辺、線)の集合で構成されるグラフに関する数学の理論である。 グラフ(データ構造)などの応用がある。 グラフによって、様々なものの関連を表すことができる。 6つの節点と7つの辺から成るグラフの一例 例えば、鉄道や路線バス等の路線図を考える際には、駅(節点)がどのように路線(辺)で結ばれているかが問題となる一方、線路が具体的にどのような曲線を描いているかは質的な問題とならないことが多い。 したがって、路線図では駅間の距離や微妙な配置、路線の形状などがしばしば地理上の実際とは異なって描かれている。つまり、路線図の利用者にとっては、駅と駅の「つながり方」が主に重要な情報なのである。 このように、「つながり方」に着目して抽象化された「点とそれらをむすぶ線」の概念がグラフであり[1]、グラフがも

  • 隣接リスト - Wikipedia

    計算機科学において、隣接リストはグラフを表すデータ構造と密接な関係がある。隣接リスト表現では、各頂点について、1つの辺でその頂点とつながっている全ての他の頂点のリストを作る(これがその頂点の「隣接リスト」である)。例えば、ヴァンロッサムが示唆した表現では、各頂点とその隣接する頂点群の配列をハッシュテーブルで関連付ける[1]。これは隣接リスト表現のインスタンスの1つと考えられる。また、Cormen らの表現では、頂点の番号をインデックスとする配列に各頂点の隣接する頂点群の片方向リストへの参照を格納する[2]。 隣接リスト構造の問題点は、グラフの辺についてのデータ(例えば、長さ、コストなど)を格納する明確な場所がない点である。その解決策として、例えば Goodrich と Tamassia の著書では、よりオブジェクト指向的に隣接リスト構造を変形し、各頂点に接合する辺を表したオブジェクトのリス

    隣接リスト - Wikipedia
    shiumachi
    shiumachi 2010/05/12
    "単純な配列による隣接リスト実装をすると、無向グラフでは8eバイトのメモリを必要とする""一方、隣接行列では1カ所には1ビットで済むため、n2/8バイトしか要しない"
  • Topcoder

    Topcoder is a crowdsourcing marketplace that connects businesses with hard-to-find expertise. The Topcoder Community includes more than one million of the world’s top designers, developers, data scientists, and algorithmists. Global enterprises and startups alike use Topcoder to accelerate innovation, solve challenging problems, and tap into specialized skills on demand.

    Topcoder
    shiumachi
    shiumachi 2010/05/10
    基本的なデータ構造についての説明と、そのデータ構造を使って解けるTopCoderの過去問の紹介がある
  • kd木 - Wikipedia

    3次元のkd木。根セル(白)をまず2つの部分セルに分割(赤)し、それぞれをさらに2つに分割(緑)している。最後に4つのセルそれぞれを2つに分割(青)している。それ以上の分割はされていないので、最終的にできた8つのセルを葉セルと呼ぶ。黄色の球は木の頂点を表している。 kd木(英: kd-tree, k-dimensional tree)は、k次元のユークリッド空間にある点を分類する空間分割データ構造である。kd木は、多次元探索鍵を使った探索(例えば、範囲探索や最近傍探索)などの用途に使われるデータ構造である。kd木はBSP木の特殊ケースである。 kd木は、座標軸の1つに垂直な平面だけを使って分割を行う。BSP木では分割平面の角度は任意である。さらに一般的には、kd木の根ノードから葉ノードまでの各ノードには1つの点が格納される[1]。この点もBSP木とは異なり、BSP木では葉ノードのみが点(ま

    kd木 - Wikipedia
    shiumachi
    shiumachi 2010/01/05
    "k次元のユークリッド空間にある点を分類する空間分割データ構造である。kd木は、多次元探索鍵を使った探索(例えば、範囲探索や最近傍探索)などの用途に使われるデータ構造である。kd木はBSP木の特殊ケースである"
  • バイナリ空間分割 - Wikipedia

    バイナリ空間分割(バイナリくうかんぶんかつ、英: binary space partitioning、BSP)は、(N次元)空間の((N-1)次元)超平面での分割を再帰的に繰返し、何らかの目的に適したデータ構造を構築する手法である。3次元コンピュータグラフィックスへの応用では、シーンをBSP木(BSP tree)と呼ばれる木構造による表現に変換する。 元々は、画家のアルゴリズムのために、シーンを前処理しておくことで効率を向上させる手段として提案されたものである。つまり、あらかじめシーン中に存在する全てのポリゴンについて、ある1枚のポリゴンを「根」として、残りのポリゴンについて、そのポリゴンより表側にあるか、裏側にあるかという分類を再帰的に適用して、2分木に構成してしまえば(両側にまたがっている場合には分割してしまう)、描画する時には、画家のアルゴリズムであれば、各ポリゴンについてカメラ(視

    バイナリ空間分割 - Wikipedia
    shiumachi
    shiumachi 2010/01/05
    "空間を超平面で凸集合に再帰的に分割していく手法である。その分割により、シーンをBSP木(BSP tree)と飛ばれる木構造で表現できるようになる"
  • YAML - Wikipedia

    テキストのため可読である。その概念はXMLやプログラミング言語であるC、PythonPerlからきている。YAMLの原案はクラーク・エバンス[4]、ブライアン・インガーソン[5]、オーレン・ベンキク[6]が共同で出した。 YAMLは再帰的に定義された頭字語でありその語源は「YAML Ain't a Markup Language.」(→YAMLはマークアップ言語じゃない)である。初期には「Yet Another Markup Language」(→もうひとつ別のマークアップ言語)と言われていたが、マークアップよりもデータ重視を目的としていたために後付されてできた名前である。しかしながら XML(当のマークアップ言語)がデータシリアライズ目的のために頻繁に使用されるため、 YAMLを軽量マークアップ言語と考えることもできる。類似の規格としてJSONがある。

    YAML - Wikipedia
    shiumachi
    shiumachi 2009/04/08
    違うといわれてもML扱い
  • ブルームフィルタ - Wikipedia

    この項目では、確率的データ構造について説明しています。画像にぼかし効果を付加する画像フィルタについては「川瀬のブルームフィルター」をご覧ください。 ブルームフィルタ(英語: Bloom filter)は、1970年に Burton H. Bloom が考案した空間効率の良い確率的データ構造であり、あるデータが集合の要素である(集合に含まれている)かどうかの判定に使われる。ただし判定は正確ではなくて、含まれていないのに含まれていると誤って判定すること偽陽性(false positive)の可能性がある。しかし含まれているものを含まれていないと誤判定すること偽陰性(false negative)はない。なお集合に要素を追加することはできるが、集合から要素を削除することはできない(ただし、拡張をした counting filter であれば削除もできる)。集合に要素を追加していくにつれて偽陽性の

    ブルームフィルタ - Wikipedia
    shiumachi
    shiumachi 2008/08/25
    "空間効率の良い確率的データ構造であり、要素が集合のメンバーであるかどうかのテストに使われる。偽陽性による誤検出はあるが、偽陰性はない。追加はできるが、削除はできない"
  • 木構造 (データ構造) - Wikipedia

    この記事には参考文献や外部リンクの一覧が含まれていますが、脚注による参照が不十分であるため、情報源が依然不明確です。 適切な位置に脚注を追加して、記事の信頼性向上にご協力ください。(2023年1月) 木構造は、一般のグラフ構造と同様の、ノード(節点、頂点)とノード間を結ぶエッジ(枝、辺)あるいはリンクで表すこともできるが、木構造専用の、特に有向の根付き木となるような表現が使われることも多い。 データ構造として使われる木は、ほとんどの場合、根となるノードが決められた根付き木である。さらに、有向木であることも多い。[注 1] ノード間の関係は家系図に見立てた用語で表現される。木構造内の各ノードは、0個以上の子ノード (英: child node) を持ち、子ノードは木構造内では下方に存在する(木構造の成長方向は下とするのが一般的である)。子ノードを持つノードは、子ノードから見れば親ノード (英

    木構造 (データ構造) - Wikipedia
  • 1