Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

データ構造とは? わかりやすく解説

Weblio 辞書 > 固有名詞の種類 > 方式・規則 > 主義・方式 > 学問 > 学問 > データ構造の意味・解説 

データ構造

読み方でーたこうぞう
【英】:data structure

概要

与えられデータを, 計算高速化のために構造もたせて記憶する手法総称. 目的合わせ, あるいくつかの機能を, 高速, あるいは省メモリ行えるよう設計される. 例えば, ある言葉n \, 個の言葉辞書データから検索するとき, 通常の配列では, 最悪挿入削除O(n) \,, 検索O(\log n) \, か, 挿入削除O(1) \,, 検索O(n) \,時間要する. 二分探索木というデータ構造は, これらの機能O(\log n) \, 時間行い, 使用メモリO(n) \, である.

詳説

 データ構造とは, 与えられデータに対して, そのデータ使った計算高速化, そのデータ記憶するために必要な領域減少等の目的で, データ構造持たせ, データ対す操作効率化を行う手法総称である. あるいくつかの機能を, データ記憶形式と, その形式データ操作するアルゴリズムにより実現する.

 通常のコンピューター言語では, データ蓄え手法として配列リスト, またはその両方用意されている. 配列指定した位置にあるデータ\mbox{O}(1)\, 時間アクセスでき, リスト与えられデータ並べて記憶し, 隣のデータ\mbox{O}(1)\, 時間アクセスできる. リスト配列により実現可能だが, リスト配列実現できない.

 配列リストは最も単純なデータ構造である. ここで両者使ったデータ構造の性能違い見てみよう. 例として n\, n\, 列の行列 M\, 保持し, 他の行列との掛け算を行うためのデータ構造を考える. 通常の配列使用して行列記憶する場合 \mbox{O}(n^2)\, メモリが必要であるが, もし M\, の非要素の数 H\, 小さ場合, 非要素連結してリストで持つことにより, 記憶容量\mbox{O}(H)\, まで減少させることができる. 行列掛け算は非要素に関する部分だけ計算行えばよいので, 計算時間2つ行列の非要素の数の積に比例する. しかし, リストは一要素記憶するのに必要なメモリ配列比べて大きいので, 非要素が多い場合リストのほうが遅く, メモリ多くなる.

 次に, n\, 個の用語の辞書データ保持し, その中から与えられた用語を検索するためのデータ構造を考える. データ変更がないときは, 用語を辞書順並べて記憶すれば, 二分探索により\mbox{O}(\log n)\, 時間1つの用語が検索できる. しかし, 辞書データの中の用語を削除する新しい用語を追加する, という操作必要な場合には, 通常平均的に\mbox{O}(n)\, 時間要する. 辞書順並べかわりに, 二分探索木 (AVL木, 2-3木など) というデータ構造を用いれば, 使用メモリ\mbox{O}(n)\, のままで, これらの操作実行時間\mbox{O}(\log n)\, まで減らすことができる. このようにデータ動的な変化に対して効率良く操作が行えるよう設計されたデータ構造を動的データ構造という. 辞書データを扱う他の効率良いデータ構造としてはハッシュ表知られている.

 動的データ構造の中で最も基礎的なものとしてはヒープ挙げられる. 基本的なヒープは, n\, 個の要素の中の最小値を得る・要素追加削除するという操作を, 1回あたり\mbox{O}(\log n)\, 時間実行し, またメモリ使用量\mbox{O}(n)\, である. 応用広く, プリム法 (最小木問題アルゴリズム), 最少費用フロー問題 (最小費用問題) のアルゴリズムなどで使用される. また, 改良版の Fヒープ (フィボナッチヒープ) は, 最短路問題を解くアルゴリズム使われている. その他, n\, 個の区間集合保持し, 質問点を含む区間列挙する, 区間挿入削除を行う, などの操作1回あたり \mbox{O}(\log n)\, 時間で行う区分木, 大きさ n\, 木構造グラフ対し, 合併分割変形・ある頂点の子孫数を求める, など多く操作\mbox{O}(\log n)\, 時間で行う動的木, 集合合併要素探索高速化し, n\, 回の合併m\, 回の探索合計時間がほぼ \mbox{O}(m+n)\, となる集合ユニオン・ファインド木, 動的に変化する有向グラフ強連結性を保持し, k\, 回の挿入削除\mbox{O}(kn^{1.3})\, で行うデータ構造[7], など数多くのものが考案されている. 文字列グラフを扱う離散アルゴリズム多くは, これらの基礎的なデータ構造に手を加えたものを使用することにより高速化されている. また, アルゴリズム動作記録変換して保持し, パラメーター変更による計算結果変化出力するデータ構造は動的計画, 組み合わせ最適化問題感度分析などに応用が広い.

 データ構造, 特に動的データ構造は, 計算幾何学における発展著しい. 幾何的データデータの量に対して構造複雑なものが多い. 例えば, 平面上の n\, 点の集合対し, 距離が d\, 以下の2点つないだグラフ(幾何グラフ)を考える. このグラフO(n^2)\, 本のを含む可能性があるが, このグラフ記憶するには点集合だけ記憶すれば十分である. つまり, メモリ計算時間省略するためには, 点集合データから必要な情報を得るための構造が必要となる. また, 交差など, グラフ的な情報からは導けないものもあり, それらの情報効率的に得るためにもデータ構造はかかせない. 幾何的なデータ構造としては, 平面上のn\, 点集合凸包保持し, 点の追加消去対し新し凸包\mbox{O}(\log n)\, 時間求めるもの, k\, 次元n\, 点集合対し, 質問点から近い順に点を1個あたり平均 \mbox{O}(1)\, 時間出力する k-d\, 木, 質問領域中に含まれる点を1個あたり \mbox{O}(\log^{k-1} n)\, 出力するレンジサーチ木 [8], 平面いくつかの領域分割する n\, 本の線分集合与えられたとき, 質問点がどの領域含まれるかを \mbox{O}(\log n)\, 時間答え領域探索などが挙げられる. その他に, 線分集合対し, ある点から見える点, すなわち2点をつなぐ線分が他の線分交差しないような点集合保持するデータ構造など, 交差, 領域に関してさまざまなデータ構造が考案されている.

 前述幾何的なデータ構造は, 幾何的対象を扱う計算幾何学アルゴリズム多く使われている. 多角形の三角形分割線形時間アルゴリズムなども高度な技術用いてデータ構造を活用しているが, しかしその反面複雑になりすぎ, 現実的ではないという欠点がある. また, 個々アルゴリズム使用するデータ構造がそのアルゴリズム特化した, 一般性のないアルゴリズムとデータ構造少なくない. それゆえ, 最近では簡素化視野入れた研究進んでいる. スパーシフィケイション [6] もその一つであり, 動的データ構造高速化一般化した技術提供している. スパーシフィケーションにより, n\, 頂点 m\, を持つ無向グラフ最小張木保持するデータ構造は, 1回追加削除重み変化対す計算時間が, \mbox{O}(m^{1/2})\, から\mbox{O}(n^{1/2})\, 高速化される. また同様にグラフ二部グラフ性の判定, 二連結性の判定, 頂点連結性判定なども, 一回操作計算時間\mbox{O}(m)\, から \mbox{O}(n)\, 高速化される.

 最後に参考文献挙げる. 動的木などグラフ的なデータ構造は [3], [4], [5] 等に詳しい. また, 幾何的データ構造については [1], [2] 等が詳しい.



参考文献

[1] F. P. Preparata and M. L. Shamos, "Computational Geometry - An Introduction," Springer-Verlag, 1985. 浅野孝夫, 浅野哲夫 訳,『計算幾何学入門』, 総研出版, 1992.

[2] 今井浩, 今井圭子,『計算幾何学』, 共立出版, 1994.

[3] T. H. Cormen, C. E. Leiserson and R. L. Rivest, "Introduction To Algorithms," The MIT Press, 1990. 浅野哲夫, 岩間和生, 尾博司, 山下雅史, 和田幸一 訳,『アルゴリズムイントロダクション 1,2,3巻』, 近代科学, 1995.

[4] 浅野孝夫,『情報構造 上, 下』, 日本評論社, 1994.

[5] 茨木俊秀,『アルゴリズムとデータ構造』, 昭晃堂, 1989.

[6] D. Eppstein, Z. Galil, G. F. Italiano, A. Nissenzweig "Sparsification - A Technique for Speeding up Dynamic Graph Algorithms," FOCS, 33, 1992

[7] S. Khanna, R. Motwani and R. H. Wilson, "On Certificates and Lookahead in Dynamic Graph Problems," SODA, 1995

[8] D. E. Willard "New Data Structures for Orthogonal Range Queries," SIAM Journal on Computing, 14 (1985), 232-253.


データ構造

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/11/20 19:35 UTC 版)

二分木のデータ構造
ハッシュテーブルのデータ構造

データ構造(データこうぞう、: data structure)とは、コンピュータプログラミングでの、データの集まりの形式化された構成である。格納された各データの参照や修正といった管理を容易にするための構成である[1][2][3][4][5]。一定の関係性を持たせたデータ型のコレクションであり、データ値に適用するための関数手続きも格納されることがある[6]。データの代数的構造とも言われる。

概要

ソフトウェア開発において、データ構造についてどのような設計を行うかは、プログラムアルゴリズム)の効率に大きく影響する。そのため、さまざまなデータ構造が考え出されている。多くのプログラムの設計において、データ構造の選択は主要な問題である。これは大規模システムの構築において、実装の困難さや質、最終的なパフォーマンスはベストのデータ構造を選択したかどうかに大きく依存してきたという経験の結果である。

多くの場合、データ構造が決まれば、利用するアルゴリズムは比較的自明に決まる。しかし場合によっては、順番が逆になる。つまり、与えられた仕事をこなす最適なアルゴリズムを使うために、そのアルゴリズムが前提としている特定のデータ構造が選択される。いずれにしても適切なデータ構造の選択は極めて重要である。この洞察は、多くの定式化された設計手法やプログラミング言語において、データ構造がアルゴリズムよりもキーとなる構成要素となっていることに現れている。大半の言語は異なるアプリケーションにおいてデータ構造を安全に再利用できるよう、実装の詳細をインターフェースの背後に隠蔽するような、モジュール化のしくみを備えている。C++Javaといったオブジェクト指向プログラミング言語はクラスをこの目的に用いている。

データ構造は専門的な、あるいは非専門的な(すなわち、あらゆる)プログラミングにとって非常に重要なので、C++におけるSTLや、Java API、および.NET Frameworkのようなプログラミング言語の標準ライブラリや環境において多くのデータ構造がサポートされている。データ構造が実装を表すのかインターフェースを表すのかについてはいくらか議論がある。どのように見えるかは相対的な問題なのかもしれない。データ構造は2つの関数の間にあるインターフェイスとして見ることもできるし、データ型に基づいて構成されたストレージにアクセスする方法を実装したものとして見ることもできる。

脚注

  1. ^ Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford (2009). Introduction to Algorithms, Third Edition (3rd ed.). The MIT Press. ISBN 978-0262033848. https://dl.acm.org/citation.cfm?id=1614191 
  2. ^ Black, Paul E. (15 December 2004). “data structure”. In Pieterse, Vreda; Black, Paul E.. Dictionary of Algorithms and Data Structures [online]. National Institute of Standards and Technology. https://xlinux.nist.gov/dads/HTML/datastructur.html 2018年11月6日閲覧。 
  3. ^ "Data structure". Encyclopaedia Britannica. 17 April 2017. 2018年11月6日閲覧
  4. ^ ゴンザロ・ナバロ:「コンパクトデータ構造 実践的アプローチ」、講談社サイエンティフィク、(2023年7月26日)、ISBN 978-4-06-512476-5
  5. ^ 定兼邦彦:「簡潔データ構造」、共立出版、ISBN 978-4-320-12174-4 (2018年2月25日)
  6. ^ Wegner, Peter; Reilly, Edwin D. (2003-08-29). Encyclopedia of Computer Science. Chichester, UK: John Wiley and Sons. pp. 507–512. ISBN 978-0470864128. http://dl.acm.org/citation.cfm?id=1074100.1074312 

関連項目


データ構造

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2018/07/22 02:07 UTC 版)

ハッシュライフ」の記事における「データ構造」の解説

一般にライフゲームの(理論上の)フィールド無限に広い格子である。扱いやすさなどのために、多く場合、その格子点縦横整数付番し、原点すなわち (0, 0) の近く有限個の「生存セルによるパターンがあるものとし、残りの無限の部分を無限個の非生存セルとする。以上は理論的な観点からの話だが、実装では、生存しているセルがある付近十分にカバーできる情報があれば良いハッシュライフでは、1辺が2の冪乗個のセル正方形領域を、縦横それぞれ2等分する四分木構造再帰フィールド表現する。この時、その範囲内のフィールドの状態にもとづくハッシュ値キーにしたハッシュテーブル併用し、全く同じ状態のフィールドであれば四分木構造における部分木を共有する(すなわち、実際には木ではなくDAGとなっている)。このようなハッシュハッシュテーブル)を利用した効率化を図るものであることから、その名がある一般的なライフゲームアプリケーションソフトエンジンとして利用するには、全盤面1世代後を得る手続き実装する必要もあるが、少々煩雑な部分があるのでここでは省略する。以下で述べ高速化についても、概要のみとする。 ここで、木の深さ0で一辺が1セルとする。規則的再帰的四分木構造により、深さ1では一辺が2セル正方形深さ2では一辺が4セル……というようにして、深さkの木は一辺2k個のセルからなる22k個のセル正方形あらわしている(前述のように具体的にDAG実装する)。周辺との干渉があるから、「その領域全体未来の状態」のメモ化不可能である。1辺が4セルの時、その中央の2x2の領域1世先の状態については確定的なのでメモ化できる。そして、8x8の領域に対して中心4x4領域2世先の状態、16x16の領域に対して中心8x8の領域4世先の態というように、倍々で、より未来世代メモ化が可能であり、また、効率的に計算するともできるというのが急所である。一般に、木の深さkで、中心にある2k-1x2k-1個のセル正方形領域の2k-2世代先をメモ化できる。この「メモ」の範囲その未来世代は、ライフゲームの「光速」によって、その世代における結果確定的であることから、うまく機能するということ言えるハッシュライフ著し利点として、このメモ化利用により、例え動作数万世代超えるような巨大なパターンについて、何世代スキップさせつつ、その後結果のみを迅速に得ることができる。

※この「データ構造」の解説は、「ハッシュライフ」の解説の一部です。
「データ構造」を含む「ハッシュライフ」の記事については、「ハッシュライフ」の概要を参照ください。

ウィキペディア小見出し辞書の「データ構造」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ

「データ構造」の例文・使い方・用例・文例

Weblio日本語例文用例辞書はプログラムで機械的に例文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。



データ構造と同じ種類の言葉


固有名詞の分類


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「データ構造」の関連用語

データ構造のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



データ構造のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本オペレーションズ・リサーチ学会日本オペレーションズ・リサーチ学会
Copyright (C) 2024 (社)日本オペレーションズ・リサーチ学会 All rights reserved.
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのデータ構造 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaのハッシュライフ (改訂履歴)、隣接行列 (改訂履歴)、データモデル (改訂履歴)、GNU Octave (改訂履歴)、FIFO (改訂履歴)、Icon (改訂履歴)、ビットプレーン (改訂履歴)、Apple event (改訂履歴)、Pure Data (改訂履歴)、GLib (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。
Tanaka Corpusのコンテンツは、特に明示されている場合を除いて、次のライセンスに従います:
 Creative Commons Attribution (CC-BY) 2.0 France.
この対訳データはCreative Commons Attribution 3.0 Unportedでライセンスされています。
浜島書店 Catch a Wave
Copyright © 1995-2024 Hamajima Shoten, Publishers. All rights reserved.
株式会社ベネッセコーポレーション株式会社ベネッセコーポレーション
Copyright © Benesse Holdings, Inc. All rights reserved.
研究社研究社
Copyright (c) 1995-2024 Kenkyusha Co., Ltd. All rights reserved.
日本語WordNet日本語WordNet
日本語ワードネット1.1版 (C) 情報通信研究機構, 2009-2010 License All rights reserved.
WordNet 3.0 Copyright 2006 by Princeton University. All rights reserved. License
日外アソシエーツ株式会社日外アソシエーツ株式会社
Copyright (C) 1994- Nichigai Associates, Inc., All rights reserved.
「斎藤和英大辞典」斎藤秀三郎著、日外アソシエーツ辞書編集部編
EDRDGEDRDG
This page uses the JMdict dictionary files. These files are the property of the Electronic Dictionary Research and Development Group, and are used in conformance with the Group's licence.

©2024 GRAS Group, Inc.RSS