نمایش نتایج 1 تا 2 از 2

نام تاپیک: لطفا این پکیج رو چند باراجرا بفرمایید و ببینید همه موارد خروجی یکسانه!؟

  1. #1
    کاربر دائمی آواتار jlover
    تاریخ عضویت
    شهریور 1388
    محل زندگی
    زیر میز کامپیوترم !
    سن
    39
    پست
    314

    لطفا این پکیج رو چند باراجرا بفرمایید و ببینید همه موارد خروجی یکسانه!؟

    پکیج محاسبه ی اول بودن یک عدد هست که در سه کلاس که سه الگوریتم متفاوت دارند + یک کلاس تست طبقه بندی شده در ذیل کلاس انتزاعی Prime
    البته الگوریتم ها خیلی واضح و ابتدایی هستند(باید کلاس پیاده ساری کننده ی الگوریتم بازگشتی هم حتما اضافه بشه)

    هدف من بیش از خود مسئله ی اعداد اول،محاسبه ی زمان اجرای متد ()isPrime
    بوده و نتیجه ی مورد انتظار هم بدست میاد اما :
    مثلا توی 10 بار اجرا بار مثلا هفتم و هشتم نتایج رو برعکس نشون میده !

    خودم فکر میکنم به خاطر نوع نمونه سازی هر کلاس باشه

    این موضوع اهمیتش برا من همون بحث هزینه ی الگوریتم هست و این مثال ابتدایی نشون میده که شاید چندان قابل اعتماد نباشه اینطور محاسبه ...

    گرچه با اجرای برنامه فایلهای منبع ضمیمه شده توضیحاتی در خروجی میاد که بتونید درک کنید برنامه رو ،هرچند که خیلی ساده ست ، اما یه توضیح کوتاه به عنوان مستندات :
    کلاس Prime1 از پرهزینه ترین الگوریتم استفاده میکنه و در Prime2 و Prime3 هر کدوم محدوده ی کار رو نسبت به قبلی نصف میکنه
    در ضمن برای نمونه میتونید از این اعداد که همگی اول هستند استفاده کنید :
    456899 و 456901 و 456979 و 456991
    457001 و 457003 و 457013

    من از 457001 استفاده کردم و نتایج - در اکثر اوقات به ترتیب برای کلاس 1،2،و3 به صورت زیر بود :
    32 تقریبا
    16 تقریبا
    15 تقریبا

    لطفا اجرا کنید و نتیجه رو بگید

    ممنون
    فایل های ضمیمه فایل های ضمیمه
    آخرین ویرایش به وسیله jlover : چهارشنبه 07 بهمن 1388 در 23:16 عصر

  2. #2
    کاربر دائمی آواتار jlover
    تاریخ عضویت
    شهریور 1388
    محل زندگی
    زیر میز کامپیوترم !
    سن
    39
    پست
    314

    Thumbs up نقل قول: لطفا این پکیج رو چند باراجرا بفرمایید و ببینید همه موارد خروجی یکسانه!؟

    دوستان خوبم که بعید میدونم هیچ کدومتون کدها رو اجرا کرده باشین،چه برسه به بررسیشون

    مسئله حل شد

    فکر کردم شاید یه روزی ، یه بنده خدایی ، به موضوع بهینه گی الگوریتم ها و چگونگی تست اونها علاقه مند باشه و گذرش به اینجا بیفته،بنابراین تجربه م رو در اختیارش میگذارم :

    موضوع اینه که وقتی از نمونه ی خیلی بزرگ(یا به اندازه ی کافی بزرگ)ی استفاده بشه برای تست،نتایج هم در تمام خروجی ها مطابق انتظار خواهد بود
    برای مثال عدد 15,485,863 رو در مورد این برنامه به کار گرفتم و شاید نزدیک به 50 بار اجرا کردم،و نتایج همیشه یک شکل بود : برای الگوریتم اول حدود 1 ثانیه و برای دومی و سومی حدود نیم ثانیه

    یه برنامه ی دیگه ای بود-مرتب سازی حبابی-اونو هم با دو الگوریتم که تفاوت ریزی با هم داشتند،امتحان کردم ، منتها یه بار با 2000 عدد،که مثل همون مثال اعداد اول قاتی میکرد،اما برای 10000 عدد،دقیقا اختلاف زمان محاسبه در دو متد متفاوت رو نشون میداد :

    public class TestSorts {

    private final static int COUNT = 10000 ; // the number of slots in array(arry length)
    private int[] makeArray (int n){
    int[] numbers = new int[n];
    for (int i=0; i<n; i++)
    numbers[i] = (int)(Math.random()*n*2) ;
    return numbers;
    }

    /**
    * bubbleSort() sorts the values in arr into ascending order
    * Pre: arr is not null.
    * Post: The values arr[0]...arr[arr.length-1] will be
    * arranged in ascending order.
    */
    private void bubbleSort(int arr[]) {
    int temp; // Temporary variable for swap
    for (int pass = 1; pass < arr.length; pass++) // For each pass
    for (int pair = 1; pair < arr.length; pair++) // For each pair
    if (arr[pair-1] > arr[pair]) { // Compare
    temp = arr[pair-1]; // and swap
    arr[pair-1] = arr[pair];
    arr[pair] = temp;
    } // if
    } // bubbleSort()

    private void editedBubbleSort (int arr[]) {
    int temp; // Temporary variable for swap
    for (int pass = 0; pass < arr.length; pass++) // For each pass
    for (int pair = 1; pair < arr.length-pass; pair++) // For each pair
    if (arr[pair-1] > arr[pair]) { // Compare
    temp = arr[pair-1]; // and swap
    arr[pair-1] = arr[pair];
    arr[pair] = temp;
    } // if
    }

    /**
    * print() prints the values in an array
    * @param arr -- an array of integers
    */
    public void print(int arr[]) {
    for (int k = 0; k < arr.length; k++) // For each integer
    System.out.print( arr[k] + " \t "); // Print it
    System.out.println();
    } // print()

    /**
    * main() creates a Sort object and uses it to sort an array
    * of integers
    */
    public static void main(String args[]) {
    long start,end;
    TestSorts sorter = new TestSorts();
    int[] intArr = sorter.makeArray(COUNT);
    // sorter.print(intArr);
    int[] intArr2 = new int[COUNT];
    for (int k=0; k<intArr2.length; k++)
    intArr2[k]=intArr[k];
    start = System.currentTimeMillis();
    sorter.bubbleSort(intArr);
    end = System.currentTimeMillis();
    System.out.println("the original took "+(end-start)+" milliseconds to complete");
    //sorter.print(intArr);
    //System.out.println("the edited :");
    start = System.currentTimeMillis();
    sorter.editedBubbleSort(intArr2);
    end = System.currentTimeMillis();
    System.out.println("the editted took "+(end-start)+" milliseconds to complete");
    //sorter.print(intArr2);
    } // main()
    } //Sort

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •