効率的なアルゴリズムを考えて提案して分析

このQ&Aのポイント
  • 手作業のために効率的なアルゴリズムを考えて提案し、分析します。
  • 条件に基づいて、2つのケースに使えるアルゴリズムを提案し、計算量と実際の時間を分析します。
  • 習ったアルゴリズムとの類似点や相違点、手作業の特徴を考慮した点についても論じます。
回答を見る
  • ベストアンサー

アルゴリズムについて

「手作業によるソート」がレポートの課題として出されました。 「手作業のために効率的なアルゴリズムを考えて提案して分析しなさい」 条件は次の通り: 資料がそれぞれ A4 の紙一枚。見やすい位置に10桁の番号が書かれている。その番号の昇順にソートする。番号の分布については一切不明。二つのケースを想定: 1) 一人で資料5000枚をソート; 2) 20人で資料50000枚をソート。二つのケースに使えるアルゴリズム一つ、又は両ケースに使えるアルゴリズム一つでもよい。分析では O() での計算量 (理由つき) と実際に想定される時間。今まで習ったアルゴリズムとの類似点や相違点、手作業の特徴に考量した点などについても論じる。 何をすれば良いのかが分かりません。少しでも作業の道筋を示していただければ幸いです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • ok-kaneto
  • ベストアンサー率39% (1798/4531)
回答No.1

今まで色々なソートのアルゴリズムを習いましたよね? で、効率的なってことは計算量のできるだけ小さいアルゴリズムを適用すればよいわけです。 O(n^2)よりもO(n log n)の方が効率が良いのは解りますよね? わざわざ好き好んでバブルソート使うよりも、クイックソートやマージソートを使いますよね? 一人でやる時と、20人でやるとすると似たような手法でやるよりも効率的な方法が見つかると思います。

Soborut
質問者

お礼

具体的な計算方法を教えて頂きありがとうございました。 何とか計算できました。

その他の回答 (2)

  • hashioogi
  • ベストアンサー率25% (102/404)
回答No.3

20人で行うということは ネットワークでつながった20台のPCが並列で動作するようなもの ですから、通常のアルゴリズムの本に書いてあるような バブルソートだとかクイックソートだとかとは違ったアルゴリズムが使用できる ということでしょう。 20人のうちの誰かが指示者になるのかもしれませんが、 指示者の指示の仕方によって効率が変わってくるといういうことでしょう。 指揮者が残りの19人に遊ぶ暇を与えないように指示を出す のが効率を上げるポイントではないでしょうか。

Soborut
質問者

お礼

お礼が遅れて申し訳ありません。 具体的で分かりやすかったです。

  • queuerev2
  • ベストアンサー率78% (96/122)
回答No.2

実際に紙を用意して試してみてはいかがでしょう。 とはいっても、5000枚では用意するのもソートするのもとても大変なので、とりあえず数十枚程度でしょうか。 そうすれば、手作業ではどの部分に時間がかかるかを理解することができ、手作業の特徴に考慮することもできるのではないでしょうか。

Soborut
質問者

お礼

遅れて申し訳ありませんでした。 お手伝い頂きありがとうございました。

関連するQ&A

  • 乱数の順位付けのアルゴリズム

    [0,1]の範囲で乱数を1000個、配列に発生させて、小さいもの100個を選び出すアルゴリズムということを考えます(知りたいのは数値と配列番号、むしろ配列番号が大事)。まず想定できるのはソートですが、それにもいろんなものがあり、クイックソート、バブルソートなどが挙げられます。ソートのアルゴリズムは既に開発されつくしたのかもしれませんが、どのようになっているでしょうか。一番高速な(かつ間違いない)な方法が1つあればそれを採用したいのですが。 そして1つ厄介なのですが、そのトップ100個以外の900個はソートする必要がないということです。私が考えているアルゴリズムは、 1.既に100個の選ばれていると仮定(初期はすべて1) 2.新しい1個が来たとき、100個の最低値よりも小さいなら考慮の対象なのだから最低値を交換してその100個でソートする。そうでない場合は何もしない。 3.次の新しい1個を調べて、項目2をする。 4.発生させた1000個でそれを繰り返す。 このアルゴリズムだと100個のソートを何百回かぐらいやることになります。 これをするぐらいだったら1000個のソートを1回やればいいということになるでしょうか(不必要な残りの900個もソートされてしまう)。あるいはその1回の1000個のソートの中でやる必要のない処理を排除する工夫があるかもしれません。 問題が難しくなく、素人っぽくコード化できると思いますが、その分、非効率なところも放置されそうなので高速化できるコードの書き方があったら教えて頂きたいのですが。コードというよりアイディアだけ説明していただいても助かります。実際はフォートランになると思いますが。よろしくお願いします。

  • 筆まめでの郵便番号のソート方法

    筆まめでの郵便番号のソート方法 3か月に1回筆まめで約5000人の方へDMを発送するアルバイトを引き受けました。 郵便番号別に仕分けするようにと言われて初月は手作業で行ったのですが、非常に時間と手間がかかりました。 何か郵便番号でソートできるような方法はありますでしょうか? 筆まめは初めて使うので、慣れておりません。 ご指導いただけますようお願いいたします。

  • アルゴリズムに関する問題

    こんばんわ、いくつかの問題につまってしまったので解答と簡単な解説をお願いします; 【問1】 4桁の数字( a1a2a3a4 )をハッシュ法を用いて配列に格納したい。 ハッシュ関数をmod( a1 +a2 +a3 +a4 ,5 )とし、求めたハッシュ関数値に対応する位置の配列要素に格納する場合、9576は(ア)~(オ)のどこに入るか。 ここでmod(x,5)の値は、xを5で割った余りとする。 位置  配列 0  (ア) 1  (イ) 2  (ウ) 3  (エ) 4  (オ) 【問2】 相違なるn個のデータが昇順に整列された表がある。この表を1ブロックm個に分割し、各ブロックの最後尾のデータだけ線形検索することによって、目的のデータを探し出す。 次に当該ブロック内を線形検索して目的のデータを探し出す。 このときの平均探索(比較)回数は(ア)~(エ)のうちどれか。 ここでm<nとし、目的のデータは必ず表の中に存在するものとする。 (ア)  (イ)  (ウ)  (エ)  n    n          n    m n  ─    ─    m + ─   ─+─  m    2m         m    2 2m 【問3】 次の手順はシェルソートによる整列を示している。 データ列”7,2,8,3,1,9,4,5,6”を手順(1)~(4)に従って整列すると手順(3)を何回繰り返して完了するか。 ここで、〔〕は小数点以下を切り捨てる。 <手順> (1)〔データ数÷3〕→Hとする。 (2)データ列を互いにH要素分だけ離れた要素の集まりからなる部分列とし、それぞれの部分列を挿入方を用いて整列する。 (3)〔H÷3〕→Hとする (4)Hが0であればデータ列の整列は完了し、0でなければ(2)に戻る。 以上になります。

  • 2点支持の荷重分布

    均等分布質量の棒状のものを両端で水平2点支持すると想定すると 2点の支持に均等に1/2ずつ負荷が掛かると思います。 さて、水平でなく角度をつけて2点支持すると2つの支持にはどのような 負荷が掛かるのでしょうか? 計算式または参考になる資料・サイト等教えてください。 また、棒を壁にたて掛けた際、床と棒の角度と棒が壁を押そうとする力の 関係は?  回答よろしくお願いします。

  • 任意のデータだけを選んで削除する方法

    はじめまして。 下記のようなケースでどのようにすれば効率的にデータの整理ができるのか教えてください。 会員番号  名前   商品名 001    植田   CD 001    植田   DVD 002    田中   GAME 003    山田   CD 003    山田   本 こういったデータが数千件ありますが このなかで特定のデータだけを選んで削除したいと思います。 上記データとは別に、削除したい会員番号のデータがありまして、それと重複するものだけを削除したいのです。 少ない件数であればソートを掛けて手作業でやっておりましたが数千件にもなるととても無理です。 いい方法がありましたら教えてください。 よろしくお願いたします。

  • 資料を一人分ずつにする機械

     紙折り機で種類毎に折った資料を並べて、手作業で一人分ずつにまとめているのですが、百人分以上になると一人では手間がかかります。  折った紙、あるいは、折っていない紙をソートしてまとめてくれる機械をご存じの方は、製品名、メーカー名、定価を教えていただけませんか。

  • PPTのテクニックについて教えてください

    PPTでの質問です。 私は、今度の会議で使う資料の取りまとめ担当です。 以下のような作業をしたいのですが、どのようにしたら早くスムーズにできるか 教えてください。 各職員から送られてくるPPT(背景デザインや、フォントはバラバラである)を ・統一したデザインのデザインテンプレートにし、フォントを揃え、 ・右上に資料番号(Aさんの資料は、1-1、Bさんの資料は1-2というように議事番 号をつける) ・右下にページ数(投資番号が、それぞれの資料のページ数かは調整中)『その ページ番号/全体のページ』という形で番号をつける ・一つのファイルに合体する という作業です。 手入力すれば全てできるのですが、きっと素早くできるコツがあると思います。 ご教示いただけますか? 特に、統一したデザインテンプレートに差し替えるのに不安を感じています。 というのは、定められた既製品のテンプレートならいいのですが、 左上に会社のロゴとか、左下に会社のURLとかがはいったような 加工したテンプレートを使う場合うまくできるのか心配しております。 どのようにしたらよいですか?

  • 基準列が空欄セルも含めて並び替えを実施する方法

     添付ファイルの様な左列のIDを基準にそれに紐付く氏名、住所、商品名の列があります。 表が出力される時は並びがIDを基準に降順(番号の新しいものが上に)になっていますが、これを毎日昇順(番号が古い物を上に)する作業があります。 表を見て頂ければおわかりの通り、IDは1行しか表示されない為、通常のエクセルの並び替えメニューで実行するとIDが表示ある行とない行でバラバラになってしまう為、現状は行切り取り→下へ移動の方法で並び替えを実施していますが、この作業が手作業な為、非常に時間が掛かってしまいます。 マクロかVBAでID列を基準にそれにぶら下がっているID空欄行を全て並び替える(降順 → 昇順)方法がお分かりになればご指導願います。 ※サンプルは5明細ですが実際の明細は50前後の明細になります。

  • Excelシリアル番号別に数の和を算出するマクロ

    こんにちは。 Excel2007を使用しています。 D列にシリアル番号が昇順で入っています。 一つだけの場合も複数の場合もあります (D5に一つだけシリアル番号0002、D20からD27まで同じシリアル番号0006のように) AN列に数字が入っています。 D列の同じシリアル番号のAN列の数字の和を求めたいと思います AN5だけ、(これは合計とは言えませんが) あるいはAN20からAN27のセル内の数の和ように 合計をBJ列に出力したいです。 BJ5に6とか、BJ20に41とか。 約1万行に約1000のシリアル番号があるので手作業では 時間ばかり掛かってしまいます うまいやり方をご存じの方お教えください。 よろしくお願いいたします。

  • エクセルで製品番号から生産日をチェックする関数

    Office(Excel)のビギナーです。 どうか皆様の知恵をお貸しください。 仕事で資料をつくる際に、製品の番号(製造番号)から生産日を確認するのですが、製造番号と生産日の表を見ながら、生産日でソートして手作業で入力していました。これではかなり労力がかかると思い、関数で判別式を作りたいと考えています。 例えば製品番号と生産日のリストがこれだとします。 AABB00001-AABB10000 :2000年製 AABB10000-AABB99999 :2005年製 ACBB00001-ACBB10000 :2007年製 ACBB10000-ACBB99999 :2010年製 IF関数とLEFT,RIGHTを組み合わせてやってみましたが、種類が多くなるとごちゃごちゃになり、よく分からないエラー(1つのセルで使える関数のLIMITを超えたような)も出てうまくいきませんでした。 (例)=if(left(A1,4)="AABB",if(right(A1,5)<=10000,"2000","2005"),if(.................) リストを参照して簡単にチェックができるような方法はありませんでしょうか? 説明が分かりにくくてすいません。 宜しくお願いいたします。