סיבוכיות המערך ביעילות חלק 2

בחלק הקודם דיברתי על קוד PHP אשר גרם לי להרבה שקט. ואז הצגתי בעיה:

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

אז מה עושים ?

  1. להשתמש בהרצת הפקודה ls עם glob (למי שלא מכיר, glob זה ההוראות לאיזה תוכן להחזיר לנו, למשל סימן שאלה, כוכבית וכו'…).
  2. לרוץ על כל קובץ וקובץ ולהתחיל לפרק אותו לתווים. אני לא זוכר איך נקרא האלגוריתם, אבל משתמשים בו בד"כ בביצוע מילון.
  3. ריצה על מערך מלא בקבצים, ובכל קובץ, להתחיל לראות אם יש איבר במערך אשר מכיל כמה שיותר תווים מהקובץ שנמצא. אם הכל היה שווה עד שהגענו לסוף המחרוזת באיבר, אז כנראה שמצאנו.
  4. אפשרות נוספת היא לעשות אותו הדבר, כמו אפשרות 3, תוך שימוש בפונקציות של PHP.
  5. ואתם מוזמנים לחשוב על עוד כמה ….

אני בחרתי באפשרות הרביעית וכתבתי את הדבר הבא:

 

foreach ($files as $index => $value) {

foreach ($list as $key => $name) {

if (strncmp($name, $value, strlen($name)) == 0) {

$list[] = $value;

break;

}

}

}

 

פשוט 🙂

2 מחשבות על “סיבוכיות המערך ביעילות חלק 2

  1. צפריר

    הערה לגבי glob: אתה יכול לגשת אליה ישירות מכל שפת תכנות נורמלית. אתה לא צריך "להשתמש ב־ls" (למעשה: ls לא מרחיב wildcards אלא ה־shell שקורא לו).

    במקרה של PHP:‏
    http://il2.php.net/manual/en/function.glob.php
    ר' שם גם האפשרות GLOB_BRACE . אני לא יודע עד כמה היא פורטבילית: היא מסתמכת על הרחבה של גנו במימוש של glob .

    בכל מקרה, יש לך כאן שלוש רמות של לולאות (לולאה בתוך לולאה, ובתוך הלולאה הפנימית strncmp ו־strlen).

להשאיר תגובה

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

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת /  לשנות )

תמונת גוגל

אתה מגיב באמצעות חשבון Google שלך. לצאת מהמערכת /  לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת /  לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת /  לשנות )

מתחבר ל-%s

This site uses Akismet to reduce spam. Learn how your comment data is processed.