3D globe techno background

מה זה אלגוריתמיקה ולמה צריך אותה?

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

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

בקצרה:

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

בהרחבה:

מה זה אלגוריתם?

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

ובהרחבה:

“אלגוריתמיקה היא דרך שיטתית וחד משמעית לביצוע של מטלה. הדרך צריכה להיות מפורטת, כך שניתן לבצע אותה באופן יחיד וברור”.

אלגוריתמים יכולים לפעול על מידע גולמי ועל מבני נתונים.

מבנה נתונים היא דרך לסדר את המידע בתוכנה כך שאפשר יהיה לשלוף אותו בתוכנה ולהשתמש בו.

המונח אלגוריתם יכול לתאר פעולה פשוטה, לדוגמה הכנת קפה שחור.

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

המונח יכול לתאר גם תהליך מאוד מורכב:

  1. חשב מסלול חלוקה לנהג משאית, שצריך לעבור ב-50 חנויות שונות באותו יום, וימזער את עלות הדלק שלו.
  2. מצא הודעות ספאם וסנן אותן.
  3. מצא את אנשי הקשר מהרשימה שמכילים את השם “X”.
  4. מצא את הסיכוי למחלה גנטית של אדם מריצוף הDNA שלו.

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

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

מתי משתמשים באלגוריתמים? 

כל מתכנת משתמש באופן תדיר באלגוריתמים בין אם במודע או בין אם לא.

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

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

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

אלגוריתמים הם לא רק למתכנתים

בפועל, כולנו מיישמים אלגוריתמים בחיים שלנו.

ניתן למדוד כל אלגוריתם ע”י:

  • עלויות ריצה
    • סיבוכיות ריצה, זמן העיבוד בסביבת חומרה מסוימת. Lower is better.  
    • סיבוכיות זיכרון,  כמות העזרים שצריך ע”מ  לבצע את האלגוריתם
  • סטטיסטים – איכות תוצר שמתחלקים בהתאם לסוג המטלה
    • סיכוי לתוצר אופטימלי.
    • ציון לתוצר ממוצע.
    • גילוי וטיפול בחריגים.
    • False positive וחבריו.
    • ועוד הרבה מעבר למסגרת מאמר זה.

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

אלגוריתמים בעולם הפיזי

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

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

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

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

למזלנו, במחשבים, לרבות מהבעיות ישנו “פתרון בית ספר” – פתרון שנלמד מהספר והוא נותן את התשובה האופטימלית לבעיה (לדוגמא בקורס זה).

בבסיס, צריך ללמוד מבני נתונים סטנדרטים ועבודה מולם, לרבות:

  • חיפוש ושליפת איבר במבנה נתונים.
  • מיון של איברים במבנה נתונים לפי סדר מסוים.
  • מציאת מסלולים אופטימליים.
  • איחוד נתונים.

וגם להכיר אלגוריתמים ושיטות עבודה כמו:

  • תכנות דינאמי – מעבר על המידע בסדר מסויים, כך שנוכל להסתמך על תוצאות חישוב קודם ולחסוך פעולות Dynamic Programming.
  • ביצועי אופטימיזציה – מציאת הפתרון האופטימלי המקומי לפתרון הבעיה מתוך הנחת עבודה שזה יהיה גם האופטימום הגלובלי Greedy algorithm .
  • עבודה רקורסיבית – האלגוריתם ימשיך לעבוד בצורה חזרתית עד שהבעיה תפתר Recursive algorithm.
  • חלוקה למקטעים – פתרון בעיות בצורה אינקרמנטלית, מציאת הפתרון בשלבים  Backtracking algorithm .

מתי נבחר באלגוריתמים “נחותים”? (לא כדאי להסתבך)

חשוב לציין, שיש מקרים בהם לא כדאי להשתמש באלגוריתמים הכי טובים (אך מסובכים), ורצוי ללכת לכיוון של “הפתרון הפשוט (הבנאלי / Brute force)”.

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

כדי להחליט אם להשתמש באופציה של “הפתרון הבנאלי”, לוקחים בחשבון את הדברים הבאים:

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

מדוע חשוב למתכנתים להכיר ולדעת לעבוד עם אלגוריתמים ומבני נתונים?

האימפקט לכך הוא רחב:

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

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

לקבלת קובץ שאלות האלגוריתמים הנפוצות בראיונות עבודה עם הפתרונות שלהן השאירו פרטים והשאלות והתשובות יישלחו אליך מיידית ישירות לדוא”ל, בשלחת הפרטים הינך מאשר הרשמה לרשימת תפוצה.

לסיכום

אני פוגש הרבה מתכנתים שנרתעים מלימוד, שימוש או לא מכירים אלגוריתמים כלל.

מקווה שלאחר קריאת הפוסט הזה המונח נשמע לכם פחות “מאיים” ואתם מבינים שאתם בעצם כבר יודעים מה זה אלגוריתמים ומבני נתונים ואפילו משתמשים בהם בעבודתכם וגם ביום-יום, בלי לדעת אפילו.

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

עוד באותו נושא

שפת גוף בראיון עבודה

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

קרא עוד...

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *

מעניין אתכם ורוצים עוד?

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

דילוג לתוכן