2. Algorithms — الگورتھم
Difficulty: Advanced — اعلیٰ
Time: ~35 minutes
Importing — درآمد
درآمد {
بلبلہ_ترتیب, انتخاب_ترتیب, اندراج_ترتیب,
ضم_ترتیب, تیز_ترتیب, ڈھیر_ترتیب,
خطی_تلاش, دوئی_تلاش,
ہیش_جدول,
اعظم_مشترک_قاسم, اقل_مشترک_ضرب,
فیبوناچی, فیبوناچی_سلسلہ,
فیکٹوریل, عدد_زائی_ہے, اعداد_زائیہ,
لیوینشٹین_فاصلہ, کے_ایم_پی_تلاش
} سے "اردو/الگورتھم";
Sorting Algorithms — ترتیب کے الگورتھم
All sorting functions return a new sorted list — the original is not modified.
متغیر فہرست_م = [5, 2, 8, 1, 9, 3];
لکھو(بلبلہ_ترتیب(فہرست_م)); // [1, 2, 3, 5, 8, 9]
لکھو(انتخاب_ترتیب(فہرست_م)); // [1, 2, 3, 5, 8, 9]
لکھو(اندراج_ترتیب(فہرست_م)); // [1, 2, 3, 5, 8, 9]
لکھو(ضم_ترتیب(فہرست_م)); // [1, 2, 3, 5, 8, 9]
لکھو(تیز_ترتیب(فہرست_م)); // [1, 2, 3, 5, 8, 9]
لکھو(ڈھیر_ترتیب(فہرست_م)); // [1, 2, 3, 5, 8, 9]
لکھو(فہرست_م); // [5, 2, 8, 1, 9, 3] (unchanged)
| Algorithm | Urdu | Time | Best For |
|---|---|---|---|
بلبلہ_ترتیب |
Bubble Sort | O(n²) | Learning only |
انتخاب_ترتیب |
Selection Sort | O(n²) | Small lists |
اندراج_ترتیب |
Insertion Sort | O(n²) | Nearly sorted data |
ضم_ترتیب |
Merge Sort | O(n log n) | Stable sort needed |
تیز_ترتیب |
Quick Sort | O(n log n) avg | General purpose |
ڈھیر_ترتیب |
Heap Sort | O(n log n) | Guaranteed performance |
اردو: تمام ترتیب فنکشن نئی ترتیب شدہ فہرست واپس کرتے ہیں، اصل فہرست نہیں بدلتی۔
Searching Algorithms — تلاش کے الگورتھم
Linear Search — خطی تلاش
Scans every element. Works on unsorted lists. Returns index or -1.
متغیر فہرست_م = [5, 2, 8, 1, 9, 3];
لکھو(خطی_تلاش(فہرست_م, 8)); // 2 (index)
لکھو(خطی_تلاش(فہرست_م, 7)); // -1 (not found)
Binary Search — دوئی تلاش
Requires a sorted list. O(log n) — very fast on large data.
متغیر ترتیب_م = [1, 3, 5, 7, 9, 11, 13];
لکھو(دوئی_تلاش(ترتیب_م, 7)); // 3 (index)
لکھو(دوئی_تلاش(ترتیب_م, 4)); // -1 (not found)
اردو:
خطی_تلاشکسی بھی فہرست پر کام کرتی ہے مگر سست ہے۔دوئی_تلاشصرف ترتیب شدہ فہرست پر، لیکن بہت تیز۔
Hash Table — ہیش جدول
Key-value store with O(1) average lookup. Works like a dictionary but implemented from scratch.
متغیر ہج = نیا ہیش_جدول();
// Set values
ہج["نام"] = "احمد";
ہج["عمر"] = 25;
ہج["شہر"] = "کراچی";
// Get values
لکھو(ہج["نام"]); // احمد
لکھو(ہج.حاصل_کریں("عمر")); // 25
لکھو(ہج.حاصل_کریں("ملک", "پاکستان")); // پاکستان (default)
// Check / remove
لکھو(ہج.موجود_ہے("نام")); // True
ہج.نکالیں("شہر");
لکھو(ہج.کلیدیں()); // ['نام', 'عمر']
لکھو(ہج.قدریں()); // ['احمد', 25]
Mathematical Algorithms — ریاضی الگورتھم
GCD and LCM — اعظم مشترک قاسم و اقل مشترک ضرب
لکھو(اعظم_مشترک_قاسم(12, 8)); // 4
لکھو(اعظم_مشترک_قاسم(48, 18)); // 6
لکھو(اقل_مشترک_ضرب(4, 6)); // 12
لکھو(اقل_مشترک_ضرب(3, 5)); // 15
Fibonacci — فیبوناچی
لکھو(فیبوناچی(10)); // 55 (0-indexed: 0,1,1,2,3,5,8,13,21,34,55)
لکھو(فیبوناچی(0)); // 0
لکھو(فیبوناچی(1)); // 1
لکھو(فیبوناچی_سلسلہ(8));
// [0, 1, 1, 2, 3, 5, 8, 13]
Factorial — فیکٹوریل
Prime Numbers — اعداد زائیہ
لکھو(عدد_زائی_ہے(17)); // True
لکھو(عدد_زائی_ہے(18)); // False
لکھو(عدد_زائی_ہے(2)); // True
// All primes up to N (Sieve of Eratosthenes)
لکھو(اعداد_زائیہ(30));
// [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
اردو:
اعداد_زائیہ(ن)ایراتوستھینز کی چھلنی سے ن تک تمام اعداد زائیہ دیتا ہے — بہت تیز الگورتھم۔
String Algorithms — متن الگورتھم
Edit Distance — لیوینشٹین فاصلہ
Number of single-character edits (insert, delete, replace) to transform one string into another:
لکھو(لیوینشٹین_فاصلہ("kitten", "sitting")); // 3
لکھو(لیوینشٹین_فاصلہ("اردو", "اردو")); // 0 (same)
لکھو(لیوینشٹین_فاصلہ("", "abc")); // 3
KMP Pattern Search — کے ایم پی تلاش
Find all occurrences of a pattern in a text in O(n+m):
لکھو(کے_ایم_پی_تلاش("ab", "ababab")); // [0, 2, 4]
لکھو(کے_ایم_پی_تلاش("اردو", "اردو پروگرامنگ اردو")); // [0, 16]
لکھو(کے_ایم_پی_تلاش("xyz", "abcdef")); // []
اردو:
کے_ایم_پی_تلاش(نمونہ, متن)— تمام اشاریے دیتا ہے جہاں نمونہ ملا (0-indexed)۔
Practical Example: Word Frequency — عملی مثال: الفاظ کی تعداد
درآمد { ہیش_جدول, ترتیب } سے "اردو/الگورتھم";
فنکشن الفاظ_گنو(متن_م) {
متغیر گنتی = نیا ہیش_جدول();
متغیر الفاظ = تقسیم(متن_م.چھاٹو().چھوٹے_حروف());
کے_لیے (متغیر لفظ میں الفاظ) {
متغیر موجودہ = گنتی.حاصل_کریں(لفظ, 0);
گنتی[لفظ] = موجودہ + 1;
}
واپس گنتی;
}
متغیر متن_م = "اردو زبان اردو پروگرامنگ اردو";
متغیر گنتی = الفاظ_گنو(متن_م);
لکھو(گنتی["اردو"]); // 3
لکھو(گنتی["پروگرامنگ"]); // 1
Key Points — اہم نکات
- All sort functions return a new list; originals are unchanged
خطی_تلاشworks on any list;دوئی_تلاشrequires sorted inputہیش_جدولsupports[]operator and.حاصل_کریں(key, default)اعداد_زائیہ(n)uses Sieve of Eratosthenes — efficient for large nکے_ایم_پی_تلاشreturns a list of all match positions