נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
מדעי המחשב
RSS UnderWarrior Forums : RSS מדעי המחשב
נושא

נושא: בעיה אלגוריתמית נוספת

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
snaidis
משתמש מתחיל
משתמש מתחיל
סמל אישי

הצטרף / הצטרפה: 24 October 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 25
נשלח בתאריך: 29 October 2005 בשעה 08:16 | IP רשוּם
ציטוט snaidis

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

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

כתוב תכנית אשר הקלט שלה הוא מספר שלם 5 £ N £ 1000 ,N , ואחריו תמורה אקראית (סידור אקראי) של המספרים  1, 2, .., N; והפלט שלה זוגיות מספר הזוגות הלא-סדורים בתמורה הנתונה. זוג לא-סדור של מספרים הוא זוג מספרים אשר אינם מסודרים בתמורה אחד ביחס לשני, כלומר – הגדול שבהם נמצא בתמורה משמאל לקטן שבהם.

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

למשל, עבור התמורה:    4  3  1  6  2  5   יהיה הפלט "זוגי", עקב 8 זוגות מספרים לא-סדורים:  5,2   5,1   2,1   6,1   5,3   6,3   5,4   6,4.

חזרה לתחילת העמוד הצג את כרטיס החבר של snaidis חפש הודעות אחרות של snaidis בקר בדף הבית של snaidis
 
ניר
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 12 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 3296
נשלח בתאריך: 29 October 2005 בשעה 12:11 | IP רשוּם
ציטוט ניר

זה קל, מפתיע שאנשים לא הצליחו.

שלב א':
נגדיר רשימה מקושרת listNumbers - שהאיבר הראשון בה מייצג את המספר N והמספר האחרון בה מייצג את 2. זמן בניית הרשימה: O(N) צעדים.

שלב ב':
נגדיר מערך arrNumbers באורך N שבו התא ה-N מצביע לאיבר המתאים ב-listNumbers. בניית המערכת ואתחולו לערכים הנכונים: O(N) צעדים. המערך מאפשר לנו להגיע לכל איבר ברשימה ב-O(1).

שלב ג', הדפסת כל המספרים הדרושים:
נניח כי הפרמוטציה נתונה לנו במערך A.
נעבור על A בצורה סדרתית. עבור כל איבר a ב-A:
  1. נשתמש במערך arrNumbers כדי לגשת במהירות לאיבר המתאים ברשימה. הדפס את כל האיברים ברשימה המופיעים אחרי האיבר שאליו הגענו, בפורמט הרצוי לפי הדרישות.
  2. הסר את האיבר a מהרשימה המקושרת  - (O(1


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

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

מכאן שסיבוכיות הפתרון אופטימלית.


__________________
מספר האייסיקיו שלי ו/או כתובת ה-MSN שלי אינם מהווים מוקד תמיכה
חזרה לתחילת העמוד הצג את כרטיס החבר של ניר חפש הודעות אחרות של ניר בקר בדף הבית של ניר
 
shirbi
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 18 September 2005
משתמש: מנותק/ת
הודעות: 8
נשלח בתאריך: 29 October 2005 בשעה 16:59 | IP רשוּם
ציטוט shirbi

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

בכל אופן, האלגוריתם שלך עובד בסיבוכיות O של N בריבוע. כך לדוגמה את המקרה שהפרמוטציה היא סידור המספרים מהגדול עד הקטן. עבור N תעבור על כל הרשימה. עבור האיבר הבא N-1 תעבור על N-1 איברים, וכן הלאה.


__________________
אתר הבדיחות של שב"י
חזרה לתחילת העמוד הצג את כרטיס החבר של shirbi חפש הודעות אחרות של shirbi בקר בדף הבית של shirbi
 
ניר
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 12 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 3296
נשלח בתאריך: 29 October 2005 בשעה 17:14 | IP רשוּם
ציטוט ניר

אהה.. חשבתי שצריך להדפיס - לא קראתי טוב.

אני אסתכל בהמשך על השאלה החדשה


__________________
מספר האייסיקיו שלי ו/או כתובת ה-MSN שלי אינם מהווים מוקד תמיכה
חזרה לתחילת העמוד הצג את כרטיס החבר של ניר חפש הודעות אחרות של ניר בקר בדף הבית של ניר
 
snaidis
משתמש מתחיל
משתמש מתחיל
סמל אישי

הצטרף / הצטרפה: 24 October 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 25
נשלח בתאריך: 29 October 2005 בשעה 17:18 | IP רשוּם
ציטוט snaidis

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

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

קפיצה לפורום
אינך יכול/ה לשלוח נושאים חדשים בפורום זה
אינך יכול/ה להגיב לנושאים בפורום זה
אינך יכול/ה למחוק את הודעותיך ותגוביך בפורום זה
אינך יכול/ה לערוך את הודעותיך ותגובותיך בפורום זה
אינך יכול/ה לצור סקרים בפורום זה
אינך יכול/ה להצביע בסקרים בפורום זה