שאלה לגבי יעילות מקום - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

שאלה לגבי יעילות מקום


Shoko

Recommended Posts

שלום,

יש לי שאלה שבה אני צריך לכתוב פונקציה שמקבלת מערך.

יעילות המקום של הפתרון שלי תלויה בערכים הקיימים במערך (מערך של מספרים) ולא באורך המערך.

כך שהמקסימום מקום תלוי ב- max int ובגודל של byte(ששניהם בעצם מס' קבועים).

האם יעילות המקום נחשבת o(1) ?

תודה

קישור לתוכן
שתף באתרים אחרים

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

קישור לתוכן
שתף באתרים אחרים

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

לא הבנתי איך זה o(n) (המקום) אם זה לא תלוי בגודל המערך אלא בערכים הנמצאים בו :confused:

קישור לתוכן
שתף באתרים אחרים

אז שוב אם מימשתי את זה כתלות בערכים במערך.

כך שהמקסימום שלי הוא max_int ותלוי בערכים שנמצאים במערך ולא באורכו האם זה גם נחשב o(n) ?

קישור לתוכן
שתף באתרים אחרים

סבבה בידיוק מישהו הסביר לי למה זה o(n) ולא אין שום הנחה חוץ מזה שזה מערך של int.

תודה...

עכשיו אני רק מתלבט בין פתרון של סיבוכיות מקום 1 וסיבוכיות זמן nlogn לבין הפתרון הזה בו שניהם o(n)

קישור לתוכן
שתף באתרים אחרים

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

במקרה שלך זה באמת לא משנה כי הכל כאן זניח ורץ מהר. בד"כ תבחר את זה עם סיבוכיות זמן הריצה הטובה ביותר.

קישור לתוכן
שתף באתרים אחרים

אפשר להשתמש במקרה הזה ב-HashMap שממפה int ל-int

עבור כל ערך תבדוק אם הוא קיים כבר ב-HashMap

אם לא, תוסיף אותו כ-Key עם Value שהוא 0

אם כן תקדם את ה-Value שלו ב-1.

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

לאחר מכן ניתן לעבור על כל ה-Key-Value ב-HashMap ולבדוק האם ה-Value מתאים ל-X שאתה מחפש אם כן ה-Key הוא המספר שאתה רוצה.

במקרה הטוב ביותר שכל הערכים במערך המקורי שלך הם זהים הלולאה השנייה תרוץ פעם אחת

במקרה הגרוע ביותר שכל הערכים במערך המקורי שלך הם שונים אחד מהשני הלולאה השנייה תרוץ O(n)

וכמובן ש-O(n)+O(n) זה עדיין O(n)

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...