2016-06-27 5 views
-1

バブルソートを使用して200の名前をソートするのに200秒かかりました。その後、800秒でどれくらいの名前がソートされますか。私がこれを解決するのを助けてください。私は、バブルソートの時間計算を使用してそれを解決しようとしたが、私はそれをバブルソートを使用して名前をソートするアルゴリズムの複雑さ

を行うことができませんし、またバブルソートの複雑さは最悪でO(n^2)で次のコード

int somefunct(int n) 
    { 
     if(n<=2) 
     return 1; 
     else 
     return (somefunct(floor(sqrt(x)))+x); 
    } 
+0

800 = 4 * 200; sqrt(4)= 2であるため、以前の2倍の数(400の名前)でソートできます。 – maraca

+0

名前はどのくらいですか?最初の1文字が同じで、2文字が同じであるという確率はどうですか?そのような情報がなければ、文字列比較が 'O(1)'で行われていると仮定しない限り、実際には見積もりが難しいです...あなたのデータの乱れの状態を知らなければ、気にするのは難しいです...バブルの複雑さの複雑さは ' n^2) 'であるが、これは逆順データの場合にのみ起こり、非常に起こりにくい。だからあなたはこれを計算するために本当に勇気を加える必要があります – Spektre

答えて

0

の複雑さを見つけたいです場合。したがって、与えられた時間の4倍で現在の名前の2倍のソートを行います。すなわち、最悪の場合、800秒で400の名前。

1

最悪の場合にはバブルソートでソートする時間がnの学位2の多項式であるので、我々は持っている:

t = an^2 + bn + c

、nは(ここでは200)十分な大きさであるため、ので、我々は得るために、最後の2項を無視することができます:

t = an^2

値置く:a = 1/200

01得るために t = 200n = 200

したがって、800秒で、あなたが並べ替え[最大にできるようになります:これは最悪のシナリオであるため、

800 = (1/200)*(n^2)

=> n = 400名[最大

+0

すごいジム、私はそれを逃した。今すぐ答えを編集しました。 –

+0

O(n^2)は、正確な式が多項式であることを意味しません。例えば、 't = a * n^2 + b * n * log(n)であっても、もっと奇妙なものであってもよい。 (もちろん、あなたのロジックは、n^2項が最終的に他の項を支配するということを正しく表しており、それは明らかにこの宿題の質問の意図です。) –

+0

そうです、書き込み論理を修正します。バブルソートの場合、多項式の関係は成立します。 –

0

200の名前をソートする場合、バブルソートは200 * 199/2 = 19900の比較を行います。
1回の比較に必要な時間は200秒です。 800秒でそれは80,000の比較をすることができます。
n(n-1)/ 2 = 80,000となるようなnを見つける必要があります。 => n^2 - n = 160000。最後の項は無視することができます。したがって、n^2 = 160000。回答= 400。

+0

* "1回の比較に必要な時間は200秒です" *何か他のことを意味していると確信しています.200秒間の比較で800秒間に4回しか比較できないためです。いずれにしても、時間と推定されたアルゴリズムの複雑さ(n^2)を使用するだけで問題を簡単に解決できるときは、比較を数える必要はありません。 –

関連する問題