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

データ構造は、データの特定のプロパティを効率的に照会および/または更新できるようにデータを編成する方法です。

18
Java:リストをマップに変換する方法
最近、私はJava に変換するListための最適な方法は何かMap、そうすることの特定の利点があるかどうかについて、同僚と会話しています。 最適な変換方法を知りたいので、誰かが私を案内してくれると本当にありがたいです。 これは良いアプローチですか? List<Object[]> results; Map<Integer, String> resultsMap = new HashMap<Integer, String>(); for (Object[] o : results) { resultsMap.put((Integer) o[0], (String) o[1]); }


14
.Netの優先度キュー[終了]
閉まっている。この質問はスタックオーバーフローのガイドラインを満たしていません。現在、回答を受け付けていません。 この質問を改善してみませんか?Stack Overflowのトピックとなるように質問を更新します。 3年前休業。 この質問を改善する 優先キューまたはヒープデータ構造の.NET実装を探しています 優先度キューは、新しい要素が任意の間隔でシステムに入ることができるため、単純なソートよりも柔軟性のあるデータ構造です。新しいジョブを優先度キューに挿入する方が、そのような到着ごとにすべてを並べ替えるよりもはるかにコスト効率が高くなります。 基本優先度キューは、3つの主要な操作をサポートしています。 Insert(Q、x)。キーがkのアイテムxを指定して、優先度キューQに挿入します。 Find-Minimum(Q)。優先度キューQの他のどのキーよりもキー値が小さいアイテムへのポインターを返します。 Delete-Minimum(Q)。キーが最小の優先キューQからアイテムを削除します 私が間違った場所を探しているのでない限り、フレームワークにはありません。誰かが良いものを知っていますか、それとも自分でロールすべきですか?

13
.NETデータ構造:ArrayList、List、HashTable、Dictionary、SortedList、SortedDictionary —速度、メモリ、およびそれぞれをいつ使用するか?
.NETには、多くの複雑なデータ構造があります。残念ながら、それらのいくつかは非常によく似ており、いつ使用するか、いつ使用するかは常にわかりません。私のC#とVisual Basicの本のほとんどは、ある程度それらについて語っていますが、実際には詳細には触れていません。 Array、ArrayList、List、Hashtable、Dictionary、SortedList、およびSortedDictionaryの違いは何ですか? どれが列挙可能ですか(IList-'foreach'ループを実行できます)?キーと値のペア(IDict)を使用するのはどれですか。 メモリフットプリントはどうですか?挿入速度は?検索速度は? 言及する価値のある他のデータ構造はありますか? 私はまだメモリ使用量と速度(Big-O表記)の詳細を探しています。


20
ネストされた辞書を実装する最良の方法は何ですか?
私は本質的にネストされた辞書に相当するデータ構造を持っています。次のようになっているとします。 {'new jersey': {'mercer county': {'plumbers': 3, 'programmers': 81}, 'middlesex county': {'programmers': 81, 'salesmen': 62}}, 'new york': {'queens county': {'plumbers': 9, 'salesmen': 36}}} さて、これを維持して作成することはかなり苦痛です。新しい州/郡/職業があるたびに、厄介なtry / catchブロックを介して下位層の辞書を作成する必要があります。さらに、すべての値を調べたい場合は、煩わしいネストされたイテレータを作成する必要があります。 次のように、タプルをキーとして使用することもできます。 {('new jersey', 'mercer county', 'plumbers'): 3, ('new jersey', 'mercer county', 'programmers'): 81, ('new jersey', 'middlesex county', 'programmers'): 81, ('new jersey', 'middlesex county', 'salesmen'): …

30
配列とリンクリスト
誰かがリンクされたリストを配列で使用したいのはなぜですか? リンクされたリストをコーディングすることは、間違いなく、配列を使用するよりも少し多くの仕事であり、何が追加の努力を正当化するのか疑問に思うかもしれません。 新しい要素の挿入はリンクされたリストでは取るに足らないことだと思いますが、これは配列の主要な作業です。リンクリストを使用して一連のデータを格納することと、配列に格納することには、他に利点がありますか? この質問は一般的なデータ構造に関係していますが、他の質問は特定のJavaクラスについて具体的に尋ねているため、この質問はこの質問の複製ではありません。

11
地図と辞書の違いは何ですか?
マップがキーを値にマップするデータ構造であることは知っています。辞書は同じではありませんか?地図と辞書1の違いは何ですか? 1.それらが言語XまたはYでどのように定義されているかを尋ねているのではなく(これは一般にSOでここで求められているようです)、理論の違いを知りたいです。

4
なぜ他のデータ構造の代わりに配列を使用するのですか?
私がプログラミングをしているとき、配列が他の形式よりも情報を格納するのに適している例を見たことがありません。私は確かに、プログラミング言語の追加された「機能」がこれを改善し、それによってそれらを置き換えたことを理解していました。それらが置き換えられるのではなく、いわば新しい命が与えられるようになりました。 では、基本的に、配列を使用する意味は何ですか? これがコンピュータの観点から配列を使用する理由ではなく、プログラミングの観点から配列を使用する理由です(微妙な違い)。コンピュータがアレイをどう処理するかは問題ではありませんでした。


9
Pythonセットとリスト
Pythonでは、どのデータ構造がより効率的/高速ですか?順序が私にとって重要ではなく、とにかく重複をチェックすると仮定すると、PythonセットはPythonリストよりも遅くなりますか?

6
多次元配列はどのようにメモリ内でフォーマットされますか?
Cでは、次のコードを使用して、2次元配列をヒープに動的に割り当てることができます。 int** someNumbers = malloc(arrayRows*sizeof(int*)); for (i = 0; i < arrayRows; i++) { someNumbers[i] = malloc(arrayColumns*sizeof(int)); } 明らかに、これは実際には、整数の個別の1次元配列の束へのポインターの1次元配列を作成します。 someNumbers[4][2]; しかし、次の行のように2D配列を静的に宣言すると...: int someNumbers[ARRAY_ROWS][ARRAY_COLUMNS]; ...同様の構造がスタック上に作成されますか、それとも完全に別の形式ですか?(つまり、ポインターの1D配列ですか?そうでない場合、それは何ですか、そしてそれへの参照はどのように理解されますか?) また、私が「システム」と言ったとき、それを理解するために実際に責任があるのは何ですか?カーネル?または、Cコンパイラはコンパイル中にそれを分類しますか?

1
lens、fclabels、data-accessor-構造体へのアクセスと変更のためのライブラリのどちらが優れているか
レコードのフィールドにアクセスして操作するための少なくとも3つの一般的なライブラリがあります。私が知っているのは、データアクセサ、FCラベル、レンズです。 個人的には、データアクセサーから始めて、現在はそれらを使用しています。しかし最近haskell-cafeでfclabelsが優れているという意見がありました。 したがって、これら3つの(そしておそらくそれ以上の)ライブラリーの比較に興味があります。

3
HyperLogLogアルゴリズムはどのように機能しますか?
最近は暇なときにさまざまなアルゴリズムについて学んでいます。私が遭遇した非常に興味深いと思われるアルゴリズムはHyperLogLogアルゴリズムと呼ばれ、リストに含まれる一意のアイテムの数を推定します。 これは、「カーディナリティ」の値(最近までは、推定されていないと計算されていたと私は常に想定していました)を見たMySQL時代に戻ったので、特に興味深いものでした。 そのため、配列内の一意のアイテムの数を計算するアルゴリズムをO(n)で記述する方法を知っています。私はこれをJavaScriptで書いた: function countUniqueAlgo1(arr) { var Table = {}; var numUnique = 0; var numDataPoints = arr.length; for (var j = 0; j < numDataPoints; j++) { var val = arr[j]; if (Table[val] != null) { continue; } Table[val] = 1; numUnique++; } return numUnique; } しかし問題は、私のアルゴリズムはO(n)が大量のメモリを使用する(に値を格納するTable)ことです。 私は、O(n)時間でリスト内の重複をカウントし、最小限のメモリを使用する方法についてこのペーパーを読んでいます。 それは、ビットまたは何かをハッシュおよびカウントすることにより、特定の確率内で(リストが均等に分散されていると仮定して)推定できるリスト内の一意のアイテムの数を説明します。 …

21
JavaでLRUキャッシュをどのように実装しますか?
EHCacheやOSCacheなどは言わないでください。この質問のために、SDKだけを使用して独自に実装したいとします(実行することで学習します)。キャッシュがマルチスレッド環境で使用される場合、どのデータ構造を使用しますか?LinkedHashMapとCollections#synchronizedMapを使用してすでに実装していますますが、新しい並行コレクションのいずれかがより良い候補になるかどうかたいです。 更新:このナゲットを見つけたとき、私はちょうどイェッジの最新を読んでいました: 一定時間のアクセスが必要で、挿入順序を維持したい場合、本当に素晴らしいデータ構造であるLinkedHashMapよりも優れた方法はありません。それがおそらくもっと素晴らしいかもしれない唯一の方法は、並行バージョンがある場合です。しかし悲しいかな。 LinkedHashMap+ と一緒に行く前に、私はほぼ同じことを考えていましたCollections#synchronizedMap上記の実装に。私が何かを見落としただけではなかったことを知ってうれしい。 これまでの回答に基づくと、並行性の高いLRUに対する私の最善の策は、と同じロジックのいくつかを使用してConcurrentHashMapを拡張することLinkedHashMapです。

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