
16-02-2006, 16:42
|
|
|
|
חבר מתאריך: 19.06.03
הודעות: 549
|
|
|
אני חייב להעיר משהו
אתה נתת שתי גרסאות לעניין האלכסונים (הראשי והמשני), אבל עבור כל אלכסון נתת גירסה אחת שפשוט כדאי לזרוק לפח ואני אדגים על האלכסון הראשי.
קוד PHP:
for(int i = 0 ; i < n ; i++){ m[i][i] = 0; }
לעומת:
קוד PHP:
for (ont i = 0 ; i < n ; i++){ for(int j = 0 ; j<n ; j++) if(i == j) m[i][j] = 0; }
בסיום הריצה של שתי הפונקציות, המטריצה תהיה בעלת אותם ערכים באותם תאים, אבל בגירסה השנייה, אתה מבצע פי N יותר פעולות, כלומר פי N פעולות מיותרות.
יש לך שתי לולאות, כשאחת מקוננת בתוך השנייה כל אחת רצה מ 0 עד N-1.
בפועל אתה סופר מ 1 עד N-1 ואתה מבצע את זה N פעמים!!!. זאת אומרת אתה סופר מ 1 עד N^2 (N בריבוע) לעומת לספור רק עד N.
אתה אולי לא תשים לב לזה עבור מטריצות קטנות מאוד, אבל כבר עבור N=10 אתה מבצע 100 לעומת 10 איטרציות.
עבור N=1000 אתה יכול לבצע 1000000(מיליון) איטרציות במקום 1000!!!!!
חבל שהמחשב שלך יעבוד כ"כ קשה כשהוא לא באמת צריך....
|