يونيتي (لغة برمجة)

يونيتي هي لغة برمجة ابتكرها ك. ماني تشاندي وجاياديف ميسرا لكتابهما " تصميم البرامج المتوازية: أساس" . وهي لغة نظرية تركز على " ماذا " بدلاً من " أين " أو "متى " أو "كيف" . لا تحتوي اللغة على أي آلية للتحكم في تدفق البرنامج، وتُنفَّذ تعليمات البرنامج بطريقة غير حتمية حتى تتوقف عن إحداث تغييرات أثناء التنفيذ. وهذا يسمح بتشغيل البرامج إلى أجل غير مسمى، مثل أنظمة الطيار الآلي أو أنظمة أمان محطات الطاقة، بالإضافة إلى البرامج التي تنتهي عادةً (والتي تتقارب هنا إلى نقطة ثابتة ).

وصف

جميع العبارات عبارة عن عمليات إسناد ، وتفصل بينها فاصلة #. يمكن أن تتكون العبارة من عدة عمليات إسناد، على شكل أو . كما يمكن أن يكون لديك قائمة عبارات كمية ، حيث يتم اختيار x و y عشوائيًا من بين القيم التي تحقق التعبير . الإسناد الكمي مشابه. في ، يتم تنفيذ العبارة في وقت واحد لجميع أزواج و التي تحقق التعبير .a,b,c := x,y,za := x || b := y || c := z<# x,y : expression :: statement><|| x,y : expression :: statement>xy

أمثلة

فرز الفقاعات

تُرتّب المصفوفة باستخدام خوارزمية فرز الفقاعات عن طريق مقارنة الأرقام المتجاورة، وتبديلها إذا كانت بترتيب خاطئ.Θ(ن){\displaystyle \Theta (n)}الوقت المتوقع،Θ(ن){\displaystyle \Theta (n)}المعالجات وΘ(ن2){\displaystyle \Theta (n^{2})}العمل المتوقع. السبب في أنك لا تملك سوىΘ(ن){\displaystyle \Theta (n)}الوقت المتوقع ، هو الذي kيتم اختياره دائمًا بشكل عشوائي من{0،1}{\displaystyle \{0,1\}}يمكن إصلاح ذلك عن طريق قلبها kيدويًا.

برنامج فرز الفقاعات يعلن ن: عدد صحيح، أ: مصفوفة من الأعداد الصحيحة [0..n-1] بدءًا ن = 20 <|| i : 0 <= i and i < n :: A[i] = rand() % 100 > تعيين <# k : 0 <= k < 2 :: <|| i : i % 2 = k and 0 <= i < n - 1 :: A[i]، A[i+1] := A[i+1]، A[i] إذا كان A[i] > A[i+1] >> نهاية

فرز الترتيب

يمكنك فرزهاΘ(سجلن){\displaystyle \Theta (\log n)}الوقت مع خوارزمية الترتيب. أنت بحاجة إلىΘ(ن2){\displaystyle \Theta (n^{2})}المعالجات، وΘ(ن2){\displaystyle \Theta (n^{2})}عمل.

برنامج فرز الترتيب يعلن ن: عدد صحيح، A,R: مصفوفة من الأعداد الصحيحة [0..n-1] بدءًا ن = 15 <|| i : 0 <= i < n :: A[i], R[i] = rand() % 100, i > تعيين <|| i : 0 <= i < n :: R[i] := <+ j : 0 <= j < n and (A[j] < A[i] or (A[j] = A[i] and j < i)) :: 1 >> 8 <|| i : 0 <= i < n :: A[R[i]] := A[i] > نهاية

خوارزمية فلويد-وارشال

باستخدام خوارزمية فلويد-وارشال لأقصر مسار بين جميع الأزواج ، نقوم بتضمين العقد الوسيطة بشكل متكرر، ونحصل علىΘ(ن){\displaystyle \Theta (n)}الوقت، باستخدامΘ(ن2){\displaystyle \Theta (n^{2})}المعالجات وΘ(ن3){\displaystyle \Theta (n^{3})}عمل.

أقصر مسار في البرنامج يعلن n، k: عدد صحيح، D: مصفوفة من الأعداد الصحيحة [0..n-1, 0..n-1] بدءًا ن = 10 k = 0 <|| i,j : 0 <= i < n and 0 <= j < n :: D[i,j] = rand() % 100 > تعيين <|| i,j : 0 <= i < n and 0 <= j < n :: D[i,j] := min(D[i,j], D[i,k] + D[k,j]) > || k := k + 1 إذا كان k < n - 1 نهاية

يمكننا القيام بذلك بشكل أسرع. يحسب البرنامج التالي أقصر مسار بين جميع الأزواج فيΘ(سجل2ن){\displaystyle \Theta (\log ^{2}n)}الوقت، باستخدامΘ(ن3){\displaystyle \Theta (n^{3})}المعالجات وΘ(ن3سجلن){\displaystyle \Theta (n^{3}\log n)}عمل.

برنامج shortestpath2 يعلن ن: عدد صحيح، D: مصفوفة من الأعداد الصحيحة [0..n-1, 0..n-1] بدءًا ن = 10 <|| i,j : 0 <= i < n and 0 <= j < n :: D[i,j] = rand() % 10 > تعيين <|| i,j : 0 <= i < n and 0 <= j < n :: D[i,j] := min(D[i,j], <min k : 0 <= k < n :: D[i,k] + D[k,j] >) > نهاية

بعد الجولةر{\displaystyle r}، D[i,j]يحتوي على طول أقصر مسار منأنا{\displaystyle i}لج{\displaystyle j}من الطول0...ر{\displaystyle 0\dots r}في الجولة التالية، ذات الطول0...2ر{\displaystyle 0\dots 2r}وهكذا دواليك.

مراجع

  • ك. ماني تشاندي وجياديف ميسرا (1988) تصميم البرنامج الموازي: الأساس . باستخدام UnityEngine؛

public class CarController  : MonoBehaviour {

 public float speed = 10f; public float turnSpeed ​​= 50f;
 void Update() { float move = Input.GetAxis("Vertical") * speed * Time.deltaTime; float turn = Input.GetAxis("Horizontal") * turnSpeed ​​* Time.deltaTime; transform.Translate(0, 0, move); transform.Rotate(0, turn, 0); }

}