ABA


"חידה בנושא סיבוכיות."
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #5771 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 5771
dryice

   19:01   27.04.03   
אל הפורום  
  חידה בנושא סיבוכיות.  
 
   עבר עריכה לאחרונה בתאריך 29.04.03 בשעה 13:50
 
דני שעשה בגרות 5 יחידות במחשבים כתב תוכנית מאוד פשוטה
המדפיסה על המסך את כל המספרים מ1 עד N וטען שהיא עובדת בזמן O(N)
היתכן הדבר?

DRYICE


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  תשובה (אולי) liranr 27.04.03 20:39 1
     בראבו! dryice 27.04.03 20:51 2
         בגלל.... yoash 28.04.03 16:47 3
             לא ממש, שכן מספר הספרות של המספר dryice 29.04.03 13:50 5
                 זה לא מה שהוא אמר liranr 29.04.03 15:04 6
                     זה ממש לא חסר משמעות! dryice 30.04.03 09:53 12
                 טעות שלי לא הבנתי נכון.לא קראתי את השאלה נכון yoash 29.04.03 17:56 8
         טוב - ראיתי שאף אחד לא התקרב לפתרון - אז הנה: no1 30.04.03 13:25 17
  זה תלוי... eliran33 28.04.03 19:17 4
  (++for (i=1; i =N; i זה לא סיבוכיות ( O(N??? Xman  29.04.03 15:10 7
  לא מסכים AlexKarpman 29.04.03 18:48 9
     אני לא מסכים liranr 29.04.03 19:33 10
         מגוחך!!! AlexKarpman 29.04.03 23:20 11
             גם פה הBUFFER שלך חסום. dryice 30.04.03 09:59 13
                 זה בהנחנה שה-N של דני AlexKarpman 30.04.03 12:48 14
                     אנחנו כלל לא בוויכוח. dryice 30.04.03 12:54 15
                         בערך AlexKarpman 30.04.03 13:26 18
                             באופן תיאורטי טהור. dryice 30.04.03 15:16 20
                                 עכשיו אני כבר לא מבין AlexKarpman 30.04.03 16:50 21
                                     בוא נגדיר סיבוכיות. dryice 30.04.03 19:53 22
                                         לא מתאים לי AlexKarpman 30.04.03 22:12 23
                     על מה בעצם אנחנו מדברים פה? liranr 30.04.03 13:08 16
                         כ''כ הרבה טעויות AlexKarpman 30.04.03 13:43 19

       
liranr

   20:39   27.04.03   
אל הפורום  
  1. תשובה (אולי)  
בתגובה להודעה מספר 0
 
   אם היו סתם שואלים אותי ב-ICQ, הייתי אומר שהתשובה היא כן,
אבל מכיוון ששאלת בתור חידה אני כמעט משוכנע שהתשובה היא לא, וככל שאני
חושב על זה יותר זה יותר הגיוני למה לא.
הסיבה (שאני הצלחתי לחשוב עליה) היא שהדפסת תו למסך היא פעולה בסיסית,
לא הדפסת מספר. למספר בעל k ספרות דרושה פונקציה לינארית ב-k להדפסתו
על המסך.
לכן על מנת להדפיס את כל המספרים בין 1 ל-N צריכים לבצע
(Log(1)+Log(2)+Log(3)+...+Log(n פעולות. אין לי כלים לחשב את הסכום
באופן מדוייק (אפשר בכלל?), אבל נראה לי שזהו ((O(n*Log(n, וזהו
החסם המינימלי ליעילות פונקציית ההדפסה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dryice

   20:51   27.04.03   
אל הפורום  
  2. בראבו!  
בתגובה להודעה מספר 1
 
   תשובה נכונה למדיי.
אפשר לחשב בדיוק מדהים, ואפשר להוכיח חסם.
אעשה קצת נפנופי ידיים בתקווה שזה ישכנע את הסקפטים:
יש לנו מספר N מאוד מאוד גדול, נשים לב שיש לנו
10 מספרים עם ספרה אחת ואילו 90 מספרים עם 2 ספרות
ו900 מספרים עם 3 ספרות וכן הלאה. קל לראות שלרוב
המספרים יש מספר ספרות כמו לN או אחד פחות. ומכאן
לוקח זמן שהוא לכל הפחות O(n*log(n))

וכעת לאחר שקבלנו תשובה נכונה, מי יודע להסביר מדוע בכל זאת
מה שנכתב לעיל לא ממש נכון ולא סתם כך
אף אחד לא מתייחס לשיקולים כאלו בחישובי סיבוכיות(חוץ מאולי
באקדמיה) ולמעשה כשאני כותב תוכנית במחשב אני באופן עקבי
מתייחס לדברים כאלו כאילו הם בסיבוכיות O(n) ולא כפי שנכתב לעיל.

DRYICE
נ.ב
התאכזבתי מהמהירות הזריזה קיוויתי שיקום מישהוא ויתעקש
שהוא יכול לכתוב את התוכנית בO(n)


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
yoash

   16:47   28.04.03   
אל הפורום  
  3. בגלל....  
בתגובה להודעה מספר 2
 
   אז ככה לפחות עד כמה שאני יודע (רמה של 5 יחידות מדעי המחשב)
כאשר יש קבוע שגודלו אינו תלוי ב n אתה מתעלם ממנו בחישוב הסיבוכיות.
משמע נגיד והייתה מבצע חמש לולאות (מ 0 עד N) שמציבות מספר אז נכון שהסיבוכיות הייתה 5n אבל אנחנו מתעלמים מ ה 5 ונשארים עם ה n.
עכשיו נחזור לחידה שלך ניקח בתור K גדול את המספר המקסימלי של ספרות שיכול להיות במסך ואז נראה שהסיבוכיות(המקרה הגרוע) ביותר היא:

O(n*log(k))

עכשיו בגלל שK הוא גודל יודע אז אפשר לחשב את log(k) משמה קבוע ואז אנחנו משמיתים אותו בחישוב הסיבוכיות.

מקווה שקלעתי לכוונתך.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dryice

   13:50   29.04.03   
אל הפורום  
  5. לא ממש, שכן מספר הספרות של המספר  
בתגובה להודעה מספר 3
 
   מאוד תלוי בN, והוא ממש לוגריתם בבסיס 10 מעוגל מעלה.
וכאשר סוכמים מ1 עד N מקבלים O(N*logN)

אבל למעשה אנו כמעט בכל מצב משתמשים במשתנים שלמים בגודל חסום,
ויש לנו פרימטיבים שמדפיסים אותם, כעקרון הדפסה של מספר
לוקחת O(logN) זמן אבל במקרים הפרקטיים שלנו N חסום(אבל מאוד גדול) אבל הלוגריתם בבסיס 10 יוצא משהוא מאוד מצומצם שאפשר
להתייחס עליו כאל קבוע, מה גם שיש פונקציות פרימיטיביות
שמטפלות בהדפסה כזאת.

אילו היינו משתמשים במשתנים שלמים בגודל שרירותי ובאמת משאיפים
את N לאינסוף, אזי הניתוח הראשוני היה נכון וסיבוכיות הזמן
הייתה באמת O(Nlog(N))

DRYICE


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
liranr

   15:04   29.04.03   
אל הפורום  
  6. זה לא מה שהוא אמר  
בתגובה להודעה מספר 5
 
   הוא עשה איזו טעות במתמטיקה, אבל מה שהוא התכוון (ויתקן אותי אם אני
טועה זה זה):
המסך יכול להכיל מקסימום k תווים בו זמנית (ו-k זה הוא אכן קבוע).
מכיוון שזה חסר משמעות להדפיס יותר תווים שהמסך יכול לקלוט, ניתן
לומר כי לכל הדפסה יש לא יותר k פעולות, ולכן היא (O(1, ולכן הפונקציה
הנתונה היא (O(n.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dryice

   09:53   30.04.03   
אל הפורום  
  12. זה ממש לא חסר משמעות!  
בתגובה להודעה מספר 6
 
   ראשית אפשר להריץ פלט על המסך כך שירוץ ברצף,
יש המון תוכניות שעושות את זה בכוונה שיראו(ועל כן רצות
לאט)
שנית אפשר להדפיס לקובץ, בPIPE לתוכנית אחרת וכו,
הדפסה לפלט סטנדרטי היא לא תמיד באמת למסך.

DRYICE


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
yoash

   17:56   29.04.03   
אל הפורום  
  8. טעות שלי לא הבנתי נכון.לא קראתי את השאלה נכון  
בתגובה להודעה מספר 5
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
no1

   13:25   30.04.03   
אל הפורום  
  17. טוב - ראיתי שאף אחד לא התקרב לפתרון - אז הנה:  
בתגובה להודעה מספר 2
 
   הסיבה להתעלם מהשיקול הנ"ל היא אותה הסיבה שבגללה אתה לא מתענין באיך בכלל המחשב מריץ לולאה עד N .
אם תיקח את התוכנית שלך ותעיף את שורת ה PRINT תקבל מונה פשוט .
עכשיו - מה הסיבוכיות ??
NlogN !!!

כי על מנת לתחזק מונה צריך באפר בגודל logN וכל פעולה עולה O של logN.
(למעשה יש מונים שבהם פעולה כזאת עולה O של 1 ממש אבל הם לא בינאריים).


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
eliran33

   19:17   28.04.03   
אל הפורום  
  4. זה תלוי...  
בתגובה להודעה מספר 0
 
   זה תלוי אם זמן ההדפסה של מספר כל שהוא תלוי במספר ספרותיו ...
אם לא והדפסה של מספר בלי קשר לאורכו היא O)1(
אז הסיבויכיות של הפונקציה היא O)N( כי היא תלויה ב N כאורך הקלט .


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Xman 

   15:10   29.04.03   
אל הפורום  
  7. (++for (i=1; i =N; i זה לא סיבוכיות ( O(N???  
בתגובה להודעה מספר 0
 
   עבר עריכה לאחרונה בתאריך 29.04.03 בשעה 15:12
 
לא הבנתי מה הסתבכתם פה?!? לולאה מ-1 עד N הדפס את N. למה LOG ובלאגנים?

*משום מה הוא לא כותב > בכותרת בשביל ה i<=N


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
AlexKarpman

   18:48   29.04.03   
אל הפורום  
  9. לא מסכים  
בתגובה להודעה מספר 0
 
   בס"ד

לדעתי האישית בלבד:
1. הפתרון שאתה מגדיר כ"תשובה נכונה למדיי" אינו נכון כלל ועיקר.
2. אתה מערב בין נושאים, מונחים ומושגים באופן לא נכון.
3. יש טעות בשאלה(נובע מ-2).

למה?
* תוכנית לא פועלת בזמן של O(N).
O(...) היא סיבוכיות.
לא זמן ריצה.

*סיבוכיות(O(...)) יש לאלגוריתם, לא לתוכנה.

* תוכנה המבוססת על אלגוריתם בעל סיבוכיות מסויימת וכשאר תפעל על אותו הקלט יכולה לעבוד פרק זמן שונה תלוי ב(שפת התכנות, היישום של האלגוריתם, היישום של מבני הנתונים וכו', ובאופן כללי ה**יישום**).

*הבלבול הוא בין תוכנה(זמן ריצה) לסיבוכיות(אלגוריתם; לא תוכנה).

*כלומר, השאלה אינה נכונה, ולכן א"T לענות עליה.

ש. האם האלגוריתם להצגת המספרים פועל ב-O(N)
ת. כן.
בקוד פסוודו-C האלגוריתם הוא:


for (i, i=i+1, i<=n)
{
print(i);
}

כפי שאפשר לראות עבור כל מספר מ-1 עד N עושים פעולת הדפסה אחת ויחידה.
O(N)

ש. האם התוכנה תדפיס את המספרים מ-1 על 9 באותה מהירות שהיא תדפיס מספרים מ-10 עד 99 וכו'?
ת. כמו שאמרתי, תלוי ביישום.


בברכה...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
liranr

   19:33   29.04.03   
אל הפורום  
  10. אני לא מסכים  
בתגובה להודעה מספר 9
 
   לגבי הניסוח של השאלה, אולי הוא לא יעבור מרצה באוניברסיטה, אבל
הבנת מה הכוונה, ואם לא הרשה לי לנסח מחדש:
מהו החסם התחתון לסיבוכיות אלגוריתם המדפיס את המספרים 1 עד N?
והתשובה היא לא (O(N, והפסאודו-קוד שלך לא מוכיח כלום.
הנה לדוגמא אלגוריתם שממיין מערך ב(O(1:
אלגוריתם מיין_מערך(A)
1. מיין(A)
אתה רואה את האבסורד? כל עוד לא הוכחת ש print עובד ב (O(1 (כלומר ממשת
פונקציית print, אפילו בפסאודו קוד, שעובדת בכזו סיבוכיות), אתה לא
יכול להניח את זה.

ואני לא מכיר שום מימוש שבו פונקציית ההדפסה תעבוד ב (O(1. אודה לך אם
תאיר את עיני


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
AlexKarpman

   23:20   29.04.03   
אל הפורום  
  11. מגוחך!!!  
בתגובה להודעה מספר 10
 
   בס"ד

1. השאלה פשוט לא נכונה.
לאלגוריתם יש סיבוכיות ואין לו מהירות-ביצוע.
לתוכנה יש מהירות-ביצוע ואין לה סיבוכיות.

"סיבוכיות של תוכנה" הוא מונח מעוות ולא נכון.

2. הנה מימוש ל-PRINT שעובד בזמן קבוע:
אנחנו עובדים במצב של Double Buffering מסויים שבו יש לכתוב את כל הפיקסלים לבאגר ואז להחליף בין הבאפרים.
אם אנחנו עובדים ברזולוציה של rx X ry אז יש צורך ב-rx*ry "השמות" של פיסקלים לבאפר, או כתיבה של rx*ry*k בתים(כאשר K הוא גודל של רשומה/כל דבר אחר שמגדיר צבע).
לא משנה מה נכתוב למסך - אנחנו תמיד כותבים את *כל* המסך לבאפר - אותו זמן ביצוע.

3. פסוודו-קוד.
לכתיבת אלגוריתם.
לא לכתיבת תוכנה.
אם אני מבצע את פעולת ההדפסה N פעמים(ורק פעולה זו, כמובן) אז הסיבוכיות היא O(N).
זה בהנחנה שפעולת ההדפסה פועלת בסיבוכיות קבועה(לא מהירות).
אם אתה לא מכיר דוגמאות כאלו - זה לא אומר שאני טועה; זה אומר שחסר לך ידע.
אני מבקש, אל תנסה להכשיל אותי ב"אודה לך אם תאיר את עיני" ושות'...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dryice

   09:59   30.04.03   
אל הפורום  
  13. גם פה הBUFFER שלך חסום.  
בתגובה להודעה מספר 11
 
   ואם ארצה להדפיס מספר גדול יותר הוא יקח לי מספר BUFFERים
למלא בזה אחר זה.

באלגוריתם יש פעולות שנחשבות כאטומיות ויש שלא(בעיקר כתלות במודל),
וזאת אפילו אם בשפת תיכנות או פסדו קוד זה או אחר.
אם נחשוב על מכונת טורינג אין ספק שפלט של מספר לוקח LOG(N)
זמן(צריך לכתוב אותו בסרט הפלט)
וכשאני מדפיס לפלט סטנדרטי אני מדפיס לפלט סדרתי!

DRYICE


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
AlexKarpman

   12:48   30.04.03   
אל הפורום  
  14. זה בהנחנה שה-N של דני  
בתגובה להודעה מספר 13
 
   עבר עריכה לאחרונה בתאריך 30.04.03 בשעה 12:49
 
בס"ד

זה בהנחנה שה-N של דני יהיה מספר בעל 1041 ספרות(וזה במצב של 26 של 40 שורות/עמודות), אם נעבוד ברזולוציה של 1200X1600 אפשר להכניס הרבה יותר...

בוא ננסה שוב...
במצב אני הצעתי לוקח להדפיס כל מספר(עד גבול מסויים) הזןמ שלוקח לדחוץ rx*ry*k בתים לבאפר.
אם ניקח מספר בסכאלה הבאה זה יקח rx*ry*k*2, אם ניקח מספר בסכאלה הבאה זה יקח rx*ry*k*3.
אז בעצם הנוסחה לחשב בזמן הדפסה של מספר אצלי היא rx*ry*k*n, כאשר rx ו-ry מציינים את הרזולוציה(rxXry), המספר שמציין את גודל הבלוק שמגדיר צבע הוא k, ו-n הוא הסכאלה.

עבור אותו מספר הסכאלה יכולה להיות שונה, תלוי ברזולוציה.

בוא נניח שאני עובד ברזולוציה של 800X600, צריך 3 בתים כדי להגדיר צבע של פיקסל מסויים(בית אחד עבור כל צבע ב-RGB, מ-0 על 255).
סתם, בלי לבדוק, בוא נניח שאפשר להספיד מספר בעל 3000 ספרות במצב הזה על מסך אחד(באפר אחד), כדי להדפיס מספר בעל 3001-6000 ספרות יהיה צורך ב-שני מסכים, וכו'.

בוא נבדוק כמה זמן יקח להדפיס את המספר 1.23456 * 10^43:
המספר בעל 39 ספרות, אם אני לא טועה, כלומר הוא נכנס למסף אחד, כלומר מדיפיסם אותו באותו הזמן שמדפיסים את המספר 1.23 * 10^10, ובאותו הזמן שלוקח להדפיס את המספר 10^2999, נכון?
יופי.
אם מדובא על לוג עשרוני(חזקות עשר), אז התוצאות הן:
LOG(1.23456 * 10^43) = 43.091
LOG(1.23 * 10^10) = 10.089
LOG(10^2999) = 2999

אבל הרי חישבנו למעלה שהזמן שלוקח להדפסי את המסרים הללו שווה!!!

אז אתה צודק, אם המסרפ מספיק גדול יקח יותר זמן להדפיס אותו...
אבל!
1. דני עושה בגרות של 5 יחידות.
אין לו מספרים בסדר גודל כזה, כי פסקל(שאני מניח שהוא עובד בה) טיפשה מלהתמודד עם מספרים כמו 10^2999...
2. יותר זמן, אבל לא LOG(N) - את זה הוכחתי כרגע.
אנא הסר את טענתך המטועה(לדעתי, כמובן, כמו שציינתי למעלה).
3. מדובר על יישום לכשהוא ב-PC כי דני(שעושה בגרות של 5 יחידות במחשבים) עובד על PC(או שאני לא מכיר מספיק בתי-ספר בארץ...).
4. עדיין אני צודק ואתה טועה בעניין ה"סיבוכיות של תוכנה" - אין דבר כזה.
5. עבור מספרים בסדר גודל "נורמלי", יספיק אפילו המוד הסטנדרטי של דוס כי יש שם 25 שורות X 80 עמודות(25*80=2000, 2000 ספרות מספיקות, לא?)

תיקון טעות:
ק עכשיו שמתי לב, ה-26 על 40 שכתבתי בהתחלה לא נכון, מדובר על 25 על 80 כמו שמצויין בסוף.
כמו כן, זה אומר שההערכה של 3000 ספרות שנתתי לרזולוציה של 800X600 אינה נכונה, ההערבה שלי היא כעת יותר בכיוון ה-10000 ספרות, כך שהסכאלה הראשונה עצומה וכל מספר "נורמלי", והרבה מספרים "לא נורמליים" יכנסו לבאפר הראשון
מה גם שאם המספר הוא 1.23456 * 10^43 אפשר(ואכן עושים כך) להדפיס 1.23456e+43, ולכן מספרים עצומים יכנסו לסכאלה הראושנה(אלא אם כן הם בחזקה שהיא עצמה ארוכה מ-1000 ומשהוא ספרות..., ואפילו אז אפשר לכתבו את המעריך שוב כחזקה...מספרים עצומים!!!

לסיכום:
ככל שאטני מתווכח עם יותר אנשים יורת פעמים של העניין הזה אני נהיה משוכני יותר ויותר שאני צודק ואילו אתה ו-liranr טועיפ טעויות רבות ומרובות(שביניהם להתעלם ממה שאמרתי למרות שזה נכון).

עריכה:
היה רשום "אודםם" במקום "".


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dryice

   12:54   30.04.03   
אל הפורום  
  15. אנחנו כלל לא בוויכוח.  
בתגובה להודעה מספר 14
 
   אני מציע שתקרא את תגובתי מספר 2 ו5 באשכול זה שוב.
ותגלה שמה שאתה כתבת הרגע למעשה נכתב על ידי קודם.

DRYICE


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
AlexKarpman

   13:26   30.04.03   
אל הפורום  
  18. בערך  
בתגובה להודעה מספר 15
 
   בס"ד

1. לא טענתי שאנחנו בויכוח.
רק אמרתי את דעתי על הנושא.

2. כמובן שקראתי את התגובות שלך.
אני נוהג לקרוא את כל האשכול לפני שאני מגיב.
העניין הוא שאתה טוען שמעשית לא מתחבים בעניין, אבל המצב הוא באמת כך וכך.
אני טוען שמעשית לא מתחשבים בעניין בגלל שהמצב *אני* כך וכך.

זה ההבדל בין הדעות שלנו.


בברכה...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dryice

   15:16   30.04.03   
אל הפורום  
  20. באופן תיאורטי טהור.  
בתגובה להודעה מספר 18
 
   הזכרון שלנו הוא אינסופי, ואנו יכולים להשתמש במשתנים שלמים
בגודל שרירותי ואכן לעיתים משתמשים בכאלו לכל מיני שימושים
משתמשים לפעמים במספרים עם מליון ספרות עשרוניות.
(חיפוש אחר מספרים ראשוניים גדולים)

להדפיס מספר בן מליון ספרות לוקח יותר זמן מלהדפיס מספר
בן ספרה אחת. בניתוח סיבוכיות מדברים על שאיפה לאינסוף
לכן 0.0001N^2 > 10000N
הזמן שלוקח להדפיס מספר בן N ספרות הוא אסמפטוטית בשאיפה לאינסוף
O(log(N))
ועל כן אלגוריתם שמדפיס את כל המספרים מ1 עד N יש לו סיבוכיות
O(N*log(N))
כל חישובי סיבוכיות הם כמובן תלויים בפלטפורמה, אבל קשה לי
לדמיין פלטפורמה בה הדפסה של מספר בגודל כרצוני תהיה פחות
מlog(N)


DRYICE


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
AlexKarpman

   16:50   30.04.03   
אל הפורום  
  21. עכשיו אני כבר לא מבין  
בתגובה להודעה מספר 20
 
   עבר עריכה לאחרונה בתאריך 30.04.03 בשעה 16:55
 
בס"ד

קודם כל, למיטב ידיעתי המספר הראושני הגדול ביותר שנמצא הינו בן 8 מיליארד ספרות(לא מיליונים:-)), אבל זה סתם משהוא נחמד...

נכון.
בכל יישום שאני מכיר להדפיס מספר בין מיליון ספרות יקח יותר זמן מלהדפיס מספר בן ספרה אחת.
אבל זה מדבר על זמן ריצה, לא על סיבוכיות.
אני לא יכול להסכים, ולא אסכים, להשוואה בין סיבוכיות לזמן ריצה.

לא הבנתי כלל את החיושבים שלך(אינסוף? איזה אינסוף?)
אתה יכול לפרט יותר?

בכל מקרה, אפילו אם תוכיח שזמן הריצה תלוי באורך המספר(ואני מסכים עם זה) זה לא אומר דבר על הסיבוכיות של האלגוריתם.

זמן ריצה של QuickSort כפתרון רקורסיבי ארוך הרבה יותר מהפתרון האיטרטיבי, אבל יש להם אותה הסיבוכיות...

בברכה...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dryice

   19:53   30.04.03   
אל הפורום  
  22. בוא נגדיר סיבוכיות.  
בתגובה להודעה מספר 21
 
   למעשה בוא נגדיר חסם תחתון לסיבוכיות.
נתון אלגוריתם שזמן הריצה שלו כתלות בN הוא f(n)
נאמר שסיבוכיות הריצה שלו היא לפחות g(n) אם ורק אם:
קיימים שלושה מספרים חיוביים k,c,d כך שלכל n>d
f(n)<=c*g(n)+k

DRYICE


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
AlexKarpman

   22:12   30.04.03   
אל הפורום  
  23. לא מתאים לי  
בתגובה להודעה מספר 22
 
   בס"ד

"סיבוכיות ריצה"
מה זה?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
liranr

   13:08   30.04.03   
אל הפורום  
  16. על מה בעצם אנחנו מדברים פה?  
בתגובה להודעה מספר 14
 
   על ניתוח תיאורטי או מעשי?
מבחינה מעשית, כמו ש dryice אמר , אין ספק שהדפסת מספר היא
(O(1 בקירוב מצויין, גם אם לא משתמשים בבאפר שלך. בכל מקרה הדיון
הוא תיאורטי מתמטי ולא מעשי.

פונקצייה (f(n תקרא ((O(g(n אם קיימים קבועים c,M כך שלכל n>M,
(f(n)<c*g(n. את ההגדרה הזאת, פונקציית ההדפסה לא ממלאת עבור g(n)=1, ולכן
ההדפסה היא לא (O(1 אלא ((O(log(n, לא משנה איך תנסה לעקם ולסובב את זה.

עכשיו נגיב לטענות שלך אחת לאחת:
1. טענות 1,3,5 - אז מה?? השאלה היא תיאורטית. מי אתה שתגדיר מה זה מספר
נורמלי? ואם בא לי להדפיס את גוגל-פלקס (100^10^10)?
2. טענה 2 - אף אחד לא אמר שזמן הריצה של פונקציית ההדפסה הוא (log(n.
רק אמרנו שהוא ((O(log(n. אם ההבדל לא ברור לך, קרא את ההגדרה לעיל.
3. טענה 4 - אתה אומר שיש סיבוכיות רק לאלגוריתם. לפסאודו קוד יש
סיבוכיות? אם לא מה ההבדל, פסאודו-קוד הוא לא הרבה יותר מצורת רישום
אחרת לאלגוריתם. אם כן, למה לפסאודו-קוד יש ולקוד פסקל אין? רק כי פסקל
ניתן לקימפול?
בלי קשר, זה לא ממש הנושא של הדיון, אז נעזוב את זה

תמצא לי קבוע M כך שכמות הפעולות הדרושות להדפסה של מספר (בלי קשר לגודלו), תהיה תמיד קטנה מ-M. אם אתה לא מוצא, הפונקציה היא לא
(O(1, וכל הפלפולים והדוגמאות לא משנים את העובדה הזאת.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
AlexKarpman

   13:43   30.04.03   
אל הפורום  
  19. כ''כ הרבה טעויות  
בתגובה להודעה מספר 16
 
   בס"ד

1. "דני שעשה בגרות 5 יחידות במחשבים כתב תוכנית מאוד פשוטה
המדפיסה על המסך את כל המספרים מ1 עד N".
זה נקרא "מעשי" ולא "תיאורטי מתמטי".
הבנת?
דיון תיאורטי מתמטי מתחילים ב"נניח שהיה לנו אלגוריתם ש..."


2. אין שום צורך להגיב על שאר ההודעה שלך כי טענת הבסיס שלך נשמטה תחת רגליך...אבל אני אעשה לך טובה...


3. בלה בלה בלה.
לא הסברת למה האלגוריתם פועל ב-O(Log(N)).
אתה סוטה מהנושא...או אולי מתחמק?


4. טענות 1,3,5 - השאלה אינה תיאוטית כמו שהוכחתי למעלה.
אני מצפה לתשובה רצינית.


5. "טענה 2 - אף אחד לא אמר שזמן הריצה של פונקציית ההדפסה הוא (log(n.
רק אמרנו שהוא ((O(log(n. אם ההבדל לא ברור לך, קרא את ההגדרה לעיל"
לפונקציה לא יכולה להיות תכונה כמו ((O(log(n.
כי לפונקציה אין סיבוכיות.
הסברתי את זה כבר מספר פעמים.
אם *אתה* לא מבין לך ללמוד קצת(קצת הרבה...)!


6. סמנטיקה:
*אלגוריתם הוא מונח מופשט.
א"א להחזיק אלגוריתם ביד.

* מייצגים אלגוריתם ע"י פסוודו-קוד.
פסוודו-קוד מייצג אלגוריתם - יש לו סיבוכיות ואין לו זמן ריצה.

*לקןד פסקל אין סיבוכיות כי זה יישום.
ליישום יש זמן ריצה ולא סיבוכיות(בניגוד להפשטה).


7. טעית בכל דבר שאמרת עד עכשיו.


8. אתה טועה גם בשורה האחרונה שלך.
m = inf.
לכן אפילו אם הקלט הוא הגודל של n -> inf, עדיין כמות הפעלות תהיה קטנה מאינסוף...


9. אל תשחק איתי.
אם אתה לא מבין תשאל, או לפחות אל תתערב.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net