• 締切済み

効率のよい検索

処理ロジックについてご教授願いたいです。 点1---点2---点3---点4     線1    線2     線3 ◆線マスタ 線1は、点1・点2で構成 線2は、点2・点3で構成 線3は、点3・点4で構成 上記のように、点1~点4までは3つの線・6つの点で構成されているとします。 以下のように線2が欠落して情報が無い場合に線1、線3と線マスタを使用し 線2を補いたいのです。線形検索で順に検索すれば可能ですが、 何か効率のよい検索方法をどなたかしっていたら教えてください。 Javaのバッチで実装しようと思っています。 点1---点2    点3---点4     線1           線3 データ量が数十万件あるため何か効率のよい方法がないか考えている最中です。 考えた方法 (1)単純にDBを線形検索 →データ量が多いので非効率 (2)DBより点2以上点3以下を抽出し、配列に格納し配列内を検索 →点情報(数値)がシーケンスになっていないため抽出対象件数が多く配列が膨大になり   メモリが不安 (3)配列のインデックスを点情報(数値)にし線を検索 →点情報(数値)が万単位になるためメモリが不安 以上

みんなの回答

  • sppla
  • ベストアンサー率51% (185/360)
回答No.1

私は元プログラマーで別段アルゴリズムに強いわけではないですが、本質問にまともな回答がつくとは思えません。質問文の情報量が不足しています。 点2に対し対応する点3を探すというようなテーマだと思います。 質問文からは点3の候補は数万から数十万程度あると予想します。 これに対し以下が不明です。  (1)各点はどのような情報を持つか。  (2)DBには何を使っているのか?  (3)点3はどのような基準で選択されるか。  (4)この作業は何回行うのか? 例えば上記で(1)各点は1次元上の点であり(2)DBにはSQLデータベースを用いており(3)点3は点2より大きいx座標を持つ中で最小のx座標を持つ点である、というような話であれば、そのようなデータを検索するSQL文を示せば回答になります。 また、この作業は何度も行われるものであれば、事前のデータのソートを考えてもいいかもしれません。 ご呈示の質問文の情報のみでは、まともな回答をするのは困難だと思われます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • あいまい検索

    PHP+DBでLIKEでDBからあいまい検索するように、phpのみで配列からあいまい検索する事は不可能でしょうか? 自分で探した範囲では、不可能なのですが... 可能な方法知ってらっしゃる方がいれば、是非お願いします。

    • ベストアンサー
    • PHP
  • CALCの検索について。

    オープンオフィスのCALCを最近使い始めているのですが なかなか分からないので、分かる方教えてください。 数値のデータがあるのですが、 その中で例えば"15"という数値を検索します。 データ量がたくさんあるので、 "15"の数値を含む行はたくさんあります。 その検索に該当したセルをすべて足し算したいのですが、 効率の良い方法、または関数とかあるのでしょうか? ぜひお願いします。

  • 効率的な検索の仕方について。

    効率的な検索の仕方について。 各社の検索エンジンで検索をかけると、ブログや無意味な単語などが検索されて欲しい情報が得られません。 今は「"該当単語 "」と「-該当単語」などとして、キーワードを狭めているのですが、何か良い方法はないでしょうか。お勧めの検索エンジンなどでも結構です。 よろしくお願いします。

  • 32bit 64bit メモリを効率的?

    32bit OSと64bit OSの違いについて 使用できるメモリの量が違う=メモリを効率的に利用できる でしょうか? それとも、 両者は、異なるのでしょうか?(同じメモリの量、32bitで利用できるメモリ量でも、64bitの方が処理が早い) 「32 ビット」と「64 ビット」という用語は、コンピューターのプロセッサ (CPU とも呼ばれます) が情報を処理する方法を指します。64 ビット バージョンの Windows は大容量のランダム アクセス メモリ (RAM) を、32 ビット システムに比べてより効率的に処理できます。

  • データの検索の為に列を増やすのは正しいのか

    現在mySQLの勉強中です。 テーブルtableにidとnameとunixtimeが格納されています。 登録件数30000件。idは、登録申請時に順に割り振られています。 unixtimeはnameに対応する人間の登録確定時を表したものです。 したがって、idとunixtimeの順番は必ずしも一致しません このデータから、PHPを使って登録確定日別でid、nameのリストをhtmlで作成したいと思います。 たとえば20001224.htmlには2000年12月24日に登録確定した人のリストが入っているようにしたいです。 このような出力を効率的に行うために、unixtimeからyearとmonthとdateを作成しました。データ型はすべてintです。 あるデータのunixtimeが2011/12/31の場合、yearは2011、monthは12、dateは31となります。 htmlを作成するにあたり、データベースからデータを出力しなければいけません。そのため、 まずdateが条件に一致するデータを抽出して配列にidとmonthとyearを格納し、 次にmonthが条件に一致するものを抽出して配列にidとyearに格納し、 最後にyearが一致するデータのidを抽出し、idに該当するデータをechoしようと考えています。 が、この方法は正しいのでしょうか。 SQLは検索にいろいろテクニックが必要で、方法を誤ると途端に検索速度が速くなったり遅くなったりすると聞きました。 列を増やすことで、メモリの使用量が増えて検索が遅くなったり、もしかしたらunixtimeで上手に検索する方法があるのかもしれないと思います。 どなたかこういう時はどういう検索を行うのが正しいのか、ご教示ください。 どうかよろしくお願いします。

    • ベストアンサー
    • MySQL
  • 大量データから抽出する効率よいperlプログラムは

    以前も質問させていただきましたが、 大量データから抽出する際の効率よいperlプログラム作成について また、教えてください。 例) 大量データ Aファイル 3列 可変値(数値、URL、数値)タブ区切り 重複値あり 123 http://www.XX.co.jp/XX 4567 1111 http://www.XX.co.jp/XX 3333 3 http://www.XX.co.jp/YZ 4567 1111 http://www.YYY… 116 … 抽出対象データ Bファイル 1列(URL)重複なし http://www.XX.co.jp/X http://www.YYY.co.jp … BファイルにあるURLで始まるURLがAファイルにある場合 Aファイルのその行を抽出したい。 grepで実施すると すごい時間がかかってしまうため、効率よい抽出方法をおしえてください。 今回は、完全一致ではなく、Bファイルに入っているリストのURLから始まるものにしたいと考えているので、前の手法(hash連想配列)が使えないと考えております。 Aファイルが容量大きいため、grep処理では1週間たっても終わらないのです。

    • ベストアンサー
    • Perl
  • ファイルから文字列を読み込んで、検索するプログラム

    以下のようなプログラムをつくりたいのですが、 どうしたらよいでしょうか?? 文字列を配列型に入れるときにわからなくなって しまうのですが。。。 ファイルからデータを順番に読み込み,メモリ上に一次元配列構造に並べて線形探索するプログラムを作成せよ. データの仕様 一行に、 「番号(スペース)読み仮名(スペース)文字列(住所)」 があり、これが10~1000行ほど、ファイルに(.dat) 入っている。 ファイルを配列に読み込んだあと、 番号を入力すると、住所が検索されてでてくる。 問題文も微妙なのですが、 これは番号の配列と住所の配列は別にして、 検索したほうがいいですよね、、? 何かヒントになることだけでも良いので、 よろしくお願いします!

  • 階層構造データの効率的な検索

     ある製品の部品、その部品を構成する部品、そしてその……というデータをDBに格納しています。  それぞれの部品にはIDがついていて、ツリーで見るとこんなかんじです。   100 +120  +300   +250    +290  これは、100というIDを持った部品にはIDが120の部品があり、120の部品には300という部品があり、、、、ということを表しています。  これを以下のようなテーブルに持っています。 items id | child_id | ---------- 100 | 120 | 120 | 300 | 300 | 250 | 300 | 290 |  ここで、ある部品のIDをキーにして、その部品を構成する部品全て(つまり、子部品、孫部品、ひ孫部品……)のIDを検索するようなSQLを書きたいと思っていますが、巧い方法が思い浮かびません。(今は10階層あったら、10回SQLを発行しています)  これを1回のSQLで、全てを検索することはできないでしょうか。言うまでもありませんが、10回のSQLよりもパフォーマンスは良くないと困りますが。。。  周りの人はみんなできないんじゃないかと言っていますが、もしできる、という方法をご存じの方はご教示いただければと思います。  DBはPostgreSQL8.2ですが、MySQL5を使っているアプリでも同様の問題があるので、そちらでも使えればうれしいです。  よろしくお願いいたします。

  • 化学的な効率の良さとは?

    水とベンゼンは、互いに溶け合わずに2層に分離する。この2つの液体に溶質Aが溶ける場合、溶質Aが両液層中で同じ分子として存在する場合、一定の温度では両液層に溶ける溶質の濃度の比c2/c1=K(分配係数)は一定となる。 ここで、c1,c2は、それぞれ水層とベンゼン層における溶質Aの濃度である。水100mLに1.00gの溶質Aをとかし、これを水溶液Xとする。 実験1 水溶液Xが入った分液漏斗に、ベンゼン100mLを加えてよく振り混ぜ、25℃で静置したところ、溶質Aの0.75gが水層からベンゼン層へ移った。 実験2 別の分液漏斗に水溶液Xをいれ、ベンゼン50mLを加えてよく振り混ぜ25℃で静置した後ベンゼン層と水層を分けた。再び分液漏斗を用いて、この分けた水溶液に新たに50mLのベンゼンを加えてよく振り混ぜ、25℃で静置した後、ベンゼン層と水層を分けた。この操作により、合計0.84グラムの溶質Aが水層からベンゼン層へ移った。 問 実験1と実験2の比較から抽出を効率的に行うためにはどのようなことが言えるか。 答 実験1から、ベンゼン100gと水100gでは、抽出できる量は0.75g 実験2から、ベンゼン100gを50gずつ2回に分けて抽出を行うと、抽出できる量は0.84g よって、100gのベンゼンをより多く分けて抽出を行うことで、より多くの溶質がえられる。 数値だけをみると、より多く抽出ができているのは実験2ですが、操作を2回やらなくてはいけないので、その分効率性は失われると思います。実験1と同じ手順で、ベンゼンをより多く使えば、抽出できる量が多くなり、操作も1回で済むので最も効率的なのでは?と思うのですが、化学的に「効率が良い」とは、より少ないベンゼンでより多くの溶質を得ることと、作業の手間を省いて簡単により多くの溶質を得ることのどちらなのでしょうか?

  • excelで検索値の近似値(大小)を抽出する方法

    excelで検索値の近似値を抽出する方法が無いか探しています。抽出したい近似値は検索値より小さい数値と大きい数値の2つです。 A|B 0|値 0.4|値 0.5|値 0.9|値 1.2|値 検索値:0.35の場合、A列の「0」と「0.4」の値それぞれを抽出したいです。 A列の数値は昇順で増え方は不規則なものです。 文章が拙いですが、やり方があればご教授お願いします。