freeCodeCamp/guide/arabic/computer-science/notation/big-o-notation/index.md

64 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: Big O Notation
localeTitle: Big O Notation
---
## Big O Notation
_كعالم كمبيوتر ، إذا كنت تعمل على برنامج مهم ، فستحتاج على الأرجح لتقدير مدى سرعة تشغيل بعض الخوارزميات أو غيرها._
يُستخدم التدوين الكبير O في علم الكمبيوتر لوصف أداء خوارزمية أو تعقيدها. في الواقع Big O Notation هو رمز خاص يخبرك بمدى سرعة الخوارزمية. بالطبع ستستخدم خوارزميات محددة مسبقًا - وعندما تفعل ذلك ، من الضروري أن تفهم مدى السرعة أو البطء.
#### ما هو شكل O الكبير
![](https://user-images.githubusercontent.com/5860906/31781171-74c6b48a-b500-11e7-9626-f715b37b10f0.png) يخبرك هذا عن عدد العمليات التي ستقوم بها خوارزمية. يطلق عليه تدوين Big O لأنك وضعت "Big O" أمام عدد العمليات.
#### يضع Big O وقت تشغيل أسوأ حالة
لنفترض أنك طبيب يعالج هاري أبيت ، قد تنظر في السجلات الإلكترونية المتعلقة بالتاريخ الطبي لهاري أبيت (فهو أول شخص في قائمة). دعونا نعتبر الوضع عندما تعتمد حياته على جميع البيانات الطبية المتاحة. لنفترض أنك تستخدم بحثًا بسيطًا للبحث عن شخص في السجلات الإلكترونية. أنت تعلم أن البحث البسيط يأخذ O (n) وقتًا للتشغيل ، لذلك سيكون عليك البحث في كل إدخال فردي لـ Abbit. بالطبع ، لقد لاحظت أن Abbit هو الإدخال الأول ، لذلك لم يكن عليك النظر إلى كل إدخال - وجدته في المحاولة الأولى.
_هل أخذت هذه الخوارزمية وقت O (n)؟ أو هل استغرق ذلك وقت (1) لأنك وجدت الشخص في المحاولة الأولى؟_
في هذه الحالة ، هذا هو السيناريو الأفضل. لكن تدوين Big O هو حول سيناريو الحالة الأسوأ. هذا هو O (n) الوقت (لا يزال البحث البسيط). إنه تأكيد على أن البحث البسيط لن يكون أبطأ أبداً من زمن O (n).
#### تنمو أوقات تشغيل الخوارزمية بمعدلات مختلفة
لنفترض أنه يستغرق 1 ميلي ثانية للتحقق من إدخال واحد. مع البحث البسيط ، يجب على الطبيب التحقق من 10 إدخالات ، بحيث يستغرق البحث 10 مللي ثانية للتشغيل. من ناحية أخرى ، عليه فقط التحقق من 3 عناصر باستخدام _خوارزمية البحث الثنائي_ (log10 هو 3 تقريبًا) ، بحيث يستغرق البحث 3 مللي ثانية للتشغيل.
لكن من الناحية الواقعية ، سيكون لدى القائمة أكثر من مائة عنصر.
_إذا حدث ذلك ، فكم من الوقت سيستغرق البحث البسيط؟ ما المدة التي يستغرقها البحث الثنائي؟_
سيكون وقت التشغيل للبحث البسيط مع 1 مليار عنصر 1 مليار مللي ثانية ، وهو 11 يومًا. المشكلة هي أن أوقات التشغيل للبحث الثنائي والبحث البسيط ا تنمو بنفس المعدل_ .
![](https://user-images.githubusercontent.com/5860906/31781165-723a053c-b500-11e7-937c-7b33db281efe.png)
ومع ازدياد قائمة الأرقام ، يصبح البحث الثنائي أسرع بكثير من البحث البسيط. أي أنه مع زيادة عدد العناصر ، يستغرق البحث الثنائي وقتًا أطول للتشغيل. لكن البحث البسيط يتطلب _الكثير_ من الوقت للتشغيل. ومع ازدياد قائمة الأرقام ، يصبح البحث الثنائي أسرع بكثير من البحث البسيط.
_ولهذا السبب لا يكفي معرفة المدة التي تستغرقها الخوارزمية للتشغيل - تحتاج إلى معرفة كيفية زيادة وقت التشغيل مع زيادة حجم القائمة. هذا هو المكان الذي تدخل فيه Big O._
#### يتيح لك التدوين الكبير O مقارنة عدد العمليات
على سبيل المثال ، افترض أن لديك قائمة بالحجم n. يحتاج البحث البسيط للتحقق من كل عنصر ، لذلك سوف يستغرق عمليات n. وقت التشغيل في تدوين Big O هو O (n).
_أين الثواني؟_
لا يوجد شيء - لا يخبرك Big O بالسرعة في ثوان. _يتيح لك التدوين الكبير O مقارنة عدد العمليات._ يخبرك مدى سرعة نمو الخوارزمية.
![](https://user-images.githubusercontent.com/5860906/31781175-768c208e-b500-11e7-9718-e632d1391e2d.png) </ P
#### أوقات التشغيل الأكثر شيوعًا للخوارزميات
قائمة بأوقات التشغيل الأكثر شيوعًا للخوارزميات من حيث التدوين الكبير O. في ما يلي خمس مرات لتشغيل Big O التي ستواجهها كثيرًا ، ويتم ترتيبها من الأسرع إلى الأبطأ:
1. O (log n) ، تُعرف أيضًا باسم _وقت التسجيل_ . مثال: بحث ثنائي.
2. O (n) ، والمعروف أيضًا الوقت الخطي_ . مثال: بحث بسيط.
3. O (n \* log n) مثال: خوارزمية الفرز السريع ، مثل الخوارزمية السريعة (الواردة في الفصل 4).
4. على 2) مثال: خوارزمية الفرز البطيئة ، مثل فرز الفرز (الوارد في الفصل 2).
5. على!) مثال: خوارزمية بطيئة حقاً ، مثل مندوب مبيعات السفر (القادم في المرة القادمة!).
_تتناول هذه المقالة فقط أساسيات Big O. للحصول على شرح أكثر تفصيلاً ، ألقِ نظرة على دلائل FreeCodeCamp المعنية بالخوارزميات._
### معلومات اكثر
* [أكاديمية خان](https://www.khanacademy.org/computing/computer-science/algorithms/asymptotic-notation/a/big-o-notation)
* [ورقة الغش الكبيرة يا](http://bigocheatsheet.com/)