स्यूडोकोड: Difference between revisions
No edit summary |
No edit summary |
||
Line 2: | Line 2: | ||
[[कंप्यूटर विज्ञान]] में, स्यूडोकोड [[कलन विधि]] या अन्य प्रणाली में चरणों का सरल भाषा विवरण है। स्यूडोकोड प्रायः सामान्य [[प्रोग्रामिंग भाषा]] के संरचनात्मक सम्मेलनों का उपयोग करता है, किन्तु मशीन पढ़ने के अतिरिक्त मानव पढ़ने के लिए अभिप्रेत है। यह सामान्यतः उन विवरणों का त्याग करता है जो एल्गोरिथ्म की मशीन की समझ के लिए आवश्यक हैं, जैसे चर घोषणाएं एवं भाषा-विशिष्ट कोड हैं। प्रोग्रामिंग भाषा को [[प्राकृतिक भाषा]] विवरण के साथ, जहाँ सुविधाजनक हो, या कॉम्पैक्ट गणितीय संकेतन के साथ संवर्धित किया जाता है। स्यूडोकोड का उपयोग करने का उद्देश्य यह है कि पारंपरिक प्रोग्रामिंग भाषा कोड की तुलना में लोगों के लिए इसे समझना सरल है, एवं यह एल्गोरिथम के प्रमुख सिद्धांतों का कुशल एवं पर्यावरण-स्वतंत्र विवरण है। यह सामान्यतः पाठ्य पुस्तकों एवं [[वैज्ञानिक प्रकाशन|वैज्ञानिक प्रकाशनों]] में एल्गोरिदम को दस्तावेज करने एवं सॉफ्टवेयर एवं अन्य एल्गोरिदम की योजना बनाने में उपयोग किया जाता है। | [[कंप्यूटर विज्ञान]] में, स्यूडोकोड [[कलन विधि]] या अन्य प्रणाली में चरणों का सरल भाषा विवरण है। स्यूडोकोड प्रायः सामान्य [[प्रोग्रामिंग भाषा]] के संरचनात्मक सम्मेलनों का उपयोग करता है, किन्तु मशीन पढ़ने के अतिरिक्त मानव पढ़ने के लिए अभिप्रेत है। यह सामान्यतः उन विवरणों का त्याग करता है जो एल्गोरिथ्म की मशीन की समझ के लिए आवश्यक हैं, जैसे चर घोषणाएं एवं भाषा-विशिष्ट कोड हैं। प्रोग्रामिंग भाषा को [[प्राकृतिक भाषा]] विवरण के साथ, जहाँ सुविधाजनक हो, या कॉम्पैक्ट गणितीय संकेतन के साथ संवर्धित किया जाता है। स्यूडोकोड का उपयोग करने का उद्देश्य यह है कि पारंपरिक प्रोग्रामिंग भाषा कोड की तुलना में लोगों के लिए इसे समझना सरल है, एवं यह एल्गोरिथम के प्रमुख सिद्धांतों का कुशल एवं पर्यावरण-स्वतंत्र विवरण है। यह सामान्यतः पाठ्य पुस्तकों एवं [[वैज्ञानिक प्रकाशन|वैज्ञानिक प्रकाशनों]] में एल्गोरिदम को दस्तावेज करने एवं सॉफ्टवेयर एवं अन्य एल्गोरिदम की योजना बनाने में उपयोग किया जाता है। | ||
स्यूडोकोड [[सिंटेक्स (प्रोग्रामिंग भाषाएं)]] के लिए कोई व्यापक मानक उपस्थित नहीं है, क्योंकि स्यूडोकोड में कोई प्रोग्राम निष्पादन योग्य प्रोग्राम नहीं है; यद्यपि, कुछ सीमित मानक उपस्थित हैं (जैसे शैक्षणिक मूल्यांकन के लिए)। स्यूडोकोड [[कंकाल (कंप्यूटर प्रोग्रामिंग)|स्केलेटन (कंप्यूटर प्रोग्रामिंग)]] जैसा दिखता है, जो त्रुटियों के आभाव में [[संकलक]] हो सकता है। [[फ़्लोचार्ट|फ़्लोचार्ट्स]], ड्रैकन-चार्ट्स [[DRAKON|( | स्यूडोकोड [[सिंटेक्स (प्रोग्रामिंग भाषाएं)]] के लिए कोई व्यापक मानक उपस्थित नहीं है, क्योंकि स्यूडोकोड में कोई प्रोग्राम निष्पादन योग्य प्रोग्राम नहीं है; यद्यपि, कुछ सीमित मानक उपस्थित हैं (जैसे शैक्षणिक मूल्यांकन के लिए)। स्यूडोकोड [[कंकाल (कंप्यूटर प्रोग्रामिंग)|स्केलेटन (कंप्यूटर प्रोग्रामिंग)]] जैसा दिखता है, जो त्रुटियों के आभाव में [[संकलक]] हो सकता है। [[फ़्लोचार्ट|फ़्लोचार्ट्स]], ड्रैकन-चार्ट्स [[DRAKON|(ड्रैकन)]] एवं [[एकीकृत मॉडलिंग भाषा]] (यूएमएल) चार्ट्स को स्यूडोकोड का ग्राफ़िकल विकल्प के रूप में विचार किया जा सकता है, किन्तु कागज पर अधिक स्थान की आवश्यकता होती है। <span class= plainlinks>[[HAGGIS|हैगिस]]</span> जैसी भाषाएं प्रोग्रामिंग भाषाओं में लिखे स्यूडोकोड एवं कोड के मध्य सम्बन्ध है। | ||
== अनुप्रयोग == | == अनुप्रयोग == | ||
Line 109: | Line 109: | ||
संख्यात्मक संगणना में, स्यूडोकोड में प्रायः गणितीय अंकन होते हैं, सामान्यतः समुच्चय सिद्धांत एवं [[मैट्रिक्स (गणित)]] सिद्धांत से, पारंपरिक प्रोग्रामिंग भाषा के नियंत्रण संरचनाओं के साथ मिश्रित, एवं संभवतः प्राकृतिक भाषा विवरण भी है। यह कॉम्पैक्ट एवं प्रायः अनौपचारिक संकेतन है जिसे गणितीय रूप से प्रशिक्षित लोगों की विस्तृत श्रृंखला द्वारा समझा जा सकता है, एवं प्रायः गणितीय एल्गोरिदम का वर्णन करने के उपाय के रूप में उपयोग किया जाता है। उदाहरण के लिए, योग ऑपरेटर ([[पूंजी-सिग्मा संकेतन]]) या उत्पाद ऑपरेटर ([[राजधानी-पाई संकेतन]]) अभिव्यक्ति में फॉर-लूप एवं चयन संरचना का प्रतिनिधित्व कर सकता है: | संख्यात्मक संगणना में, स्यूडोकोड में प्रायः गणितीय अंकन होते हैं, सामान्यतः समुच्चय सिद्धांत एवं [[मैट्रिक्स (गणित)]] सिद्धांत से, पारंपरिक प्रोग्रामिंग भाषा के नियंत्रण संरचनाओं के साथ मिश्रित, एवं संभवतः प्राकृतिक भाषा विवरण भी है। यह कॉम्पैक्ट एवं प्रायः अनौपचारिक संकेतन है जिसे गणितीय रूप से प्रशिक्षित लोगों की विस्तृत श्रृंखला द्वारा समझा जा सकता है, एवं प्रायः गणितीय एल्गोरिदम का वर्णन करने के उपाय के रूप में उपयोग किया जाता है। उदाहरण के लिए, योग ऑपरेटर ([[पूंजी-सिग्मा संकेतन]]) या उत्पाद ऑपरेटर ([[राजधानी-पाई संकेतन]]) अभिव्यक्ति में फॉर-लूप एवं चयन संरचना का प्रतिनिधित्व कर सकता है: | ||
{{nowrap| | {{nowrap|रिटर्न <math>\sum_{k\in S} x_k</math>}} | ||
सामान्यतः-[[ASCII]] (एएससीआईआई) [[टाइप बैठना|टाइप]] का उपयोग गणितीय समीकरणों के लिए किया जाता है, उदाहरण के लिए मार्कअप भाषाओं, जैसे [[TeX]] या [[MathML]], या स्वामित्व [[सूत्र संपादक|सूत्र संपादको]] के माध्यम से है। | सामान्यतः-[[ASCII]] (एएससीआईआई) [[टाइप बैठना|टाइप]] का उपयोग गणितीय समीकरणों के लिए किया जाता है, उदाहरण के लिए मार्कअप भाषाओं, जैसे [[TeX]] या [[MathML]], या स्वामित्व [[सूत्र संपादक|सूत्र संपादको]] के माध्यम से है। | ||
Line 118: | Line 118: | ||
{| class="wikitable" | {| class="wikitable" | ||
! | ! ऑपरेशन का प्रकार || प्रतीक || उदाहरण | ||
|- | |- | ||
| | | कार्यभार || ← or := ||<code>''c'' ← 2π''r''</code>, <code> ''c'' := 2π''r''</code> | ||
|- | |- | ||
| | | तुलना || =, ≠, <, >, ≤, ≥ || | ||
|- | |- | ||
| | | अंकगणित || +, −, ×, /, mod || | ||
|- | |- | ||
| | | तल सीलिंग || ⌊, ⌋, ⌈, ⌉ || <code>''a'' ← ⌊''b''⌋ + ⌈''c''⌉</code> | ||
|- | |- | ||
| | | लॉजिकल | ||
| '''and''', '''or''' | | '''and''', '''or''' | ||
| | | | ||
|- | |- | ||
| | | संपत्ति, उत्पाद | ||
| Σ Π | | Σ Π | ||
| <code>''h'' ← Σ<sub>''a''∈''A''</sub> 1/''a''</code> | | <code>''h'' ← Σ<sub>''a''∈''A''</sub> 1/''a''</code> | ||
Line 173: | Line 173: | ||
कई औपचारिक विनिर्देश भाषाओं में विशेष वर्णों का उपयोग करते हुए समुच्चय थ्योरी नोटेशन उपस्थित हैं। उदाहरण हैं: | कई औपचारिक विनिर्देश भाषाओं में विशेष वर्णों का उपयोग करते हुए समुच्चय थ्योरी नोटेशन उपस्थित हैं। उदाहरण हैं: | ||
* [[जेड अंकन]] | * [[जेड अंकन]] | ||
* [[वियना विकास पद्धति]] [[विशिष्टता भाषा]] | * [[वियना विकास पद्धति]] [[विशिष्टता भाषा]] । | ||
कुछ [[सरणी प्रोग्रामिंग]] भाषाओं में पारंपरिक नियंत्रण संरचनाओं के साथ मिश्रित गैर-एएससीआईआई सूत्रों के रूप में सदिश अभिव्यक्ति एवं मैट्रिक्स संचालन सम्मलित हैं। उदाहरण हैं: | कुछ [[सरणी प्रोग्रामिंग]] भाषाओं में पारंपरिक नियंत्रण संरचनाओं के साथ मिश्रित गैर-एएससीआईआई सूत्रों के रूप में सदिश अभिव्यक्ति एवं मैट्रिक्स संचालन सम्मलित हैं। उदाहरण हैं: | ||
* | * एपीएल (प्रोग्रामिंग भाषा), एवं इसकी बोलियाँ [[APLX|एपीएलएक्स]] एवं ए+ (प्रोग्रामिंग भाषा) | ||
* [[MathCAD]]। | * [[MathCAD|मैथ सीएडी]]। | ||
== यह भी देखें == | == यह भी देखें == |
Revision as of 12:23, 4 March 2023
कंप्यूटर विज्ञान में, स्यूडोकोड कलन विधि या अन्य प्रणाली में चरणों का सरल भाषा विवरण है। स्यूडोकोड प्रायः सामान्य प्रोग्रामिंग भाषा के संरचनात्मक सम्मेलनों का उपयोग करता है, किन्तु मशीन पढ़ने के अतिरिक्त मानव पढ़ने के लिए अभिप्रेत है। यह सामान्यतः उन विवरणों का त्याग करता है जो एल्गोरिथ्म की मशीन की समझ के लिए आवश्यक हैं, जैसे चर घोषणाएं एवं भाषा-विशिष्ट कोड हैं। प्रोग्रामिंग भाषा को प्राकृतिक भाषा विवरण के साथ, जहाँ सुविधाजनक हो, या कॉम्पैक्ट गणितीय संकेतन के साथ संवर्धित किया जाता है। स्यूडोकोड का उपयोग करने का उद्देश्य यह है कि पारंपरिक प्रोग्रामिंग भाषा कोड की तुलना में लोगों के लिए इसे समझना सरल है, एवं यह एल्गोरिथम के प्रमुख सिद्धांतों का कुशल एवं पर्यावरण-स्वतंत्र विवरण है। यह सामान्यतः पाठ्य पुस्तकों एवं वैज्ञानिक प्रकाशनों में एल्गोरिदम को दस्तावेज करने एवं सॉफ्टवेयर एवं अन्य एल्गोरिदम की योजना बनाने में उपयोग किया जाता है।
स्यूडोकोड सिंटेक्स (प्रोग्रामिंग भाषाएं) के लिए कोई व्यापक मानक उपस्थित नहीं है, क्योंकि स्यूडोकोड में कोई प्रोग्राम निष्पादन योग्य प्रोग्राम नहीं है; यद्यपि, कुछ सीमित मानक उपस्थित हैं (जैसे शैक्षणिक मूल्यांकन के लिए)। स्यूडोकोड स्केलेटन (कंप्यूटर प्रोग्रामिंग) जैसा दिखता है, जो त्रुटियों के आभाव में संकलक हो सकता है। फ़्लोचार्ट्स, ड्रैकन-चार्ट्स (ड्रैकन) एवं एकीकृत मॉडलिंग भाषा (यूएमएल) चार्ट्स को स्यूडोकोड का ग्राफ़िकल विकल्प के रूप में विचार किया जा सकता है, किन्तु कागज पर अधिक स्थान की आवश्यकता होती है। हैगिस जैसी भाषाएं प्रोग्रामिंग भाषाओं में लिखे स्यूडोकोड एवं कोड के मध्य सम्बन्ध है।
अनुप्रयोग
कंप्यूटर विज्ञान एवं संख्यात्मक संगणना से संबंधित पाठ्य-पुस्तकें एवं वैज्ञानिक प्रकाशन अधिकांशतः एल्गोरिदम के विवरण में स्यूडोकोड का उपयोग करते हैं, जिससे सभी प्रोग्रामर उन्हें समझ सकें, यदि वे सभी समान प्रोग्रामिंग भाषाओं को न जानते हों। पाठ्य-पुस्तकों में, सामान्यतः परिचयात्मक परिचय होता है जो उपयोग में आने वाले विशेष सम्मेलनों की व्याख्या करता है। स्यूडोकोड के विवरण का स्तर कुछ हानि में औपचारिक सामान्य-उद्देश्य वाली भाषाओं के समान हो सकता है।
प्रोग्रामर जिसे विशिष्ट एल्गोरिथ्म को प्रारम्भ करने की आवश्यकता होती है, विशेष रूप से अपरिचित, अधिकांशतः स्यूडोकोड विवरण के साथ प्रारम्भ होता है, एवं फिर उस विवरण को लक्ष्य प्रोग्रामिंग भाषा में अनुवादित करता है एवं अन्य प्रोग्राम के साथ उत्तम रूप से इंटरैक्ट करने के लिए इसे संशोधित करता है। प्रोग्रामर किसी प्रोजेक्ट को उसकी वास्तविक भाषा में लिखने से पूर्व कागज पर स्यूडोकोड टॉप-डाउन एवं बॉटम-अप डिज़ाइन के रूप में, चरणों की प्रक्रिया के रूप में स्केच करके भी प्रारम्भ कर सकते है |
सिंटेक्स
स्यूडोकोड सामान्यतः वास्तव में किसी विशेष भाषा के वाक्य-विन्यास नियमों का पालन नहीं करता है। इसका कोई व्यवस्थित मानक रूप नहीं है। लेखक कुछ पारंपरिक प्रोग्रामिंग भाषा से नियंत्रण संरचनाओं से शैली एवं वाक्य रचना ऋण लेते हैं, यद्यपि यह हतोत्साहित किया जाता है।[1][2] कुछ वाक्यविन्यास स्रोतों में फोरट्रान, पास्कल (प्रोग्रामिंग भाषा), बेसिक, सी (प्रोग्रामिंग भाषा), सी ++, जावा (प्रोग्रामिंग भाषा), लिस्प (प्रोग्रामिंग भाषा), एवं एल्गोल सम्मलित हैं। परिवर्तनीय घोषणाएं सामान्यतः त्याग दी जाती हैं। फ़ंक्शन कॉल एवं कोड के ब्लॉक, जैसे लूप के भीतर उपस्थित कोड, प्रायः पंक्ति प्राकृतिक भाषा वाक्य द्वारा प्रतिस्थापित किए जाते हैं।
लेखक के आधार पर, स्यूडोकोड शैली में व्यापक रूप से भिन्न हो सकता है, किसी शिखर पर वास्तविक प्रोग्रामिंग भाषा की निकट-त्रुटिहीन प्रतिरूप से, दूसरे पर स्वरूपित गद्य का विवरण हैं।
यह स्यूडोकोड का उदाहरण है (गणितीय गेम फिज बज़ के लिए):
Fortran style pseudocode: program fizzbuzz
Do i = 1 to 100
set print_number to true
If i is divisible by 3
print "Fizz"
set print_number to false
If i is divisible by 5
print "Buzz"
set print_number to false
If print_number, print i
print a newline
end do
|
Pascal style pseudocode: procedure fizzbuzz;
for i := 1 to 100 do
print_number := true;
if i is divisible by 3 then begin
print "Fizz";
print_number := false;
end;
if i is divisible by 5 then begin
print "Buzz";
print_number := false;
end;
if print_number, print i;
print a newline;
end
|
C style pseudocode: fizzbuzz() {
for (i = 1; i <= 100; i++) {
print_number = true;
if (i is divisible by 3) {
print "Fizz";
print_number = false;
}
if (i is divisible by 5) {
print "Buzz";
print_number = false;
}
if (print_number) print i;
print a newline;
}
}
|
Structured Basic style pseudocode: Sub fizzbuzz()
For i = 1 to 100
print_number = True
If i is divisible by 3 Then
Print "Fizz"
print_number = False
End If
If i is divisible by 5 Then
Print "Buzz"
print_number = False
End If
If print_number = True Then print i
Print a newline
Next i
End Sub
|
गणितीय शैली स्यूडोकोड
संख्यात्मक संगणना में, स्यूडोकोड में प्रायः गणितीय अंकन होते हैं, सामान्यतः समुच्चय सिद्धांत एवं मैट्रिक्स (गणित) सिद्धांत से, पारंपरिक प्रोग्रामिंग भाषा के नियंत्रण संरचनाओं के साथ मिश्रित, एवं संभवतः प्राकृतिक भाषा विवरण भी है। यह कॉम्पैक्ट एवं प्रायः अनौपचारिक संकेतन है जिसे गणितीय रूप से प्रशिक्षित लोगों की विस्तृत श्रृंखला द्वारा समझा जा सकता है, एवं प्रायः गणितीय एल्गोरिदम का वर्णन करने के उपाय के रूप में उपयोग किया जाता है। उदाहरण के लिए, योग ऑपरेटर (पूंजी-सिग्मा संकेतन) या उत्पाद ऑपरेटर (राजधानी-पाई संकेतन) अभिव्यक्ति में फॉर-लूप एवं चयन संरचना का प्रतिनिधित्व कर सकता है:
रिटर्न
सामान्यतः-ASCII (एएससीआईआई) टाइप का उपयोग गणितीय समीकरणों के लिए किया जाता है, उदाहरण के लिए मार्कअप भाषाओं, जैसे TeX या MathML, या स्वामित्व सूत्र संपादको के माध्यम से है।
गणितीय शैली स्यूडोकोड को कभी-कभी पिजिन कोड के रूप में संदर्भित किया जाता है, उदाहरण के लिए पिजिन ALGOL (अवधारणा की उत्पत्ति), पिजिन फोरट्रान, पिजिन बेसिक, पिजिन पास्कल (प्रोग्रामिंग भाषा), पिजिन सी (प्रोग्रामिंग भाषा), एवं पिजिन लिस्प (प्रोग्रामिंग भाषा) है।
सामान्य गणितीय प्रतीक
ऑपरेशन का प्रकार | प्रतीक | उदाहरण |
---|---|---|
कार्यभार | ← or := | c ← 2πr , c := 2πr
|
तुलना | =, ≠, <, >, ≤, ≥ | |
अंकगणित | +, −, ×, /, mod | |
तल सीलिंग | ⌊, ⌋, ⌈, ⌉ | a ← ⌊b⌋ + ⌈c⌉
|
लॉजिकल | and, or | |
संपत्ति, उत्पाद | Σ Π | h ← Σa∈A 1/a
|
उदाहरण
जहाँ फोर्ड-फुलकर्सन एल्गोरिथम के लिए गणितीय-शैली स्यूडोकोड का उदाहरण दिया गया है:
algorithm ford-fulkerson is input: Graph G with flow capacity c, source node s, sink node t output: Flow f such that f is maximal from s to t (Note that f(u,v) is the flow from node u to node v, and c(u,v) is the flow capacity from node u to node v) for each edge (u, v) in GE do f(u, v) ← 0 f(v, u) ← 0 while there exists a path p from s to t in the residual network Gf do let cf be the flow capacity of the residual network Gf cf(p) ← min{cf(u, v) | (u, v) in p} for each edge (u, v) in p do f(u, v) ← f(u, v) + cf(p) f(v, u) ← −f(u, v) return f
स्यूडोकोड शैली की भाषाओं का मशीन संकलन
प्रोग्रामिंग भाषाओं में प्राकृतिक भाषा व्याकरण
कंप्यूटर प्रोग्रामिंग में प्राकृतिक भाषा व्याकरण के तत्वों को लाने के विभिन्न प्रयासों ने हाइपरटॉक, लिंगो (प्रोग्रामिंग भाषा), एप्पलस्क्रिप्ट, एसक्यूएल, सूचित करना एवं पायथन (प्रोग्रामिंग भाषा) जैसी प्रोग्रामिंग भाषाओं का निर्माण किया है। इन भाषाओं में, कोष्ठक एवं अन्य विशेष वर्णों को पूर्वसर्गों द्वारा प्रतिस्थापित किया जाता है, जिसके परिणामस्वरूप अधिक वर्बोज़ कोड होता है। ये भाषाएं सामान्यतः गतिशील टाइपिंग होती हैं, जिसका अर्थ है कि चर घोषणाएं एवं अन्य बॉयलरप्लेट कोड को त्यागा जा सकता है। ऐसी भाषाएँ भाषा के ज्ञान के आभाव में किसी व्यक्ति के लिए कोड को समझना एवं संभवतः भाषा सीखना भी सरल बना सकती हैं। यद्यपि, प्राकृतिक भाषा की सामान्यतः वास्तविक की तुलना में अधिक अनुपयोगी होती है। सिंटैक्स नियम पारंपरिक प्रोग्रामिंग के जैसे ही कठोर एवं औपचारिक हो सकते हैं, एवं आवश्यक नहीं कि कार्यक्रमों के विकास को सरल बनाते हों।
गणितीय प्रोग्रामिंग भाषाएं
एल्गोरिदम के दस्तावेज़ीकरण के लिए गणितीय स्यूडोकोड (जिसमें समुच्चय सिद्धांत संकेतन या मैट्रिक्स संचालन सम्मलित है) का उपयोग करने का विकल्प किसी औपचारिक गणितीय प्रोग्रामिंग भाषा का उपयोग करना है जो गैर-एएससीआईआई गणितीय संकेतन एवं प्रोग्राम नियंत्रण संरचनाओं का मिश्रण है।
कई औपचारिक विनिर्देश भाषाओं में विशेष वर्णों का उपयोग करते हुए समुच्चय थ्योरी नोटेशन उपस्थित हैं। उदाहरण हैं:
कुछ सरणी प्रोग्रामिंग भाषाओं में पारंपरिक नियंत्रण संरचनाओं के साथ मिश्रित गैर-एएससीआईआई सूत्रों के रूप में सदिश अभिव्यक्ति एवं मैट्रिक्स संचालन सम्मलित हैं। उदाहरण हैं:
यह भी देखें
- अवधारणा प्रोग्रामिंग
- ड्रैकन-चार्ट
- फ़्लोचार्ट
- साक्षर प्रोग्रामिंग
- कार्यक्रम डिजाइन भाषा
- लघु कूट संख्या
- संरचित अंग्रेजी
संदर्भ
- ↑ McConnell, Steve (2004). Code Complete. p. 54. ISBN 978-0-7356-1967-8.
Avoid syntactic elements from the target programming language
- ↑ Invitation to Computer Science, 8th Edition by Schneider/Gersting, "Keep statements language independent" as quoted in this stackexchange question
अग्रिम पठन
- Zobel, Justin (2013). "Algorithms". Writing for Computer Science (Second ed.). Springer. ISBN 978-1-85233-802-2.