סיבוכיות בלולאות

oripollak

New member
סיבוכיות בלולאות

נתון אלגוריתם שבו יש לולאה מקוננת כשהמונה של הלולאה החיצונית שונה מהמונה של הפנימית. משהו כזה: עבור i מ 1 עד n בצע עבור j מ 1 עד m בצע &nbsp &nbspהצג כפלט "שלום" מהי סיבוכיות האלגוריתם הזה? (O(n^2? או אולי (O(mn? (יש בכלל דבר כזה
?) תודה.
 

vinney

Well-known member
סיבוכיות זה פונקציה של גודל הקלט

אם N וM זה מדדים לגודל הקלט, אז זה O של N*M, אחרת - אין לי מושג על מה אתה מדבר.
 

EsMo

New member
../images/Emo26.gif

ברוב השאלות לגבי סיבוכיות מייצגים גודלי קלט באותיות שונות לפעמים זה גם כדי לא לבלבל אם מבצעים פעולות לוגיות על המשתנים בהם תלוי גודל הלולאה אבל בשורה התחתונה בסוף כולם הופכים להיות N לכן התשובה היא O של N^2
 

טיורינג

New member
לא בטוח

שכולם הופכים להיות N בסוף. עושים את זה בעיקר שאין שום דבר להגיד על היחס של M ושל N. אם M = O(N) אז אפשר להפוך את זה ל-O(N^2) אבל מה אם M = O(1)? ובאופן כללי, שלא יודעים בוודאות מה היחסים אז משאירים את זה O(M*N).
 

EsMo

New member
מניסיון שלי

כשיש פעולות שהם O של 1 כתוב על זה בתור הערה הניסיון שלי מסתכם עד כה בשנת לימוד בעתודה טכנולוגית אם מישהו יודע על כך משהו אחר אני אשמח לשמוע על כך
 

טיורינג

New member
יכול להיות

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

אמיתי ר

New member
ממש לא

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

vinney

Well-known member
שטויות במיץ

אתה מניח שM וN קשורים לינארית, אין שום סיבה שבעולם להנחה הזאת מהנתונים שקיבלנו מהשואל.
 

EsMo

New member
בא לי מיץ עכשיו...

בכל המבחנים שראיתי ועשיתי במדעי המחשב אף פעם לא ראיתי בתשובות O של X*Y זה תמיד היה N בחזקת משהו (או משהו עם לוג..) N זה סימן מוסכם ולא משנה איזה אותיות תוקעים בשאלה אולי באקדמיה ובמקומות שבונים דברים כבדים כן נותנים חשיבות לאותיות אבל לפי השאלה זה נראה לי כמו רמה של תיכון ושם התשובה תהיה N^2 נניח שאני עושה מבחן בתיכון ויש לי מטריצה בגודל A על B מה יהיה סדר גודל המעבר על כל תאי המטריצה ? לפי דעתי התשובה המתבקשת היא O של N^2 ולא O של A*B
 

EsMo

New member
טוב אז טעיתי ../images/Emo15.gif

מודה באשמה... זה O של M*N אבל בכל מקרה במבחנים האמריקאים שעשיתי אף פעם לא ראיתי M*N אז אני מפיל את האשמה על המערכת
 

vinney

Well-known member
אתה כנראה פיספסת את המשמעות

של N. זה לא סתם אות, זה יכול להיות כל אות, אבל יש לה משמעות מסוימת, היא מייצגת את גודל הקלט. במקרה של מטריצה A*B, מה המשמעות של N בתשובה המתבקשת שלך? שום משמעות. גודל הקלט שלך הוא A כפול B, אין שום N באמצע, וכך גם הסיבוכיות, שהיא לצורך העניין לינארית במספר התאים, תהיה A*B, ולא שום N^2.
 

karoitay

New member
אם רוצים לדייק...

הרי שאו גדול של הוא סימון לחסם עליון אסימפטוטי ולכן גם תשובה של ON^3 תהיה נכונה. (שהרי זמן הריצה חסום מלמעלה אסימפטוטית ע"י N^3 ) התשובה המדוייקת יותר היא תטה של N*M
 

vinney

Well-known member
זה לא נכון

כי אם M גדול מN^2? אתה שוב מניח קשר בין M לN, קשר שאף אחד לא הבטיח לך שקיים.
 
למעלה