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

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

15
インタビューでデータ構造が非常に重要なのはなぜですか?[閉まっている]
大学を卒業したとき、データ構造がそれほど強くなかったことを告白しなければなりません。卒業中のキャンパス内の配置を通して、Amazon、Microsoftなどの大企業のほとんどがデータ構造に主に焦点を当てていることを目撃しました。データ構造が卒業生に期待される唯一のものであるかのように見えます。 正直に言うと、私はそれについて悪いと感じました。良いコードを書きます。私はコーディングの標準設計パターンに従います。データ構造を使用しますが、ArrayList、LinkedListなどのJava公開APIのように表面的なレベルで使用します。 おそらくJavaのバックグラウンドのために、当時、オブジェクトやインスタンスなどのオブジェクト指向プログラミングの観点から話をしたときのみ、コードの効率とロジックを理解していましたが、ビットとバイトのレベルにドリルダウンすることはありませんでした。私は、このデータ構造の知識不足のために、人々に私を見下して欲しくありませんでした。 では、なぜデータ構造にこれらすべての重点が置かれているのでしょうか?

4
どのアルゴリズム/データ構造を「認識」して名前で知る必要がありますか?[閉まっている]
私はかなり経験豊富なプログラマーだと思っています。私はもう5年以上プログラミングを続けています。しかし、私の弱点は用語です。私は独学なので、プログラミングの方法は知っていますが、コンピューターサイエンスのより正式な側面のいくつかは知りません。それで、名前で認識して知ることができる実用的なアルゴリズム/データ構造は何ですか? アルゴリズムの実装に関する本の推奨を求めているのではないことに注意してください。私はそれらを実装することを気にせず、アルゴリズム/データ構造が問題の良い解決策になるときを認識できるようにしたいだけです。「認識」するアルゴリズム/データ構造のリストをもっと求めています。たとえば、私はこのような問題の解決策を知っています: 0〜999というラベルの付いた一連のロッカーを管理します。人々はロッカーを借りに来て、ロッカーキーを返すために戻ってきます。どのロッカーが無料で、どのロッカーが使用されているかを管理するソフトウェアをどのように構築しますか? ソリューションは、キューまたはスタックになります。 私が探しているのは、「どのような状況でBツリーを使用すべきか-ここでどの検索アルゴリズムを使用すべきか」などです。そして、より複雑な(しかし一般的に使用される)データ構造/アルゴリズムが機能します。 ウィキペディアのデータ構造とアルゴリズムのリストを見てみましたが、それはちょっとやり過ぎだと思います。それで、私が認識すべき重要なものは何かをもっと探していますか?


6
EAV-すべてのシナリオで本当に悪いですか?
私は、プロジェクトのいくつかの要素にエンティティー属性値(EAV)モデルを使用することを考えていますが、Stack Overflowでのそれに関するすべての質問は、 EAVをアンチパターンと呼ぶ答えになります。 しかし、私はそれがすべての場合においてそれが間違っているかどうか疑問に思っています。 ショップ製品のエンティティを考えてみましょう。名前、説明、画像、価格など、ロジックに多くの場所で参加する共通の機能があり、時計やビーチボールなどの(半)固有の機能はまったく異なる側面で説明されます。したがって、EAVはそれらの(半)固有の機能を格納するのに適していると思います。 これはすべて、製品リストを表示するために製品テーブルに十分な情報があり(EAVが関与しないことを意味します)、1つの製品を表示するとき/最大5つの製品などを比較するときだけです。EAVを使用して保存されたデータが使用されます。 Magentoコマースでそのようなアプローチを見てきましたが、非常に人気がありますが、EAVが妥当な場合はありますか?

7
構成データ:単一行のテーブルと名前と値のペアのテーブル
ユーザーが設定できるアプリケーションを書いたとしましょう。この「構成データ」をデータベースに保存するには、2つのパターンが一般的に使用されます。 単一行のテーブル CompanyName | StartFullScreen | RefreshSeconds | ... ---------------+-------------------+------------------+-------- ACME Inc. | true | 20 | ... 名前と値のペアのテーブル ConfigOption | Value -----------------+------------- CompanyName | ACME Inc. StartFullScreen | true (or 1, or Y, ...) RefreshSeconds | 20 ... | ... 両方のオプションを実際に見てきましたが、どちらにも明らかな利点と欠点があります。 単一行の表は、使用できる構成オプションの数を制限します(通常、行の列の数は制限されているため)。追加の構成オプションごとに、DBスキーマの変更が必要です。 名前と値のペアの表では、すべてが「文字列で入力」されています(ブール値/日付/その他のパラメーターをエンコード/デコードする必要があります)。 (もっとたくさん) どのオプションが望ましいかについて、開発コミュニティ内でコンセンサスがありますか?

11
データ構造でルービックキューブを表す方法
ルービックキューブをシミュレートしようとしている場合、キューブの状態をメモリに保存するためのデータ構造をどのように作成しますか? 考慮事項: キューブは任意のサイズにすることができます ルービックキューブなので、レイヤーを回転させることができます

16
「不明」と「欠損」の違いを保持したまま、変数に「不明」と「欠損」の値を保存する方法を教えてください。
これを「アカデミック」な質問と考えてください。私は時々NULLを避けることについて疑問に思っていましたが、これは満足のいく解決策を思い付かない例です。 測定が不可能(または欠落)であることがわかっている場合に測定値を保存するとします。NULLを避けながら、変数にその「空の」値を格納したいと思います。また、値が不明な場合もあります。そのため、特定の時間枠の測定値がある場合、その期間内の測定値に関するクエリは3種類の応答を返す可能性があります。 その時点での実際の測定値(たとえば、を含む数値0) 「欠落」/「空」の値(つまり、測定が行われ、その時点で値が空であることがわかっている)。 不明な値(つまり、その時点で測定は行われていません。空になることもありますが、他の値になることもあります)。 重要な説明: get_measurement()「空」、「不明」、および「整数」型の値のいずれかを返す関数があると仮定します。数値があるということは、戻り値(乗算、除算など)で特定の操作を実行できることを意味しますが、そのような操作をNULLで使用すると、キャッチされないとアプリケーションがクラッシュします。 NULLチェックを回避して、コードを記述できるようにしたいと思います。たとえば(擬似コード): >>> value = get_measurement() # returns `2` >>> print(value * 2) 4 >>> value = get_measurement() # returns `Empty()` >>> print(value * 2) Empty() >>> value = get_measurement() # returns `Unknown()` >>> print(value * 2) Unknown() printNULLが使用されていないため、どのステートメントも例外を引き起こしていません。したがって、空の値と不明な値は必要に応じて伝播し、値が実際に「不明」または「空」であるかどうかのチェックは、本当に必要になるまで遅らせることができます(値の保存/シリアル化など)。 サイドノート:NULLを避けたい理由は、主に頭の体操です。何かをやりたい場合、NULLを使用することに反対しませんが、それらを回避することでコードがより堅牢になる場合があることがわかりました。

4
辞書WebサイトにMySQLを使用するのはなぜ悪い考えですか?
辞書のエントリ(通常は単一の単語)とその意味を別の言語で保存するデータベースを設計および設定する予定です。したがって、たとえば、テーブル用語集にはエントリと定義が必要であり、各テーブルレコードには、格納されているレコードのIDへの参照がありますTag(各エントリにはタグまたはカテゴリが必要です)。 私のデータは構造を持っているので、SQLデータベース(MySQLなど)を使用することは悪い考えではありません。しかし、人々はMongoDBの方がパフォーマンスがはるかに優れていると言います。 クライアント側では、アプリケーションは、バックエンドが提供するREST APIを使用するオートコンプリートを備えた検索ボックスを提供できる必要があります。このようなシナリオでMySQLを使用するのは安全ですか?または、これに他のソリューションのMongoDBまたはElasticSearchを使用する必要がありますか?このようにして、数十万件のレコードが保存およびアクセスされることになっています。

6
Cで構造体を返す多くの関数が、実際に構造体へのポインターを返すのはなぜですか?
return関数のステートメントで構造全体を返すのではなく、構造へのポインタを返すことの利点は何ですか? 私はfopen他の低レベル関数のような関数について話しているが、おそらく構造体へのポインタを返す高レベル関数もあるだろう。 これは単なるプログラミングの質問ではなく、設計上の選択であり、2つの方法の長所と短所についてもっと知りたいと思っています。 構造体へのポインターを返すのが利点だと思った理由の1つは、ポインターを返すことで関数が失敗したかどうかをより簡単に判断できることNULLです。 完全な構造を返すのは、NULL私にとっては難しいか、効率が悪いでしょう。これは正当な理由ですか?

1
1Dデータ構造を2Dグリッドとして扱う
2Dイメージを1D配列として表すネイティブクラスを使用しています。たとえば、1つのピクセルを変更する場合は、x,y座標からインデックスを取得する方法が必要になります。 したがって、次のarray1dような1D配列があるとします。 array1d = [ a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y ] プログラムのコンテキストでarray1dは、2Dグリッドを表します。 a b c d e f g h i j k l m n o p q r …

4
抽象構文ツリーはどのくらい正確に作成されますか?
私はASTの目標を理解しており、以前にツリー構造をいくつか構築したことがありますが、ASTを構築したことはないと思います。ノードはテキストであり番号ではないため、ほとんど混乱しています。そのため、コードを解析しているときにトークン/文字列を入力する良い方法は考えられません。 たとえば、ASTの図を見ると、変数とその値は等号のリーフノードでした。これは私にとって完全に理にかなっていますが、これをどのように実装しますか?私はケースバイケースでそれを行うことができると思うので、「=」につまずいたとき、ノードとしてそれを使用し、「=」の前に解析された値をリーフとして追加します。私はおそらく構文に応じて、たくさんの事柄のケースを作成しなければならないので、それは間違っているようです。 そして、私は別の問題に遭遇しました、ツリーはどのように横断されますか?高さを一番下に移動し、最下部に到達したらノードを上に移動し、隣のノードでも同じことをしますか? ASTで多数の図を見てきましたが、コードで簡単な例を見つけることができませんでした。おそらく役立つでしょう。


6
決して公開されることのないコードの防衛的なプログラミング慣行に従うことはどのくらい必要ですか?
私はカードゲームのJava実装を書いているので、ゾーンと呼ぶ特別なタイプのコレクションを作成しました。Javaのコレクションのすべての変更メソッドはサポートされていませんが、ゾーンAPIにmove(Zone, Card)は、指定されたゾーンからそれ自体にカードを移動するメソッドがあります(パッケージプライベートテクニックによって達成されます)。これにより、ゾーンからカードが取り出されず、単に消えることを保証できます。別のゾーンにのみ移動できます。 私の質問は、この種の防御コーディングはどのくらい必要ですか?それは「正しい」ことであり、正しい実践のように感じますが、Zone APIが公共図書館の一部になることは決してありません。それは私だけのためです。したがって、標準のコレクションを使用することでおそらくより効率的になる可能性があるときに、自分からコードを保護しているようなものです。 このゾーンのアイデアをどこまで取り入れるべきですか?誰でも私が書いているクラス、特に実際に公開されないものについては、契約を保存することについてどれだけ考えるべきかについてアドバイスをいただけますか?

8
OOPの前に、データ構造体のメンバーは公開されていましたか?
OOP言語を使用してデータ構造(キューなど)を実装する場合、データ構造の一部のメンバーはプライベートにする必要があります(キュー内のアイテム数など)。 キューは、structおよびで動作する一連の関数を使用して手続き型言語で実装することもできますstruct。ただし、手続き型言語では、メンバーをstructプライベートにすることはできません。手続き型言語で実装されたデータ構造のメンバーは公開されていましたか、それとも非公開にするためのトリックがありましたか?

8
動的な無制限のサイズの「迷路」のデータ構造を構築するにはどうすればよいですか?
実際、「迷路」が正しい用語であるかどうかはわかりません。基本的に、ユーザーRoomは4つのドア(N、S、E、およびW)を持つシングルで開始します。彼らは任意の方向に行くことができ、後続の各部屋には、他の部屋に行く1〜4個の出入口がある別の部屋が含まれます。 「迷路」はサイズに制限がなく、部屋を移動するにつれて大きくなると考えられています。Rooms使用可能な数には制限がありますが、使用可能な数は動的であり、変更できます。 私の問題は、このタイプのパターンに最適なデータ構造がわからないことです 最初にRoomオブジェクトの[X] [X]配列を使用することを考えましたが、物事はどの方向にも成長するはずであり、「訪問された」部屋のみを構築する必要があるため、それを避けたいと思います。 もう1つの考えは、各RoomクラスRoomにN、S、E、Wの4つのリンクされたプロパティを含め、前のものRoomにリンクすることですが、それに関する問題は、ユーザーがその部屋に入るかどうかを特定する方法がわかりません隣接する部屋は既に「構築済み」です 例えば、 --- --- ---------- | | | | 開始5 4 | | | | --- --- --- --- --- --- ---------- --- --- | | | | | | | 1 2 3 | | | | | | --- --- --- --- ---------- …

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