Skip to content

Latest commit

 

History

History
370 lines (297 loc) · 29 KB

README.he-IL.md

File metadata and controls

370 lines (297 loc) · 29 KB

אלגוריתמים ומבני נתונים ב-JavaScript

CI codecov גודל המאגר

מאגר זה מכיל דוגמאות מבוססות JavaScript של אלגוריתמים ומבני נתונים פופולריים רבים.

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

קרא זאת בשפות אחרות: 简体中文, 繁體中文, 한국어, 日本語, Polski, Français, Español, Português, Русский, Türkçe, Italiana, Bahasa Indonesia, Українська, Arabic, Tiếng Việt, Deutsch, Uzbek

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

מבני נתונים

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

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

B - מתחיל, A - מתקדם

אלגוריתמים

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

B - מתחיל, A - מתקדם

אלגוריתמים לפי נושא

אלגוריתמים לפי פרדיגמה

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

כיצד להשתמש במאגר זה

התקנת כל התלויות

npm install

הרצת ESLint

ייתכן שתרצה להריץ אותו כדי לבדוק את איכות הקוד.

npm run lint

הרצת כל הבדיקות

npm test

הרצת בדיקות לפי שם

npm test -- 'LinkedList'

פתרון בעיות

אם הלינטינג או הבדיקות נכשלים, נסה למחוק את התיקייה node_modules ולהתקין מחדש את חבילות npm:

rm -rf ./node_modules
npm i

בנוסף, ודא שאתה משתמש בגרסת Node נכונה (>=16). אם אתה משתמש ב-nvm לניהול גרסאות Node, תוכל להריץ nvm use מתיקיית השורש של הפרויקט והגרסה הנכונה תיבחר.

שטח משחקים

אתה יכול לשחק עם מבני נתונים ואלגוריתמים בקובץ ./src/playground/playground.js ולכתוב בדיקות עבורו ב-./src/playground/__test__/playground.test.js.

לאחר מכן פשוט הרץ את הפקודה הבאה כדי לבדוק אם קוד שטח המשחקים שלך עובד כמצופה:

npm test -- 'playground'

מידע שימושי

הפניות

סימון ה-O הגדול

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

גרפי ה-O הגדול

מקור: Big O Cheat Sheet.

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

סימון ה-O הגדול חישובים ל-10 אלמנטים חישובים ל-100 אלמנטים חישובים ל-1000 אלמנטים
O(1) 1 1 1
O(log N) 3 6 9
O(N) 10 100 1000
O(N log N) 30 600 9000
O(N^2) 100 10000 1000000
O(2^N) 1024 1.26e+29 1.07e+301
O(N!) 3628800 9.3e+157 4.02e+2567

מורכבות פעולות מבני נתונים

מבנה נתונים גישה חיפוש הכנסה מחיקה הערות
מערך 1 n n n
מחסנית n n 1 1
תור n n 1 1
רשימה מקושרת n n 1 n
טבלת גיבוב - n n n במקרה של פונקציית גיבוב מושלמת, העלויות יהיו O(1)
עץ חיפוש בינארי n n n n במקרה של עץ מאוזן, העלויות יהיו O(log(n))
עץ B log(n) log(n) log(n) log(n)
עץ אדום-שחור log(n) log(n) log(n) log(n)
עץ AVL log(n) log(n) log(n) log(n)
מסנן בלום - 1 1 - תוצאות חיוביות שגויות אפשריות בעת חיפוש

מורכבות אלגוריתמי מיון מערכים

שם הטוב ביותר ממוצע הגרוע ביותר זיכרון יציב הערות
מיון בועות n n2 n2 1 כן
מיון הכנסה n n2 n2 1 כן
מיון בחירה n2 n2 n2 1 לא
מיון ערימה n log(n) n log(n) n log(n) 1 לא
מיון מיזוג n log(n) n log(n) n log(n) n כן
מיון מהיר n log(n) n log(n) n2 log(n) לא מיון מהיר בדרך כלל מבוצע במקום עם O(log(n)) שטח מחסנית
מיון צדפות n log(n) תלוי ברצף הפער n (log(n))2 1 לא
מיון ספירה n + r n + r n + r n + r כן r - המספר הגדול ביותר במערך
מיון בסיס n * k n * k n * k n + k כן k - אורך המפתח הארוך ביותר

תומכי הפרויקט

אתה יכול לתמוך בפרויקט זה דרך ❤️️ GitHub או ❤️️ Patreon.

אנשים שתומכים בפרויקט זה ∑ = 1

מחבר

@trekhleb

כמה פרויקטים ומאמרים נוספים על JavaScript ואלגוריתמים ב-trekhleb.dev* B [משחק הקפיצות](src/algorithms/uncategor * B [חיפוש בינארי](src/algorithms