Folded Reed–Solomon code
کوڈنگ تھیوری میں، فولڈڈ ریڈ سولومن کوڈز ریڈ سولومن کوڈز کی طرح ہوتے ہیں، جو کوڈ ورڈ کی علامتوں کو احتیاط سے جوڑ کر بڑے حروف تہجی پر ریڈ سولومن کوڈ ورڈز کی نقشہ سازی کے ذریعے حاصل کیے جاتے ہیں۔ فولڈڈ ریڈ سولومن کوڈز بھی پرواریش وارڈی کوڈز کا ایک خاص معاملہ ہیں۔ زیادہ سے زیادہ پیرامیٹرز کا استعمال کرتے ہوئے کوئی بھی آر کی شرح کے ساتھ ڈی کوڈ کر سکتا ہے، اور 1-آر کا ڈیکوڈنگ رداس حاصل کر سکتا ہے۔ "فولڈڈ ریڈ سولومن کوڈز" کی اصطلاح وی وائی نے ایک کاغذ میں تیار کی تھی۔ کراچکووسکی ایک الگورتھم کے ساتھ جس نے ریڈ سولومن کوڈز کو بے ترتیب "مرحلہ وار پھٹنے" کی بہت سی غلطیوں کے ساتھ پیش کیا۔ فولڈڈ آر ایس کوڈز کے لیے لسٹ-ڈیکوڈنگ الگورتھم اس طرح کی مرحلہ وار برسٹ غلطیوں کے لیے گروسوامی-سودان الگورتھم کے ذریعے حاصل کردہ ریڈ-سولومن کوڈز کی حد سے باہر درست کرتا ہے۔ کوڈنگ تھیوری میں جاری چیلنجوں میں سے ایک یہ ہے کہ ایرر کریکٹنگ کوڈز (کوڈنگ) ریٹ اور ایرر کریکٹنگ ریڈیئس کے درمیان ایک بہترین ٹریڈ آف حاصل کریں۔ اگرچہ یہ عملی طور پر حاصل کرنا ممکن نہیں ہو سکتا ہے (شور چینل کوڈنگ تھیوری کے مسائل کی وجہ سے)، نظریاتی طور پر نیم زیادہ سے زیادہ تجارت حاصل کی جا سکتی ہے۔ فولڈڈ ریڈ سولومن کوڈز کے وضع کیے جانے سے پہلے، تمام شرحوں کے لیے ریڈ سولومن کوڈز کے ذریعے بہترین ایرر کریکشن ریڈیئس حاصل کیا گیا تھا۔ اس حد پر ایک بہتری پرواریش اور وارڈی نے شرحوں کے لیے حاصل کی تھی کیونکہ پرواریش-وارڈی الگورتھم غلطیوں کے ایک حصے کو ڈی کوڈ کر سکتا ہے۔ فولڈڈ ریڈ سولومن کوڈز ان پچھلی تعمیرات میں بہتری لاتے ہیں، اور کسی بھی مستقل کے لیے غلطیوں کے ایک حصے کے لیے کثیر الجہتی وقت میں فہرست کو ڈی کوڈ کیا جا سکتا ہے۔ تعریف لمبائی اور طول و عرض کے ریڈ سولومن کوڈ اور فولڈنگ پیرامیٹر پر غور کریں۔ فرض کریں کہ تقسیم ہوتا ہے۔ ریڈ سولومن کوڈز کے لیے نقشہ سازی اس طرح: جہاں ایک قدیم عنصر ہے۔ ریڈ سولومن کوڈ کا فولڈڈ ورژن، جس کی نشاندہی کی گئی ہے، بلاک کی لمبائی کا کوڈ ہے۔ صرف ریڈ سولومن کوڈ ہیں جن میں آر ایس کوڈ ورڈز کی مسلسل علامتیں ہیں جنہیں ایک ساتھ گروپ کیا گیا ہے۔ گرافک تفصیل مندرجہ بالا تعریف کو خاکہ کے ذریعے مزید واضح کیا گیا ہے، جہاں فولڈنگ پیرامیٹر ہے۔ پیغام کو اس کے ذریعے ظاہر کیا جاتا ہے، جسے جب ریڈ سولومن انکوڈنگ کا استعمال کرتے ہوئے انکوڈ کیا جاتا ہے، تو یہ at، جہاں کی اقدار پر مشتمل ہوتا ہے۔ پھر 3 عناصر کے گروپوں میں بنڈلنگ کی جاتی ہے، تاکہ حروف تہجی پر لمبائی کا کوڈ ورڈ دیا جا سکے۔ یہاں ایک بات قابل مشاہدہ ہے کہ دکھایا گیا فولڈنگ آپریشن اصل ریڈ سولومن کوڈ کی شرح کو تبدیل نہیں کرتا ہے۔ اسے ثابت کرنے کے لیے لمبائی، طول و عرض اور فاصلے کے لکیری کوڈ پر غور کریں۔ فولڈنگ آپریشن اسے کوڈ بنا دے گا۔ اس سے شرح یکساں رہے گی۔ فولڈڈ ریڈ سولومن کوڈز اور سنگلٹن باؤنڈ سنگلٹن باؤنڈ کے ایسمپٹوٹک ورژن کے مطابق، یہ معلوم ہوتا ہے کہ کوڈ کے رشتہ دار فاصلے کو پورا کرنا چاہیے کہ کوڈ کی شرح کہاں ہے۔ جیسا کہ پہلے ثابت ہوا ہے، چونکہ شرح برقرار رکھی جاتی ہے، اس لیے رشتہ دار فاصلہ بھی سنگلٹن باؤنڈ سے ملتا ہے۔ فولڈنگ سے کیوں مدد مل سکتی ہے؟ فولڈڈ ریڈ سولومن کوڈز بنیادی طور پر ریڈ سولومن کوڈز جیسے ہی ہیں، جنہیں صرف ایک بڑے حروف تہجی پر دیکھا جاتا ہے۔ یہ ظاہر کرنے کے لیے کہ یہ کس طرح مدد کر سکتا ہے، ایک فولڈڈ ریڈ سولومن کوڈ پر غور کریں۔ ریڈ سولومن کوڈ کو ڈی کوڈ کرنا اور غلطیوں کے ایک ہی حصے کے لیے فولڈڈ ریڈ سولومن کوڈ تقریبا ایک ہی کمپیوٹیشنل شدت کے کام ہیں: کوئی بھی فولڈڈ ریڈ سولومن کوڈ کے موصولہ لفظ کو بے نقاب کر سکتا ہے، اسے اصل ریڈ سولومن کوڈ کے موصولہ لفظ کے طور پر مان سکتا ہے، اور اس پر ریڈ سولومن لسٹ ڈی کوڈنگ الگورتھم چلا سکتا ہے۔ ظاہر ہے، اس فہرست میں موصولہ لفظ کے فاصلے کے اندر تمام فولڈڈ ریڈ سولومن کوڈ ورڈز شامل ہوں گے، ساتھ ہی کچھ اضافی الفاظ بھی ہوں گے، جنہیں ہم نکال سکتے ہیں۔ نیز، فولڈڈ ریڈ سولومن کوڈ کو ڈی کوڈ کرنا ایک آسان کام ہے۔ فرض کریں کہ ہم ایک تہائی غلطیوں کو درست کرنا چاہتے ہیں۔ منتخب کردہ ڈیکوڈنگ الگورتھم کو ایک غلطی کے نمونے کو درست کرنا ہوگا جو ریڈ سولومن انکوڈنگ میں ہر تیسری علامت کو درست کرتا ہے۔ لیکن فولڈنگ کے بعد، یہ ایرر پیٹرن تمام علامتوں کو خراب کر دے گا اور ایرر کریکشن کی ضرورت کو ختم کر دے گا۔ غلطیوں کا یہ پھیلاؤ گرافیکل تفصیل میں نیلے رنگ سے ظاہر ہوتا ہے۔ یہ ثابت کرتا ہے کہ غلطیوں کے ایک مقررہ حصے کے لیے فولڈنگ آپریشن غلطیوں کو تقسیم کرنے کے لیے چینل کی لچک کو کم کر دیتا ہے، جس کے نتیجے میں غلطی کے نمونوں کی تعداد میں کمی واقع ہوتی ہے جنہیں درست کرنے کی ضرورت ہوتی ہے۔ ریڈ سولومن (ایف آر ایس) کوڈز اور پرواریش وارڈی (پی وی) کوڈز کتنے فولڈڈ ہیں ہم فولڈڈ ریڈ سولومن کوڈز کو پرواریش وارڈی کوڈز سے جوڑ سکتے ہیں جو ڈگری کے کثیر الجہتی کو کثیر الجہتی کے ساتھ انکوڈ کرتے ہیں جہاں ایک ناقابل تلافی کثیر الجہتی ہے۔ ناقابل تلافی کثیر الجہتی اور پیرامیٹر کا انتخاب کرتے وقت ہمیں یہ چیک کرنا چاہیے کہ آیا ڈگری کا ہر کثیر الجہتی زیادہ سے زیادہ مطمئن ہے کیونکہ یہ صرف اس کا منتقل شدہ ہم منصب ہے جہاں ابتدائی عنصر ہے۔ اس طرح کوڈ کی علامتوں کو ایک ساتھ جوڑنے کے ساتھ فولڈ شدہ آر ایس کوڈ تشخیصی نکات کے سیٹ کے لیے پی وی کوڈ آف آرڈر ہے۔ اگر ہم فولڈڈ آر ایس کوڈ کا موازنہ تشخیصی نکات کے سیٹ کے لیے آرڈر 2 کے پی وی کوڈ سے کرتے ہیں تو ہم دیکھ سکتے ہیں کہ پی وی انکوڈنگ میں، ہر ایک کے لیے اور پر ظاہر ہوتا ہے، فولڈڈ ایف آر ایس انکوڈنگ کے برعکس جس میں یہ صرف ایک بار ظاہر ہوتا ہے۔ اس طرح، پی وی اور فولڈڈ آر ایس کوڈز میں ایک جیسی معلومات ہوتی ہیں لیکن صرف ایف آر ایس کی شرح ایک عنصر کے لحاظ سے بڑی ہوتی ہے اور اس لیے فولڈڈ آر ایس کوڈ کے لیے صرف پی وی کوڈز کی لسٹ ڈیکوڈیبلٹی کا استعمال کرکے لسٹ ڈیکوڈنگ ریڈیئس ٹریڈ آف بہتر ہے۔ پلس پوائنٹ ایف آر ایس کوڈ کو اس طرح سے منتخب کرنے میں ہے کہ وہ متعلقہ پی وی کوڈ سے بہتر شرح کے ساتھ اسی طرح کی غلطی کی اصلاح کی کارکردگی کے ساتھ مناسب پی وی کوڈ کی کمپریسڈ شکلیں ہیں۔ کوئی بھی اس خیال کو شرح کے فولڈڈ آر ایس کوڈز کی تعمیر کے لیے استعمال کر سکتا ہے جو تقریبا کے لیے رداس تک فہرست کو ڈی کوڈ کرنے کے قابل ہیں۔ لسٹ ڈیکوڈنگ فولڈڈ ریڈ سولومن کوڈز کا مختصر جائزہ ایک لسٹ ڈیکوڈنگ الگورتھم جو رداس تک ایف آر ایس کوڈ کو ڈی کوڈ کرنے کے لیے کواڈریٹک وقت میں چلتا ہے گروسوامی کے ذریعے پیش کیا گیا ہے۔ الگورتھم میں بنیادی طور پر تین مراحل ہوتے ہیں یعنی انٹرپولیشن مرحلہ جس میں ویلچ برلیکمپ اسٹائل انٹرپولیشن کو غیر صفر کثیر الجہتی کو انٹرپولیٹ کرنے کے لیے استعمال کیا جاتا ہے جس کے بعد انٹرپولیشن میں حاصل کردہ مساوات کو مطمئن کرنے والے ڈگری والے تمام کثیر الجہتی پائے جاتے ہیں۔ تیسرے مرحلے میں قریبی کوڈ ورڈز کی اصل فہرست حل سب اسپیس کی کٹائی سے معلوم ہوتی ہے جس میں وقت لگتا ہے۔ لکیری-الجبرائی فہرست ڈیکوڈنگ الگورتھم گروسوامی لکیری-الجبرا پر مبنی ٹائم لسٹ ڈیکوڈنگ الگورتھم پیش کرتا ہے، جو فولڈڈ ریڈ سولومن کوڈ کو رداس تک کی فہرست کے سائز کے ساتھ ڈی کوڈ کر سکتا ہے۔ اس الگورتھم میں تین مراحل ہیں: انٹرپولیشن مرحلہ، روٹ فائنڈنگ مرحلہ اور پرن مرحلہ۔ انٹرپولیشن مرحلے میں یہ لکیری سسٹم کو حل کرکے امیدوار پیغام کثیر الجہتی کو تلاش کرنے کی کوشش کرے گا۔ جڑ تلاش کرنے کے مرحلے میں، یہ ایک اور لکیری نظام کو حل کرکے سب اسپیس حل تلاش کرنے کی کوشش کرے گا۔ آخری مرحلہ دوسرے مرحلے میں حاصل کردہ سولیوشن سب اسپیس کو تراشنے کی کوشش کرے گا۔ ہم مندرجہ ذیل میں تفصیلات میں ہر قدم کا تعارف کرائیں گے۔ مرحلہ 1: انٹرپولیشن مرحلہ یہ ویلچ-برلیکمپ طرز کی انٹرپولیشن ہے (کیونکہ اسے ویلچ-برلیکمپ الگورتھم کی اعلی جہتی عمومی کاری کے طور پر دیکھا جا سکتا ہے)۔ فرض کریں کہ ہمیں-فولڈڈ ریڈ سولومن کوڈ کا کوڈ ورڈ موصول ہوا ہے جیسا کہ ذیل میں دکھایا گیا ہے۔ ہم احتیاط سے منتخب کردہ ڈگری پیرامیٹر کا استعمال کرتے ہوئے نان زیرو کثیر الجہتی کو انٹرپولیٹ کرتے ہیں۔ تو انٹرپولیشن کے تقاضے ہوں گے پھر مونومیلز کی تعداد ہے کیونکہ مونومیلز کی تعداد انٹرپولیشن کے حالات کی تعداد سے زیادہ ہے۔ ہمارے پاس لیما لیما 1 سے نیچے ہے۔ زیادہ تر رکاوٹوں اور متغیرات کے ساتھ ایک یکساں لکیری نظام کو حل کرکے مندرجہ بالا انٹرپولیشن کی حالت کو مطمئن کیا جا سکتا ہے۔ مزید یہ کہ یہ انٹرپولیشن اوور آپریشنز میں انجام دی جا سکتی ہے۔ یہ لیما ہمیں دکھاتا ہے کہ انٹرپولیشن مرحلہ قریب لکیری وقت میں کیا جا سکتا ہے۔ ابھی کے لیے، ہم نے ملٹی ویریٹ کثیر الجہتی کے لیے درکار ہر چیز کے بارے میں بات کی ہے۔ بقیہ کام پیغام کے کثیر الجہتی پر توجہ مرکوز کرنا ہے۔ لیما 2. اگر کوئی امیدوار پیغام کثیر الجہتی زیادہ سے زیادہ ڈگری کا کثیر الجہتی ہے جس کی فولڈڈ ریڈ سولومن انکوڈنگ کم از کم کالموں میں موصولہ لفظ سے متفق ہے تو یہاں "اتفاق" کا مطلب ہے کہ کالم میں موجود تمام اقدار کو کوڈ ورڈ میں متعلقہ اقدار سے ملنا چاہیے۔ یہ لیما ہمیں دکھاتا ہے کہ اس طرح کا کوئی بھی کثیر الجہتی ایک الجبرائی حالت پیش کرتا ہے جو ان پیغام کثیر الجہتی کے لیے مطمئن ہونا چاہیے جن میں ہم لسٹ ڈیکوڈنگ میں دلچسپی رکھتے ہیں۔ لیما 2 اور پیرامیٹر کو یکجا کرتے ہوئے، ہمارے پاس ڈیکوڈنگ باؤنڈ ہے۔ مزید ہم دیکھتے ہیں کہ فریکشنل ایگریمنٹ مرحلہ 2 ہے: جڑ تلاش کرنے کا مرحلہ اس مرحلے کے دوران، ہمارا کام اس بات پر مرکوز ہے کہ کس طرح تمام کثیر الجہتی کو ڈگری سے زیادہ نہیں تلاش کیا جائے اور اس مساوات کو پورا کیا جائے جو ہمیں مرحلہ 1 سے ملتی ہے، یعنی چونکہ مذکورہ مساوات کثیر الجہتی کے کوفیشنٹس میں ایک لکیری سسٹم مساوات بناتی ہے، اس لیے مذکورہ مساوات کا حل ایک ذیلی ذیلی جگہ ہے۔ یہ حقیقت وہ کلیدی نقطہ ہے جو ایک موثر الگورتھم کو جنم دیتا ہے-ہم لکیری نظام کو حل کر سکتے ہیں۔ یہ پوچھنا فطری ہے کہ محلول کا طول و عرض کتنا بڑا ہے؟ کیا طول و عرض پر کوئی اوپری حد ہے؟ ایک موثر لسٹ ڈیکوڈنگ الگورتھم کی تعمیر میں اوپری باؤنڈ کا ہونا بہت ضروری ہے کیونکہ کوئی بھی کسی بھی ڈیکوڈنگ کے مسئلے کے لیے تمام کوڈ ورڈز کو آسانی سے آؤٹ پٹ کر سکتا ہے۔ درحقیقت اس کی ایک اوپری حد ہوتی ہے جیسا کہ نیچے لیما کا استدلال ہے۔ لیما 3. اگر کی ترتیب کم از کم ہے (خاص طور پر جب ابتدائی ہو)، تو حل کا طول و عرض زیادہ سے زیادہ ہے۔ یہ لیما ہمیں حل کی جگہ کے لیے طول و عرض کی اوپری حد دکھاتا ہے۔ آخر میں، مندرجہ بالا تجزیے کی بنیاد پر، ہمارے پاس ذیل تھیوریم تھیوریم 1 ہے۔ بلاک کی لمبائی کے فولڈڈ ریڈ سولومن کوڈ کے لیے اور تمام انٹیجرز کے لیے درج ذیل ہولڈز کی درجہ بندی کریں۔ موصولہ لفظ کو دیکھتے ہوئے، وقت کے ساتھ، کوئی بھی زیادہ سے زیادہ طول و عرض کی ذیلی جگہ کے لیے ایک بنیاد تلاش کر سکتا ہے جس میں ڈگری سے کم کے تمام پیغام کثیر الجہتی ہوتے ہیں جن کی ایف آر ایس انکوڈنگ کوڈ ورڈ پوزیشنوں کے زیادہ سے زیادہ ایک حصے سے مختلف ہوتی ہے۔ جب، ہم دیکھتے ہیں کہ یہ غلطیوں کے ایک حصے کے ساتھ ایک منفرد ڈیکوڈنگ الگورتھم تک کم ہو جاتا ہے۔ دوسرے لفظوں میں، ہم منفرد ڈیکوڈنگ الگورتھم کو لسٹ ڈیکوڈنگ الگورتھم کی خصوصیت کے طور پر استعمال کر سکتے ہیں۔ مقدار پیرامیٹر کے انتخاب کے لیے ہے جو کی فہرست کو ڈیکوڈنگ کے رداس کو حاصل کرتی ہے۔ نظریہ 1 ہمیں بتاتا ہے کہ غلطی کا رداس کتنا بڑا ہوگا۔ اب آخر کار ہمیں حل سب اسپیس مل جاتا ہے۔ تاہم ایک مسئلہ اب بھی باقی ہے۔ بدترین صورت میں فہرست کا سائز ہے۔ لیکن قریبی کوڈ ورڈز کی اصل فہرست اس ذیلی جگہ کے اندر صرف ایک چھوٹا سا مجموعہ ہے۔ لہذا ہمیں ذیلی جگہ کو تنگ کرنے کے لیے اسے تراشنے کے لیے کچھ عمل کی ضرورت ہے۔ اس کٹائی کے عمل میں بدترین صورت میں وقت لگتا ہے۔ بدقسمتی سے یہ معلوم نہیں ہے کہ رننگ ٹائم کو کیسے بہتر بنایا جائے کیونکہ ہم نہیں جانتے کہ فولڈڈ ریڈ سولومن کوڈ کے لیے لسٹ سائز کی حد کو کیسے بہتر بنایا جائے۔ اگر ہم پیغامات کے طور پر تمام ممکنہ ڈگری کثیر الجہتی کے ذیلی سیٹ کو احتیاط سے منتخب کرکے کوڈ کو تبدیل کرتے ہیں تو حالات بہتر ہو جاتے ہیں، فہرست کا سائز بہت چھوٹا ظاہر ہوتا ہے جبکہ شرح میں تھوڑا سا نقصان ہوتا ہے۔ ہم اگلے مرحلے میں اس کے بارے میں مختصر بات کریں گے۔ مرحلہ 3: کٹائی کا مرحلہ فولڈڈ ریڈ سولومن کوڈ کو ڈی کوڈ کرنے کے مسئلے کو دو لکیری سسٹمز میں تبدیل کرنے سے، ایک لکیری سسٹم جو انٹرپولیشن اسٹیپ کے لیے استعمال ہوتا ہے اور دوسرا لکیری سسٹم جو امیدوار حل سب اسپیس کو تلاش کرنے کے لیے استعمال ہوتا ہے، ڈی کوڈنگ کے مسئلے کی پیچیدگی کو کامیابی کے ساتھ کم کر کے کواڈریٹک کر دیا جاتا ہے۔ تاہم، بدترین صورت میں، آؤٹ پٹ کے لسٹ سائز کی حد بہت خراب ہے۔ مرحلہ 2 میں یہ ذکر کیا گیا تھا کہ اگر کوئی پیغامات کے طور پر تمام ممکنہ ڈگری کثیر الجہتی کے صرف ایک ذیلی سیٹ کو احتیاط سے منتخب کرتا ہے تو فہرست کا سائز بہت کم کیا جا سکتا ہے۔ یہاں ہم اپنی بحث کو وسعت دیں گے۔ اس مقصد کو حاصل کرنے کے لیے، خیال یہ ہے کہ گتانک ویکٹر کو ایک خاص ذیلی سیٹ تک محدود رکھا جائے، جو ذیل میں دو شرائط کو پورا کرتا ہے: شرط 1۔ سیٹ کافی بڑا ہونا چاہیے ()۔ یہ اس بات کو یقینی بنانے کے لیے ہے کہ شرح کو فیکٹر کے لحاظ سے زیادہ سے زیادہ کم کیا جائے گا۔ شرط 2. سیٹ میں طول و عرض کی کسی بھی ذیلی جگہ کے ساتھ کم چوراہا ہونا چاہیے جو اطمینان بخش ہو اور اس طرح کے ذیلی سیٹ کو ذیلی جگہ سے ہٹنے والا ذیلی سیٹ کہا جاتا ہے۔ بدترین صورت میں فہرست کے سائز کا باؤنڈ ہے، اور اسے سب اسپیس-ایواسیو سبسیٹس کا استعمال کرکے نسبتا چھوٹے باؤنڈ تک کم کیا جا سکتا ہے۔ اس مرحلے کے دوران، چونکہ اسے حل کی ذیلی جگہ کے ہر عنصر کو چیک کرنا ہوتا ہے جو ہمیں مرحلہ 2 سے ملتا ہے، اس میں بدترین صورت میں وقت لگتا ہے (حل کی ذیلی جگہ کا طول و عرض ہے)۔ دیویر اور لووٹ نے گروسوامی کے کام کی بنیاد پر نتیجہ کو بہتر بنایا، جو فہرست کے سائز کو مستقل تک کم کر سکتا ہے۔ یہاں صرف وہ خیال پیش کیا گیا ہے جو سولیوشن سب اسپیس کو تراشنے کے لیے استعمال ہوتا ہے۔ کٹائی کے عمل کی تفصیلات کے لیے، براہ کرم گروسوامی، دیویر اور لووٹ کے کاغذات دیکھیں، جو حوالہ میں درج ہیں۔ خلاصہ اگر ہم مرحلہ 3 پر غور نہیں کرتے ہیں، تو یہ الگورتھم کواڈریٹک وقت میں چل سکتا ہے۔ اس الگورتھم کا خلاصہ ذیل میں درج ہے۔ ریڈ سولومن ایرر کریکشن سنگلٹن باؤنڈ کوڈنگ تھیوری لسٹ ڈیکوڈنگ حوالہ جات اتری رودر کے لیکچر نوٹ: فولڈڈ ریڈ سولومن کوڈز اتری رودر کے لیکچر نوٹ: باؤنڈز وینکٹیشن گروسوامی کے لیکچر نوٹ: کوڈ پر ابتدائی حدود وینکٹیشن گروسوامی کے لیکچر نوٹ: لسٹ ڈیکوڈنگ فولڈڈ ریڈ سولومن کوڈ کوڈنگ تھیوری ایرر ڈٹیکشن اینڈ کریکشن کمپیوٹیشنل پیچیدگی تھیوری