שאלה בקשר לזמן ריצה(JAVA)

chalucha

New member
שאלה בקשר לזמן ריצה(JAVA)

היי,
אני מנסה לחשב זמן ריצה של מיון הכנסה על מערך מסויים..
עשיתי שימוש בsystem.nanotime ויוצא לי מספר באיזור ה600000-700000
יש לי 2 שאלות..
1. באיזה יחידת מידה התוצאה שnanotime מחזיר? האם יש צורך לחלק את התוצאה המתקבלת?
2. אם אני מריץ את התוכנית כמה פעמים ברצף הזמן ריצה יכול לנוע בין 500,000 ל900,000 . איך זה שיש פער כזה גדול? זה נובע מתוכניות שרצות ברקע? כי ניסיתי לסגור את רובן.

תודה!
 

chalucha

New member
כן

שמרתי את הזמן בתחילת הMAIN ובסופו, והצגתי את ההפרש ביניהם
 

chalucha

New member
הקוד

public class InsertionSort{
public static void main(String a[]){
long a2,a1=System.nanoTime();
int i;
int unsortedArray[] = {10, 97, 6, 23, 0, -45, 697, -1000, 1, 0}; //Random set of numbers for example.
insertion_srt(unsortedArray, unsortedArray.length);
System.out.println("After InsertionSort, the list elements are: "); //Just to show you it worked. :)
for(i = 0; i <unsortedArray.length; i++)
{
System.out.print(unsortedArray + " ");
}
a2=System.nanoTime();
System.out.println("___\n");
System.out.println(a2-a1);
}

public static void insertion_srt(int array[], int n){
for (int i = 1; i < n; i++){
int j = i;
int B = array;
while ((j > 0) && (array[j-1] > B))
{
array[j] = array[j-1];
j--;
}
array[j] = B;
}
}
}
 
זן ואומנות התזמון

0. נשמע לך סביר שלמיין מערך אם 10 איברים לוקח חצי שנייה?
1. תעיף את ההדפסות. פעולות IO כמו System.out לוקחות בסדרי גודל יותר זמן מלמיין מערך באורך 10 (WTF? ראה [2]). אתה כרגע מתזמן אך ורק את ההדפסות למסך.
2. תגדיל את המערך ל-10000 לפחות.
3. תריץ את בדיקת התזמון 3 פעמים לפחות.
4. שים את התזמון סביב המיון עצמו, בלי שום שום סרח עודף (כדוגמת אתחול המערך).

 

mazory

New member
מסכים עם כל מה שאמרת חוץ מזה ש..

600000-700000 נאנו שניות זה 0.6-0.7 מילי שניות (עדיין הרבה לפעולת מיון של 10 מספרים).
 
אני בעקרון אסטרופיסיקאי, לא מתכנת.

שגיאה יחסית של 3^10? זניח.

טוב נו, טעיתי. מצטער.
אשפר את דרכי בהמשך השבוע.
 

greena

New member
אוקיי

תודה ! עשיתי את השינויים שאמרת,
כרגע עם מערך בגודל 10 זה נותן לי תוצאות בין 20000-35000
במערך בגודל 10 אלף זה נותן בסביבות ה 75,000,000 - 80,000,000
זה זמן סביר?
 

mazory

New member
מה זה סביר?

זה תלוי בדרישות.
ההכנסה שלך למערך לא אופטימלית.
שים לב שהגדלת את המערך פי 1000 אבל הזמן הנדרש גדל פי 3750.

מה אתה חושב שיקרה אם תנסה להגדיל את המערך ל-100,000?
 
למעלה