タグ付けされた質問 「data-structures」

ソフトウェアアプリケーション内でのデータの効率的な保存と表現に関する質問。

2
「レッド/ブラックツリー」という用語はどこから来たのですか?
A レッド/ブラックツリーは平衡二分探索木を実装する1つの方法です。それがどのように機能するかの原理は私には理にかなっていますが、選択した色はそうではありません。他の色や属性一般とは対照的に、なぜ赤と黒なのでしょうか?「赤と黒」と聞くと、最初に頭に浮かぶのはチェッカーボードとレミゼラブルです。どちらもこの文脈では特に当てはまるとは限りません。

10
アルゴリズムとデータ構造を学習するにはどうすればよいですか?[閉まっている]
これは、アルゴリズムとデータ構造を学習する必要があるかどうかを尋ねた前回の質問の続きです。はい、そうです。 今、私は、実験によって、または実際に、またはどんな課題においても、それを学ぶ機会を得られない環境で働いています。適切な本、適切な問題、アルゴリズムやデータ構造を学習するために6か月、1、2年に渡る適切なリソースなど、適切なアプローチとは何ですか?また、問題をデータ構造とアルゴリズムに関連付けることができるように私の心を形成します。

8
プログラミングでDAG(Directed Acyclic Graph)を使用する場合
私は最近ectoという名前のフレームワークを見つけました。 このフレームワークでは、「plasm」という名前の基本コンポーネントは、ecto Directed Acyclic Graphです。ectoでは、plasmはectoスケジューラーで操作できます。 このメカニズムの利点は何ですか、また他のどのような状況でDAGの概念を活用できますか?

12
プログラマーと呼ばれるアルゴリズムとデータ構造を理解する必要がありますか?[閉まっている]
私がコーディングを始めてから6年が経ちました。ActionScript、JavaScript、Java、PHP、Ajax、XML HTML、ASPなどのあらゆる種類のコードにコーディングします。配列、マップ、リンクリスト、セットなどを使用しました。しかし、インタビューを受けるたびに、人々はハッシュ、ツリー、スタック、キューについて質問する可能性が非常に高いです。いくつかのソートアルゴリズムのジャグリングに関する質問があります。私は本当にそれらを知るべきなのか、それとも自分をプログラマーと呼ぶのをやめるべきなのかわかりません。これらすべての質問をしている人が私を選んだとしても、私にこれらの仕事をさせてくれることは決してありません。私は本当にこれらすべてを知る必要がありますか?

2
PHP:いつ配列を使用し、ほとんどのデータを保存するコード構成にオブジェクトを使用するのですか?
PHPは混合パラダイム言語であり、配列などの非オブジェクトデータ型を使用して返すことができます。特定の状況でどのプログラミング構成を使用するかを決定する際に、配列とオブジェクトの選択に関するいくつかのガイドラインを明確にしようとする質問を投げかけます。 これは、PHP言語の構造を使用してデータをエンコードする方法と、データの受け渡しの目的(つまり、サービス指向アーキテクチャまたはWebサービス)で他の方法を選択する可能性が高い場合についての質問です。 例 {cost、name、part_number、item_count}で構成されるアイテムタイプがあるとします。プログラムでは、そのようなアイテムタイプをいくつか表示する必要があります。ここでは、各アイテムタイプを保持する外部コンテナとして配列を使用することにします。[PHP ArrayObjectをオブジェクト指向パラダイムに使用することもできますが、私の質問はその(外部)配列に関するものではありません]。私の質問は、アイテムタイプデータをエンコードする方法と、使用するパラダイムについてです。PHPでは、PHP Native Arraysまたはを使用できますPHP Objects。 このようなデータは、次の2つの方法でエンコードできます。 //PHP's associative arrays: $ret = array( 0 => array( 'cost' => 10.00, 'name' => 'item1', 'part_number' => 'zyz-100', 'item_count' => 15 ), 1 => array( 'cost' => 34.00, 'name' => 'item2', 'part_number' => 'abc-230', 'item_count' => 42 ), ); 対 //here …

3
ヒープと優先度キューの違い
私は常に、ヒープと優先度キューは同義語であると考えていました- insert、findMinおよびdeleteMin操作をサポートする抽象的なデータ構造。 たとえば、Chris OkasakiのPurely Functional Data Structures(第3章)など、いくつかの文献が私と一致しているようです。 一方、ウィキペディアのヒープページでは、ツリーベースのデータ構造として定義されており、ヒープは優先キューの具体的な実装であると述べています。 私は、これを複数のヒープ実装(左翼ヒープ、二項ヒープ、スプレイヒープ)を考えることができるという事実と調和させるのに苦労しています... ヒープを異なるデータ構造で実装できるという単純な事実は、定義により、それが抽象データ構造であることを意味しませんか?そして、その場合、優先度キューと実際の違いはありますか?

5
多くのデータ構造に挿入するよりも、削除を実装するのが通常はるかに難しいのはなぜですか?
多くの(ほとんどの)データ構造の挿入よりも、削除の実装が通常はるかに難しい特定の理由を考えることができますか? 簡単な例:リンクリスト。挿入はささいなことですが、削除にはいくつかの特殊なケースがあり、それが非常に難しくなります。AVLやRed-blackなどの自己バランス型バイナリ検索ツリーは、痛みを伴う削除の実装の典型的な例です。 私はそれがほとんどの人々が考える方法に関係していると言いたい:私たちが物事を建設的に定義することはより簡単であり、それはうまく挿入を容易に導く。

10
C ++でベクターを介してリストを使用する意味は何ですか?
C ++リストとベクターを含む3つの異なる実験を実行しました。 中間に多くの挿入が含まれていた場合でも、ベクトルを使用したものはより効率的であることが証明されました。 したがって、質問:どの場合、リストはベクトルよりも意味がありますか? ほとんどの場合、ベクトルがより効率的であると思われ、それらのメンバーがどれだけ似ているかを考えると、リストにはどの利点が残っていますか? N個の整数を生成し、コンテナに入れて、コンテナがソートされたままになるようにします。挿入は、要素を1つずつ読み取り、最初の大きい要素の直前に新しい要素を挿入することにより、単純に実行されました。 リストを使用すると、ベクトルと比較して寸法が大きくなると屋根を通過します。 コンテナの最後にN個の整数を挿入します。 リストとベクトルの場合、時間は同じ桁数増加しましたが、ベクトルの場合は3倍高速でした。 コンテナにN個の整数を挿入します。 タイマーを開始します。 リストにはlist.sortを使用し、ベクターにはstd :: sortを使用してコンテナをソートします。タイマーを停止します。 繰り返しますが、時間は同じ桁で増加しますが、ベクトルでは平均で5倍速くなります。 引き続きテストを実行し、リストの方が良い例がいくつか見つかるかもしれません。 しかし、このメッセージを読んでいる皆さんの共同経験は、より生産的な答えを提供するかもしれません。 リストの使用がより便利だったり、パフォーマンスが向上したりする状況に出くわしたことがありますか?

4
抽象データ型とデータ構造
これらの用語を理解することは私にとって非常に困難です。私はグーグルで検索し、ウィキペディアで少し読みましたが、まだわかりません。私はこれまでのところ以下を決定しました: 抽象データ型は新しい型の定義であり、そのプロパティと操作を説明します。 データ構造は、ADTの実装です。多くのADTは、同じデータ構造として実装できます。 私が正しいと思うなら、ADTとしての配列は、要素のコレクションを意味し、データ構造として、それがメモリにどのように保存されるかを意味します。スタックはプッシュ、ポップ操作を備えたADTですが、アルゴリズムで配列として実装されたスタックを使用した場合、スタックデータ構造について言えますか?そして、なぜヒープはADTではないのですか?ツリーまたは配列として実装できます。

8
変数に小さいデータ型を使用してメモリを節約するのは良い習慣ですか?
C ++言語を初めて学んだとき、int、floatなどに加えて、これらのデータ型のより小さいバージョンまたは大きいバージョンが言語内に存在することを知りました。たとえば、変数xを呼び出すことができます int x; or short int x; 主な違いは、short intは2バイトのメモリを使用し、intは4バイトを使用し、short intの値は小さいことですが、これを呼び出してさらに小さくすることもできます。 int x; short int x; unsigned short int x; さらに制限されています。 ここでの私の質問は、プログラム内で変数が取る値に応じて別々のデータ型を使用するのが良い方法かどうかです。これらのデータ型に従って変数を常に宣言することは良い考えですか?

7
データベース上の文字列/レコードの非常に大きなリストをすばやく検索する方法
次の問題があります:200万件を超えるレコードを含むデータベースがあります。各レコードには文字列フィールドXがあり、フィールドXに特定の文字列が含まれるレコードのリストを表示します。各レコードのサイズは約500バイトです。 より具体的にするために、アプリケーションのGUIには、文字列を入力できるテキストフィールドがあります。テキストフィールドの上に、テキストフィールドの文字列に一致する(最初のN、たとえば100)レコードを表示するテーブルがあります。テキストフィールドに1文字入力または削除すると、テーブルの内容をその場で更新する必要があります。 適切なインデックス構造やキャッシュを使用してこれを行う効率的な方法があるのだろうか。上記で説明したように、クエリに一致する最初のN個のアイテムのみを表示します。したがって、Nが十分に小さい場合、データベースから一致するアイテムをロードすることは大きな問題ではありません。さらに、アイテムをメインメモリにキャッシュすると、検索が高速になります。 主な問題は、パターン文字列を指定して、一致するアイテムをすばやく見つける方法だと思います。DBMSの機能に依存することはできますか、それともインメモリインデックスを自分で構築する必要がありますか?何か案は? 編集 私は最初の実験を実行しました。レコードを異なるテキストファイルに分割し(ファイルあたり最大200レコード)、ファイルを異なるディレクトリに配置しました(1つのデータフィールドの内容を使用してディレクトリツリーを決定しました)。最終的に、約40000個のディレクトリに約50000個のファイルが作成されます。次に、Luceneを実行してファイルのインデックスを作成しました。Luceneデモプログラムを使用した文字列の検索は非常に高速です。分割とインデックス作成には数分かかりました。これは、クエリしたい静的なデータセットであるため、私にはまったく受け入れられます。 次のステップでは、Luceneをメインプログラムに統合し、Luceneから返されたヒットを使用して、関連するレコードをメインメモリにロードします。

8
辞書とリスト
それで私はDictionary<int, int>今日仕事に出くわしました。おそらくList<int>代わりにa を使用したので、これは私には奇妙に思えました。違いはありますか?一方の構造がもう一方の構造よりも優先されるユースケースがありますか?

5
数値範囲を保存する最も効率的な方法は何ですか?
この質問は、範囲を格納するために必要なビット数に関するものです。または、別の言い方をすれば、指定されたビット数に対して、保存できる最大範囲とその方法は何ですか? 0〜255の範囲内のサブ範囲を保存することを想像してください。 たとえば、45-74。 上記の例を2つの符号なしバイトとして保存できますが、そこには情報の冗長性が必要だと思います。2番目の値が最初の値よりも大きいことがわかっているため、最初の値が大きい場合は2番目の値に必要なビットが少なくなり、2番目の値が大きい場合は1番目の値に必要なビットが少なくなります。 どんな圧縮技術でも限界的な結果を生むと思うので、「1バイトに保存できる最大範囲はどれくらいですか?」と尋ねる方が良い質問かもしれません。これは、2つの数値を別々に保存することで達成可能な値よりも大きくする必要があります。 この種のことを行うための標準的なアルゴリズムはありますか?

7
データ構造とアルゴリズムに投資し続けるべきですか?[閉まっている]
最近では、データ構造とアルゴリズムに多額の投資をして、プログラミングのパズルを解こうとしています。 JavaとClojureを使用してコーディングと解決を試みています。 時間を無駄にしていますか?より深い知識(インとアウト)を獲得し、より迅速にそれらを使ってコーディングできるようにするために、既に知っているテクノロジーとフレームワークにもっと投資すべきですか? データ構造とアルゴリズムを研究することで、私はより良いプログラマーになるのでしょうか、それとも大学時代にのみ重要な科目になりますか?

3
構造体とstd :: pairの使用にはどのような違いがありますか?
私は経験が少ないC ++プログラマです。 を使用しSTL mapていくつかのデータを保存および操作したい場合、これらの2つのデータ構造アプローチの間に(パフォーマンスにも)意味のある違いがあるかどうかを知りたいと思います。 Choice 1: map<int, pair<string, bool> > Choice 2: struct Ente { string name; bool flag; } map<int, Ente> 具体的にはstruct、シンプルではなくを使用してオーバーヘッドがありますpairか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.