2016-07-04 11 views
0

私はコーディングに新しいです。以下は、無関係と考えるかもしれませんが、私はこれを解決するのを助けてください。 私は複雑さとランタイムを知りたい2つの異なる方法でコードを書いています.2つのBig-O表記でより速い結果が得られます。10〜20行を使って書くことができますが、コードの長さの変更の複雑さを知る。Javaアプリケーションのランタイムと複雑さを確認してください

ちょうど訂正で、すべてのO(1)アルゴリズムは両方ともO(1)であるため実行時間は等しくありません。そして、両方ともO(1)なので、実行時間をどのように決定するのですか?

CODE1:

package can; 

import java.util.Scanner; 

public class scan2 
{ 

private static Scanner scanner; 
public static void main(String[] args) 
{ 
    System.out.println 
     ("Select an option\n1-apples\n2-bananas\n3-oranges\nFor apples less  than 10 quantity,\neach apple costs 50INR else each apple price is 40INR.\nFor bananas less than 24,\neach banana costs 2INR else 1.5INR.\nFor oranges less than 12,\neach orange costs 5.7INR else 4INR. "); 



    int i; 
    int j =0; 
    float k = 0f; 
    scanner = new Scanner(System.in); 
    i = (scanner.nextInt()); 

    if(i<=3&&i>0) 
    { 
     System.out.println("Please enter the quantity "); 
     scanner = new Scanner(System.in); 
     j = (scanner.nextInt()); 
    } 
    else 
    { 
     System.out.println("Please choose a valid option "); 
    } 

if (i == 1&&i>0) 
{  
{ 
System.out.println("you have entered "+j+" quantites of apples"); 
} 
if (j<10&&j>0) 
{ 
    k = j*50; 
    System.out.println("Total cost is "+k); 
} 
else if(j>=10&&j>0) 
{ 
    k = j*40; 
    System.out.println("Total cost is "+k); 
} 
if(j>0) 
{ 
    System.out.println("Your shopping is completed"); 
} 
else 
{ 
    System.out.println("Please enter valid quantity"); 
} 

} 
if (i == 2) 
{ 
{ 
System.out.println("you have entered "+j+" quantites of bananas"); 
} 
if (j<24&&j>0) 
{ 
    k = j*2; 
    System.out.println("Total cost is "+k); 
} 
else if(j>=24&&j>0) 
{ 
    k = j*1.5f; 
    System.out.println("Total cost is "+k); 
} 
if(j>0) 
{ 
    System.out.println("Your shopping is completed"); 
} 
else 
{ 
    System.out.println("Please enter valid quantity"); 
} 
} 
if (i == 3) 
{ 
{ 
System.out.println("you have entered "+j+" quantites of oranges"); 
} 
if (j<12&&j>0) 
{ 
    k = j*5.7f; 
    System.out.println("Total cost is "+k); 
} 
else if(j>=12&&j>0) 
{ 
    k = j*4; 
    System.out.println("Total cost is "+k); 
} 
if(j>0) 
{ 
    System.out.println("Your shopping is completed"); 
} 
else 
{ 
    System.out.println("Please enter valid quantity");    
} 
} 


} 

} 

CODE2:

package can; 

import java.util.Scanner; 

public class shop 
{ 


private static Scanner scanner; 
public static void main(String[] args) 
{ 
    System.out.println 
      ("Select an option\n1-apples\n2-bananas\n3-oranges\nFor apples  less than 10 quantity,\neach apple costs 50INR else each apple price is 40INR.\nFor bananas less than 24,\neach banana costs 2INR else 1.5INR.\nFor oranges less than 12,\neach orange costs 5.7INR else 4INR. "); 



int i; 
int j =0; 
float k = 0f; 
scanner = new Scanner(System.in); 
i = (scanner.nextInt()); 

if(i<=3&&i>0) 
{ 
    System.out.println("Please enter the quantity "); 
    scanner = new Scanner(System.in); 
    j = (scanner.nextInt()); 
} 
else 
{ 
    System.out.println("Please choose a valid option "); 
} 

if (i == 1&&i>0) 
    {  
    { 
    System.out.println("you have entered "+j+" quantites of apples"); 
    } 
    if (j<10&&j>0) 
    { 
     k = j*50; 
     System.out.println("Total cost is "+k); 
    } 
    else if(j>=10&&j>0) 
    { 
     k = j*40; 
     System.out.println("Total cost is "+k); 
    } 
} 
if (i == 2) 
    { 
    { 
     System.out.println("you have entered "+j+" quantites of bananas"); 
    } 
    if (j<24&&j>0) 
    { 
     k = j*2; 
     System.out.println("Total cost is "+k); 
    } 
    else if(j>=24&&j>0) 
    { 
     k = j*1.5f; 
     System.out.println("Total cost is "+k); 
    } 
} 
if (i == 3) 
    { 
    { 
     System.out.println("you have entered "+j+" quantites of oranges"); 
    } 
    if (j<12&&j>0) 
    { 
     k = j*5.7f; 
     System.out.println("Total cost is "+k); 
    } 
    else if(j>=12&&j>0) 
    { 
     k = j*4; 
     System.out.println("Total cost is "+k); 
    } 

    } 
    if(i<=3&&j>0) 
{ 
    System.out.println("Your shopping is completed"); 
} 
    else if(j<0) 
{ 
    System.out.println("Please enter valid quantity"); 
} 
    else if(i<=3&&j == 0) 
    { 
     System.out.println("Please enter valid quantity"); 
    } 

    } 
    } 
+1

これらの2つのいずれにもループはありません。彼らはO(1)です。私はあなたがBig-Oが何であるかを本当に理解していないと思います。 Big-Oは、N個の要素の集合に対してアルゴリズムを実行するときに、時間が一定であるか、または指数関数的に、または対数的に(例えばNの値で)増加するかどうかを知ることができます。Nあなたのコードにはコレクションはありません。ビッグオーは関係ありません。 –

+0

基本if-elseステートメントはO(1)です。 1 for-loopはO(N)になります。 2つの入れ子になったfor-loopsはそれをO(N^2)にします。 O(logN)やO(NlogN)のようなものを作るより複雑なものがあります。 – btrballin

+0

コードの長さは、ソースが実行されるものではないため、実行時間とは直接関係しません。また、 'O(1)'アルゴリズムは両方とも 'O(1)'であるため、実行時間は等しくありません。 –

答えて

1

各コードスニペットには、ループ、ただのif-else文が含まれていません。したがって、それぞれのランタイムはO(1)です。つまり、2つのコードスニペットの間にランタイムに違いはありません。 Big-Oに関しては、カウントしている操作の合計数が一定であれば、常に1に減少します。同様のステートメントは、可変数の操作についても言えることです。 big-Oが3nまたは4n^2であったとします。この場合、定数項は削除され、nまたはn^2が残ります。ビッグオーについて言わなければならないもう一つの注意点は、最高度の言葉以外の言葉もすべて落とされるということです。たとえば、n^2 + 6n + 1はO(n^2)になります。ただし、コードスニペットにはifおよびelse-ifステートメントが含まれており、実行中に発生する特定の範囲の比較を作成します。この範囲は一定であるため、各コードスニペットのBig-Oはに減少します。O(1)

関連する問題