הבדלים בין גרסאות בדף "סיבוכיות"

מתוך Math-Wiki
קפיצה אל: ניווט, חיפוש
(יצירת דף עם התוכן "סיבוכיות היא דרך להשוות בין קצב גידול של פונקציות ממשיות. הסיבוכיות של פונקציה אינה מושפע...")
 
(יחסים בין פונקציות נפוצות)
 
(13 גרסאות ביניים של אותו משתמש אינן מוצגות)
שורה 2: שורה 2:
  
  
== או גדול, אומגה, תטה ואו קטן ==
+
== או גדול, אומגה, תטה ==
 
'''הגדרה''' תהיינה <math>f,g:\mathbb{N}\to\mathbb{R}_{\geq 0}</math> פונקציות אי שליליות מהטבעיים לממשיים.
 
'''הגדרה''' תהיינה <math>f,g:\mathbb{N}\to\mathbb{R}_{\geq 0}</math> פונקציות אי שליליות מהטבעיים לממשיים.
 
* נאמר ש-<math>f(n)=O(g(n))</math> אם קיים <math>C>0</math> ממשי ו-<math>n_0\in\mathbb{N}</math> כך ש-<math>f(n)\leq Cg(n)</math> לכל <math>n>n_0</math> (הקבוע <math>C</math> יכול להיות גדול כרצוננו).
 
* נאמר ש-<math>f(n)=O(g(n))</math> אם קיים <math>C>0</math> ממשי ו-<math>n_0\in\mathbb{N}</math> כך ש-<math>f(n)\leq Cg(n)</math> לכל <math>n>n_0</math> (הקבוע <math>C</math> יכול להיות גדול כרצוננו).
 
* נאמר ש-<math>f(n)=\Omega(g(n))</math> אם קיים <math>C>0</math> ממשי ו-<math>n_0\in\mathbb{N}</math> כך ש-<math>f(n)\geq Cg(n)</math> לכל <math>n>n_0</math> (הקבוע <math>C</math> יכול קטן גדול כרצוננו).
 
* נאמר ש-<math>f(n)=\Omega(g(n))</math> אם קיים <math>C>0</math> ממשי ו-<math>n_0\in\mathbb{N}</math> כך ש-<math>f(n)\geq Cg(n)</math> לכל <math>n>n_0</math> (הקבוע <math>C</math> יכול קטן גדול כרצוננו).
 
* נאמר ש-<math>f(n)=\Theta(g(n))</math> אם <math>f(n)=O(g(n))</math> וגם <math>f(n)=\Omega(g(n))</math>, כלומר קיימים <math>C_1,C_2>0</math> ממשיים ו-<math>n_0\in\mathbb{N}</math> כך ש-<math>C_1g(n)\leq f(n)\leq C_2g(n)</math> לכל <math>n>n_0</math>.
 
* נאמר ש-<math>f(n)=\Theta(g(n))</math> אם <math>f(n)=O(g(n))</math> וגם <math>f(n)=\Omega(g(n))</math>, כלומר קיימים <math>C_1,C_2>0</math> ממשיים ו-<math>n_0\in\mathbb{N}</math> כך ש-<math>C_1g(n)\leq f(n)\leq C_2g(n)</math> לכל <math>n>n_0</math>.
 +
לעיתים משתמשים גם בהגדה הבאה:
 +
* נאמר ש-<math>f(n)=o(g(n))</math> (סימון אחר <math>f(n)\ll g(n)</math>) אם <math>\lim_{n\to\infty}\left|\frac{f(n)}{g(n)}\right|=0</math>. (הגדרה זו תקפה גם עבור פונקציות המקבלות ערכים שליליים ולכן הערך המוחלט.)
 +
 +
'''דוגמא:''' אם <math>f(n)=n^3</math> ו-<math>g(n)=2n^2</math> אז לא קשה לראות ש-<math>f(n)=\Omega(g(n))</math> ו-<math>g(n)=O(f(n))</math> אבל לא מתקיים <math>f(n)=\Theta(g(n))</math>.
 +
 +
'''קצת אינטואיציה:''' <math>f(n)=O(g(n))</math> אומר ש-<math>f</math> גדלה כמו <math>g</math> או פחות מכך (עד כדי כפל בקבוע). <math>f(n)=\Omega(g(n))</math> אומר ש-<math>f</math> גדלה כמו <math>g</math> או יותר מכך (עד כדי כפל בקבוע).
 +
 +
'''הערה:''' כשכותבים <math>O(f(n))</math> בחישובים (לדוגמא: <math>n+O(\lg n)</math>) בדרך כלל מתכוונים לפונקציה שהיא <math>O(f(n))</math>. הנ"ל נכון גם עבור <math>\Theta,\Omega,o</math>.
 +
 +
'''הערה:''' ההגדרות לעיל תקפות גם עבור פונקציות מ-<math>\mathbb{R}_{\geq 0}</math> ל-<math>\mathbb{R}_{\geq 0}</math>
 +
 +
== תכונות בסיסיות ==
 +
 +
נניח כי <math>f,g:\mathbb{N}\to\mathbb{R}_{\geq 0}</math> אזי:
 +
*<math>f(n)=O(f(n))</math>. כנ"ל עבור <math>\Theta,\Omega</math>. (זהירות: <math>f(n)\neq o(f(n))</math>!)
 +
*<math>f(n)=O(g(n))</math> אם ורק אם <math>g(n)=\Omega(f(n))</math>.
 +
* <math>O(f(n))+O(g(n))=O(f(n)+g(n))</math>. כנ"ל עבור <math>\Theta,\Omega</math>.
 +
* <math>O(f(n))\cdot O(g(n))=O(f(n)g(n))</math>. כנ"ל עבור <math>\Theta, \Omega</math>.
 +
* <math>O(f(n))^\alpha=O(f(n)^\alpha)</math> לכל <math>\alpha>0</math>. כנ"ל עבור <math>\Theta,\Omega</math>.
 +
* היחס <math>f(n)=O(g(n))</math> הוא טרנזיטיבי. (ניסוח אחר: <math>O(O(f(n)))=O(f(n))</math>.) כנ"ל עבור <math>\Theta,\Omega</math>.
 +
* היחס <math>f(n)=\Theta(g(n))</math> הוא יחס שקילות.
 +
* <math>f(n)+o(f(n))=\Theta(f(n))</math>.
 +
 +
 +
== יחסים בין פונקציות נפוצות ==
 +
 +
* לכל <math>a,b,c>0</math> ו-<math>d>1</math> ממשיים מתקיים <math>\dots\ll (\ln\ln n)^a\ll (\ln n)^b\ll n^c\ll d^n\ll n!\ll n^n</math>.
 +
* לכל <math>a<b</math> ממשיים <math>n^a\ll n^b</math>.
 +
* לכל <math>1\leq a<b</math> ממשיים <math>a^n\ll b^n</math>.

גרסה אחרונה מ־11:53, 24 בנובמבר 2011

סיבוכיות היא דרך להשוות בין קצב גידול של פונקציות ממשיות. הסיבוכיות של פונקציה אינה מושפעת מהכפלתה בקבוע (גדול מ-0).


או גדול, אומגה, תטה

הגדרה תהיינה f,g:\mathbb{N}\to\mathbb{R}_{\geq 0} פונקציות אי שליליות מהטבעיים לממשיים.

  • נאמר ש-f(n)=O(g(n)) אם קיים C>0 ממשי ו-n_0\in\mathbb{N} כך ש-f(n)\leq Cg(n) לכל n>n_0 (הקבוע C יכול להיות גדול כרצוננו).
  • נאמר ש-f(n)=\Omega(g(n)) אם קיים C>0 ממשי ו-n_0\in\mathbb{N} כך ש-f(n)\geq Cg(n) לכל n>n_0 (הקבוע C יכול קטן גדול כרצוננו).
  • נאמר ש-f(n)=\Theta(g(n)) אם f(n)=O(g(n)) וגם f(n)=\Omega(g(n)), כלומר קיימים C_1,C_2>0 ממשיים ו-n_0\in\mathbb{N} כך ש-C_1g(n)\leq f(n)\leq C_2g(n) לכל n>n_0.

לעיתים משתמשים גם בהגדה הבאה:

  • נאמר ש-f(n)=o(g(n)) (סימון אחר f(n)\ll g(n)) אם \lim_{n\to\infty}\left|\frac{f(n)}{g(n)}\right|=0. (הגדרה זו תקפה גם עבור פונקציות המקבלות ערכים שליליים ולכן הערך המוחלט.)

דוגמא: אם f(n)=n^3 ו-g(n)=2n^2 אז לא קשה לראות ש-f(n)=\Omega(g(n)) ו-g(n)=O(f(n)) אבל לא מתקיים f(n)=\Theta(g(n)).

קצת אינטואיציה: f(n)=O(g(n)) אומר ש-f גדלה כמו g או פחות מכך (עד כדי כפל בקבוע). f(n)=\Omega(g(n)) אומר ש-f גדלה כמו g או יותר מכך (עד כדי כפל בקבוע).

הערה: כשכותבים O(f(n)) בחישובים (לדוגמא: n+O(\lg n)) בדרך כלל מתכוונים לפונקציה שהיא O(f(n)). הנ"ל נכון גם עבור \Theta,\Omega,o.

הערה: ההגדרות לעיל תקפות גם עבור פונקציות מ-\mathbb{R}_{\geq 0} ל-\mathbb{R}_{\geq 0}

תכונות בסיסיות

נניח כי f,g:\mathbb{N}\to\mathbb{R}_{\geq 0} אזי:

  • f(n)=O(f(n)). כנ"ל עבור \Theta,\Omega. (זהירות: f(n)\neq o(f(n))!)
  • f(n)=O(g(n)) אם ורק אם g(n)=\Omega(f(n)).
  • O(f(n))+O(g(n))=O(f(n)+g(n)). כנ"ל עבור \Theta,\Omega.
  • O(f(n))\cdot O(g(n))=O(f(n)g(n)). כנ"ל עבור \Theta, \Omega.
  • O(f(n))^\alpha=O(f(n)^\alpha) לכל \alpha>0. כנ"ל עבור \Theta,\Omega.
  • היחס f(n)=O(g(n)) הוא טרנזיטיבי. (ניסוח אחר: O(O(f(n)))=O(f(n)).) כנ"ל עבור \Theta,\Omega.
  • היחס f(n)=\Theta(g(n)) הוא יחס שקילות.
  • f(n)+o(f(n))=\Theta(f(n)).


יחסים בין פונקציות נפוצות

  • לכל a,b,c>0 ו-d>1 ממשיים מתקיים \dots\ll (\ln\ln n)^a\ll (\ln n)^b\ll n^c\ll d^n\ll n!\ll n^n.
  • לכל a<b ממשיים n^a\ll n^b.
  • לכל 1\leq a<b ממשיים a^n\ll b^n.