הנדסה תוכנה ותכנות
הבנה של ההערה הגדולה לראיונות הצלחה
Table of Contents
מה זה Big-O Notation?
(ה) מדרש (ב) הוא מסגרת מתמטית המשמשת במדעי המחשב כדי לתאר את ביצועי ה-FLT:0worst-case PerformanceFLT:1 של אלגוריתם ככל שגודל הקלט גדל באופן פורמלי, הוא נותן גבול עליון על שיעור הצמיחה של פונקציה. עבור אלגוריתם עם גודל של חומרת אלגוריתם מופשטת:2nFLT3, לא אלגוריתמים (Fipper) אשר מאפשר מספר 1:5 (F) ל-(F) של מספר פעמים) ל-(F) של מספר פעמים, כלומר, כלומר, כלומר, כלומר, כלומר, כלומר, כלומר, מספר 1 (המספר מספר 7.
בראיונות קידוד, Big-O הוא הכלי הנפוץ ביותר לדיון ביעילות.ראיונות מצפים ממך להצדיק את ביצועי הפתרון שלך, וכאשר אפשר, להציע חלופות יעילות יותר. תפיסה מוצקה של Big-O מעניקה לך את אוצר המילים כדי לבטא את פערי הסחר בין הזמן למרחב, וזה מסמל את העובדה שאתה חושב באופן ביקורתי על יכולת מדרגיות - מיומנות חיונית לטיפול בנתונים אמיתיים בעולם.
למה דברים גדולים בראיונות
ראיונות מציבים בעיות אלגוריתמיות לא רק כדי לראות אם אתה יכול לייצר פתרון עבודה, אלא כדי להעריך את תהליך פתרון הבעיה שלך. Big-O ממלא תפקיד מרכזי בהערכה זו.כאשר אתה מתאר את המורכבות של הזמן של הגישה שלך, אתה מדגים מודעות למגבלות ביצועים - אפילו לבעיות המופיעות טריוויאליות יותר.
בנוסף, דיון ב- Big-O מראה כי אתה יכול סיבה לגבי ה- Tradingoffs בין אסטרטגיות שונות.לדוגמה, באמצעות זיכרון נוסף (מרחב) כדי להאיץ את זמן הריצה (זמן) הוא דפוס ראיון קלאסי.להיות מסוגל להסביר מדוע שולחן היש מניב מניבה נותן מבטים O(1) בעוד רשימה דורשת O(n) יכול להגדיר אותך בנפרד ממועמדים שרק לפתור את הבעיה מכנית.
מורכבות הזמן המשותף מסבירים דוגמאות
(1) - זמן קבוע
אלגוריתם פועל בזמן קבוע כאשר זמן ההוצאה להורג שלו אינו תלוי בגודל קלט.(FLT:0Example: FLT:1 גישה לרכיב על ידי אינדקס במערך.לא משנה אם למערך יש 10 או 10 מיליון אלמנטים, המראה לוקח את אותו מספר של שלבים מכונה.
def get_first(arr):
return arr[0] # O(1)
(צילום: Logarithmic Time)
מורכבות לוגית מתעוררת כאשר האלגוריתם שוב ושוב משנה את גודל הקלט.FLT:0Example: FLT:1 חיפוש בינארי על מערך ממונן.כל אחד מהם מפסל חצי מהאלמנטים הנותרים, כך שמספר הפעולות הוא פרופורציונלי ל- log2(n).
def binary_search(arr, target):
left, right = 0, len(arr)-1
while left <= right:
mid = (left+right)//2
if arr[mid] == target: return mid
elif arr[mid] < target: left = mid+1
else: right = mid-1
return -1 # O(log n)
O(n) - Linear Time
אלגוריתמים של הזמן קואר מבצעים מעבר אחד על הקלט:0 (Example:0) .Example: FIRLT:1 מציאת הערך המקסימלי ברשימה שאינה מנוסחת.
def find_max(arr):
max_val = arr[0]
for i in arr[1:]:
if i > max_val: max_val = i
return max_val # O(n)
O(n log n) - Log-Linear Time
מורכבות זו אופיינית לאלגוריתמים יעילים כמו מיזוגים, heapsort, ואת הספריה הסטנדרטית סוג בשפות רבות.זה נובע מחלוקת הקלט לתוך חצאים (רמות log n) וביצוע עבודה ליניארית בכל רמה (פעילות ברמה).
def mergesort(arr):
if len(arr) <= 1: return arr
mid = len(arr)//2
left = mergesort(arr[:mid])
right = mergesort(arr[mid:])
return merge(left, right) # O(n log n)
O(n2) - זמן רב-רשמי
זמן רב-ממדי מופיע כאשר הבחנתם בלולאות על הקלט:0Example:FLT:1 בועה, שבו הלולאה החיצונית רץ n פעמים ואת הלולאה הפנימית (n- i) פעמים, וכתוצאה מכך n(n-1)/2 ⁇ n2 השוואות.
def bubble_sort(arr):
for i in range(len(arr)):
for j in range(len(arr)-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j] # O(n²)
O(2n) - זמן אקסטנטי
מורכבות אקסטנטית מתרחשת כאשר כל צעד מכפיל את מספר האפשרויות.0Example:FLT:1 תמימות חישוב חוזר של המספרים פיבונצ'י ללא מזכרון.עץ הסיור גדל באופן אקספוננציאלי, מה שהופך את הגישה הזאת לבלתי מעשית עבור n > 30 או כך.
def fib(n):
if n <= 1: return n
return fib(n-1) + fib(n-2) # O(2^n)
כיצד לנתח את המורכבות של אלגוריתאם
ניתוח מאסטרינג ביג-O דורש גישה שיטתית.עקוב אחר השלבים האלה כאשר אתה נתקל באלגוריתם בראיון:
- (ב) ויקרא י"ד: ויקרא י"ד): "וַיְּהַבְתָּבְתָּבְתָּבְתָּבוּ" (במדבר כ"ד, כ"ד)
- (ב) ,0) מצא את המבצע הדומיננטי של LT:1 - הפעולה שתורמת את מירב הזמנים (למשל, השוואה במיין, גישה למערך בחיפוש).
- (ב) כמה פעמים המבצע מבצע את ה-[[1924]] כתפקידו של [[המאה ה-[[1924]]
- (FLT:0)Drop גורמים קבועים ומונחי הזמנה נמוכים יותר: לשמור רק את המונח הצומח המהיר ביותר.לדוגמה, 3n2 + 5n + 1 הופך O(n2).
- (ב) [ה]], אם לא צוין אחרת, נניח שהקלט הגורם למבצעים הרבים ביותר.
עבור מורכבות חלל, ליישם את אותו ההיגיון לשימוש בזיכרון.אל תספור את הקלט עצמו - רק אחסון נוסף שהוקצה במהלך ביצוע.
מלכודות נפוצות וטעויות
« מבלבלים את הטוב ביותר, הממוצע והגרוע ביותר
גדול-O כמעט תמיד משמש כדי לציין את המורכבות של ה-FLT:0worst-caseFreaLT 1 ; עם זאת, אתה צריך להיות מוכן לדון במורכבות של התיק הממוצע (למשל, ממוצעי מהירות O(n log n) אבל הגרוע ביותר O(n2) ראיונות מעריכים מועמדים שיכולים להבדיל ולהסביר ביצועים אמיתיים.
התעלמות מגורמים קבועים
בעוד ש-Big-O מתעלם מקבועים, בפועל אלגוריתם של אלגוריתם A O(n) עם קבוע ענק עשוי להיות איטי יותר מאשר O(n2) אחד עבור קטן FLT:0nentiFLT:1 בראיונות, להזכיר כי אתה מבין קבועים אבל להתמקד בביצועים אסימפטוטיים.
שכחה ל- Analyze Space
מורכבות הזמן היא לעתים קרובות המוקד העיקרי, אבל מורכבות החלל חשובה באותה מידה.מרואיינים רבים שואלים ישירות: "מה המורכבות של החלל?", תמיד להיות מוכנים למצב הן, ולקבוע האם יש משקל זיכרון נוסף עם גודל קלט או נשאר קבוע.
« בהנחה שכל הלופים הם O(n)
שתי לולאות מקונן לא תמיד אומרות O(n2).אם הלולאה הפנימית מפעילה מספר קבוע של פעמים (למשל, הצטברות על גודל אלפבית קבוע), סך הכל הוא O(n).
טיפים מעשיים ליום ראיון
- התחל עם פתרון כוח רוטט וסמן את המורכבות שלו.אז להציע אופטימיזציה ודן כיצד כל שינוי משפיע על Big-O.
- השתמש ב-Big-O כלי תקשורת: "הפתרון הנוכחי שלי הוא O(n2) בגלל לולאה מזוננת על כל הזוגות.We Could להפחית אותו ל- O(n log n) על ידי מיון ראשון, או ל- O(n) באמצעות מפת hash."
- כאשר התבקש לנתח את הקוד שלך, לעבור דרך זה קו על ידי קו.סביר אילו הצהרות להוסיף לספירה (למשל, לולאות, שיחות חוזרות).
- להיות נוח עם עצי משפחה משותפים: לולאה על קלט O(n), סיור שמפוצל קלט O(log n) או O(n log n), טיול כי סניפי בכבדות O(2n).
- דעו כי Big-O הוא רק מדד אחד.דון במסחר כמו קוד קורא, שמירה על יכולת ומגבלות קלט (למשל, n קטן עשוי לטובת פתרון פשוט יותר O(n2)).
משאבים חיצוניים להבנה עמוקה יותר
כדי לחזק את הידע שלך, לחקור את ההפניות האלה:
- (ב) ⁇ :0 (Wikipedia: Big O NotationveFLT:1) - סקירה מתמטית מקיפה.
- האקדמיה: ⁇ 0 ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
- (ב) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
מסקנה
הבנת הסימון ביג-O היא אבן הפינה של ראיונות מוצלחים.זה מאפשר לך סיבה לגבי ביצועי אלגוריתם, תקשורת יעילות בבירור, ולוודא את העסקאות המיודעות במהלך פתרון בעיות.על ידי הפעלת ניתוח של אלגוריתמים משותפים, הימנעות ממכשולים טיפוסיים, ודן המורכבות בכל פתרון שאתה בונה, אתה תפגין חשיבה הנדסית בוגרת.