সকলো regex মিল বিচাৰি উলিওৱা সদায় O(n2) | Mewayz Blog Skip to main content
Hacker News

সকলো regex মিল বিচাৰি উলিওৱা সদায় O(n2)

মন্তব্য

2 min read Via iev.ee

Mewayz Team

Editorial Team

Hacker News

প্যাটাৰ্ণ মিলনৰ লুকাই থকা খৰচ

ডেভেলপাৰসকলৰ বাবে, নিয়মীয়া অভিব্যক্তিসমূহ (regex) এটা অপৰিহাৰ্য সঁজুলি, লিখনীৰ পৰা তথ্য বিশ্লেষণ, বৈধকৰণ আৰু উলিওৱাৰ বাবে এটা চুইছ আৰ্মি ছুৰী। ইমেইল বিন্যাসসমূহ পৰীক্ষা কৰাৰ পৰা লগসমূহৰ পৰা তথ্য স্ক্ৰেপ কৰালৈকে, regex হৈছে যাওক সমাধান। কিন্তু, এই শক্তিশালী মুখাৱয়বৰ তলত এটা পৰিৱেশন ফান্দ আছে যি দশক দশক ধৰি চিস্টেমসমূহক জুৰুলা কৰি আহিছে: এটা ষ্ট্ৰিংত সকলো মিল বিচাৰি পোৱাৰ আটাইতকৈ বেয়া-ক্ষেত্ৰৰ সময়ৰ জটিলতা হৈছে O(n2)। এই দ্বিঘাত সময়ৰ জটিলতাৰ অৰ্থ হ'ল যে ইনপুট ষ্ট্ৰিং ৰৈখিকভাৱে বৃদ্ধি হোৱাৰ লগে লগে, প্ৰচেছিং সময় ঘাতীয়ভাৱে বৃদ্ধি পাব পাৰে, যাৰ ফলত অপ্ৰত্যাশিত মন্থৰতা, সম্পদ ক্লান্তি, আৰু ReDoS (ৰেগুলাৰ এক্সপ্ৰেচন ডিনিয়াল অৱ চাৰ্ভিচ) নামেৰে জনাজাত এটা পৰিঘটনা হ'ব পাৰে। এই অন্তৰ্নিহিত সীমাবদ্ধতাক বুজি পোৱাটোৱেই হৈছে অধিক শক্তিশালী আৰু কাৰ্যক্ষম এপ্লিকেচনসমূহ নিৰ্মাণৰ দিশত প্ৰথম পদক্ষেপ।

Regex O(n2) মিল থকা কিয়? পিছুৱাই যোৱাৰ সমস্যা

O(n2) জটিলতাৰ মূল বেছিভাগ পৰম্পৰাগত ৰেগেক্স ইঞ্জিনে ব্যৱহাৰ কৰা ব্যৱস্থাটোত নিহিত হৈ আছে: পিছুৱাই যোৱা। যেতিয়া এটা regex ইঞ্জিনে, যেনে পাৰ্ল, পাইথন, বা জাভাত থকা, সকলো সম্ভাৱ্য মিল বিচাৰিবলৈ চেষ্টা কৰে, ই কেৱল ষ্ট্ৰিংটো এবাৰ স্কেন নকৰে। ই বিভিন্ন পথ অন্বেষণ কৰে। `(a+)+b` ৰ দৰে এটা সৰল আৰ্হি বিবেচনা কৰক যিটো বেছিভাগ "a" ৰ এটা ষ্ট্ৰিংত প্ৰয়োগ কৰা হৈছে, যেনে "aaaaaaaaac" । ইঞ্জিনে লোভেৰে সকলো "a" প্ৰথম `a+` ৰ সৈতে মিলাই দিয়ে, তাৰ পিছত চূড়ান্ত "b" ৰ সৈতে মিলাবলৈ চেষ্টা কৰে। যেতিয়া ই বিফল হয়, ই পিছুৱাই যায়—শেষ "a" ৰ মিল নোহোৱা কৰি আৰু বাহিৰৰ গোটত `+` পৰিমাণীকৰণ চেষ্টা কৰে। এই প্ৰক্ৰিয়াটো পুনৰাবৃত্তি হয়, ইঞ্জিনে "a" সমূহক কেনেকৈ গোট কৰিব পাৰি তাৰ প্ৰতিটো সম্ভাৱ্য সংমিশ্ৰণ চেষ্টা কৰিবলৈ বাধ্য কৰে, যাৰ ফলত সম্ভাৱনাৰ সংমিশ্ৰণমূলক বিস্ফোৰণ ঘটে। ইঞ্জিনে অন্বেষণ কৰিবলগীয়া পথৰ সংখ্যা ষ্ট্ৰিং দৈৰ্ঘ্যৰ বৰ্গৰ সমানুপাতিক হ'ব পাৰে, সেয়েহে O(n2).

  • লোভী পৰিমাণীকৰণকাৰী: `.*` বা `.+` ৰ দৰে আৰ্হিসমূহে প্ৰথম অৱস্থাত যিমান পাৰি সিমান লিখনী খৰচ কৰে, যাৰ ফলত আৰ্হিৰ পৰৱৰ্তী অংশসমূহ মিল নাথাকিলে ব্যাপক পিছুৱাই যায়।
  • নেষ্টেড পৰিমাণীকৰণসমূহ: `(a+)+` বা `(a*a*)*` ৰ দৰে এক্সপ্ৰেচনে ইনপুট ষ্ট্ৰিং বিভাজিত কৰাৰ এটা ঘাতীয় সংখ্যক উপায় সৃষ্টি কৰে, প্ৰচেছিং সময় নাটকীয়ভাৱে বৃদ্ধি কৰে।
  • অস্পষ্ট আৰ্হিসমূহ: যেতিয়া এটা ষ্ট্ৰিংক একাধিক ওভাৰলেপিং ধৰণেৰে মিলাব পাৰি, ইঞ্জিনে সকলো মিল বিচাৰিবলৈ প্ৰতিটো সম্ভাৱনা পৰীক্ষা কৰিব লাগিব।

বাস্তৱ-জগতৰ প্ৰভাৱ: কেৱল মন্থৰতাতকৈ অধিক

এয়া কেৱল শৈক্ষিক চিন্তা নহয়। উৎপাদন পৰিৱেশত অদক্ষ ৰেগেক্সৰ গুৰুতৰ পৰিণতি হ’ব পাৰে। এটা আপাত দৃষ্টিত নিৰাপদ তথ্য বৈধকৰণ পৰীক্ষা এটা বটলনেক হ'ব পাৰে যেতিয়া বৃহৎ ফাইলসমূহ প্ৰচেছ কৰা বা ব্যৱহাৰকাৰীৰ ইনপুটৰ উচ্চ পৰিমাণ নিয়ন্ত্ৰণ কৰা হয়। আটাইতকৈ বিপজ্জনক ফলাফল হৈছে এটা ReDoS আক্ৰমণ, য'ত এটা ক্ষতিকাৰক অভিনেতাই এটা সযতনে নিৰ্মিত ষ্ট্ৰিং প্ৰদান কৰে যিয়ে এটা ৱেব এপ্লিকেচনৰ regex ত আটাইতকৈ বেয়া-ক্ষেত্ৰৰ পৰিৱেশন ট্ৰিগাৰ কৰে, ফলপ্ৰসূভাৱে চাৰ্ভাৰক ওলোমাই ৰাখে আৰু ইয়াক বৈধ ব্যৱহাৰকাৰীসকলৰ বাবে অনুপলব্ধ কৰি তোলে। ব্যৱসায়ৰ বাবে, ইয়াৰ পোনপটীয়াকৈ ডাউনটাইম, হেৰুৱা ৰাজহ, আৰু ক্ষতিগ্ৰস্ত সুনামলৈ অনুবাদ হয়। জটিল চিস্টেমসমূহ নিৰ্মাণ কৰাৰ সময়ত, বিশেষকৈ যিবোৰে অবিশ্বাস্য তথ্য প্ৰক্ৰিয়া কৰে, এই regex ফান্দসমূহৰ বিষয়ে সচেতন হোৱাটো সুৰক্ষা আৰু পৰিৱেশন অডিটিঙৰ এটা জটিল অংশ।

"আমাৰ এবাৰ এটা সৰু কনফিগাৰেচন আপডেট আছিল যিয়ে ব্যৱহাৰকাৰী-এজেণ্ট ষ্ট্ৰিংসমূহ বিশ্লেষণ কৰিবলে এটা regex প্ৰৱৰ্তন কৰিছিল। সাধাৰণ লোডৰ অধীনত, ই ঠিকেই আছিল। কিন্তু এটা ট্ৰেফিক স্পাইকৰ সময়ত, ই এটা কেছকেডিং বিফলতাৰ সৃষ্টি কৰিছিল যিয়ে আমাৰ API মিনিটৰ বাবে নমাই আনিছিল। অপৰাধী আছিল এটা O(n2) regex আমি কেতিয়াও নাজানিছিলো যে আমাৰ আছে।" - এজন জ্যেষ্ঠ DevOps অভিযন্তা

Mewayz

ৰ সৈতে স্মাৰ্ট চিস্টেমসমূহ নিৰ্মাণ কৰা

গতিকে, আমি এই মৌলিক বাধাৰ বাহিৰলৈ কেনেকৈ যাম? সমাধানটোৰ লগত উন্নত সঁজুলি আৰু স্মাৰ্ট স্থাপত্যৰ পছন্দৰ সংমিশ্ৰণ জড়িত হৈ আছে। প্ৰথমে, বিকাশকসকলে সমস্যাজনক আৰ্হি চিনাক্ত কৰিবলৈ আৰু অধিক কাৰ্যক্ষম হ'বলৈ পুনৰ লিখিবলৈ regex বিশ্লেষক ব্যৱহাৰ কৰিব পাৰে (যেনে, স্বত্বাধিকাৰী পৰিমাণীকৰণ বা পৰমাণু গোট ব্যৱহাৰ কৰি)। চূড়ান্ত পৰিৱেশনৰ বাবে, বিকল্প এলগৰিদমসমূহ আছে যি আৰ্হি মিলনৰ বাবে ৰৈখিক সময়, O(n), নিশ্চিত কৰে, যদিও প্ৰামাণিক লাইব্ৰেৰীসমূহত সিহত কম সাধাৰণ।

এইটো হৈছে য'ত Mewayz ৰ দৰে এটা মডিউলাৰ ব্যৱসায়িক অপাৰেটিং চিষ্টেমে এটা উল্লেখযোগ্য সুবিধা প্ৰদান কৰে। Mewayz এ আপোনাক জটিল প্ৰক্ৰিয়াসমূহ বিভাগীয় আৰু নিৰীক্ষণ কৰাৰ অনুমতি দিয়ে। এটা একক এপ্লিকেচন থকাৰ পৰিবৰ্তে য'ত এটা লেহেমীয়া regex এ সমগ্ৰ ব্যৱস্থাপ্ৰণালীক পংগু কৰিব পাৰে, আপুনি তথ্য বিশ্লেষণ আৰু বৈধকৰণৰ বাবে এটা নিৰ্দিষ্ট, পৃথক মাইক্ৰ'চাৰ্ভিচ মোতায়েন কৰিব পাৰিব । যদি কোনো পৰিৱেশনৰ সমস্যাৰ সৃষ্টি হয়, তেন্তে ইয়াক নিয়ন্ত্ৰণ কৰা হয় আৰু অন্য ব্যৱসায়িক কাৰ্য্যকলাপত কোনো প্ৰভাৱ নেপেলোৱাকৈ সমাধান কৰিব পাৰি। ইয়াৰ উপৰিও, Mewayz প্লেটফৰ্মৰ ভিতৰত পৰ্যবেক্ষণযোগ্যতা সঁজুলিসমূহে আপোনাৰ গ্ৰাহকসকলক প্ৰভাৱিত কৰাৰ আগতে এই অদক্ষতাসমূহ চিনাক্ত কৰাত সহায় কৰিব পাৰে, এটা সম্ভাৱ্য সংকটক এটা পৰিচালনাযোগ্য অনুকূলন কাৰ্য্যলৈ ৰূপান্তৰিত কৰি। এটা নমনীয় আৰু পৰ্যবেক্ষণযোগ্য ভেটিৰ ওপৰত নিৰ্মাণ কৰি, আপুনি নিশ্চিত কৰে যে আপোনাৰ ব্যৱসায়িক যুক্তি, জটিল লিখনী প্ৰচেছিং অন্তৰ্ভুক্ত কৰি, পৰিৱেশনশীল আৰু স্থিতিস্থাপক হৈ থাকে।

💡 DID YOU KNOW?

Mewayz replaces 8+ business tools in one platform

CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.

Start Free →

সঘনাই সোধা প্ৰশ্ন

প্যাটাৰ্ণ মিলনৰ লুকাই থকা খৰচ

ডেভেলপাৰসকলৰ বাবে, নিয়মীয়া অভিব্যক্তিসমূহ (regex) এটা অপৰিহাৰ্য সঁজুলি, লিখনীৰ পৰা তথ্য বিশ্লেষণ, বৈধকৰণ আৰু উলিওৱাৰ বাবে এটা চুইছ আৰ্মি ছুৰী। ইমেইল বিন্যাসসমূহ পৰীক্ষা কৰাৰ পৰা লগসমূহৰ পৰা তথ্য স্ক্ৰেপ কৰালৈকে, regex হৈছে যাওক সমাধান। কিন্তু, এই শক্তিশালী মুখাৱয়বৰ তলত এটা পৰিৱেশন ফান্দ আছে যি দশক দশক ধৰি চিস্টেমসমূহক জুৰুলা কৰি আহিছে: এটা ষ্ট্ৰিংত সকলো মিল বিচাৰি পোৱাৰ আটাইতকৈ বেয়া-ক্ষেত্ৰৰ সময়ৰ জটিলতা হৈছে O(n2)। এই দ্বিঘাত সময়ৰ জটিলতাৰ অৰ্থ হ'ল যে ইনপুট ষ্ট্ৰিং ৰৈখিকভাৱে বৃদ্ধি হোৱাৰ লগে লগে, প্ৰচেছিং সময় ঘাতীয়ভাৱে বৃদ্ধি পাব পাৰে, যাৰ ফলত অপ্ৰত্যাশিত মন্থৰতা, সম্পদৰ ক্লান্তি, আৰু ReDoS (ৰেগুলাৰ এক্সপ্ৰেচন ডিনিয়াল অৱ চাৰ্ভিচ) নামেৰে জনাজাত এটা পৰিঘটনা হ'ব পাৰে। এই অন্তৰ্নিহিত সীমাবদ্ধতাক বুজি পোৱাটোৱেই হৈছে অধিক শক্তিশালী আৰু কাৰ্যক্ষম এপ্লিকেচনসমূহ নিৰ্মাণৰ দিশত প্ৰথম পদক্ষেপ।

Regex O(n2) মিল থকা কিয়? পিছুৱাই যোৱাৰ সমস্যা

O(n2) জটিলতাৰ মূল বেছিভাগ পৰম্পৰাগত ৰেগেক্স ইঞ্জিনে ব্যৱহাৰ কৰা ব্যৱস্থাটোত নিহিত হৈ আছে: পিছুৱাই যোৱা। যেতিয়া এটা regex ইঞ্জিনে, যেনে পাৰ্ল, পাইথন, বা জাভাত থকা, সকলো সম্ভাৱ্য মিল বিচাৰিবলৈ চেষ্টা কৰে, ই কেৱল ষ্ট্ৰিংটো এবাৰ স্কেন নকৰে। ই বিভিন্ন পথ অন্বেষণ কৰে। `(a+)+b` ৰ দৰে এটা সৰল আৰ্হি বিবেচনা কৰক যিটো বেছিভাগ "a" ৰ এটা ষ্ট্ৰিংত প্ৰয়োগ কৰা হৈছে, যেনে "aaaaaaaaac" । ইঞ্জিনে লোভেৰে সকলো "a" প্ৰথম `a+` ৰ সৈতে মিলাই দিয়ে, তাৰ পিছত চূড়ান্ত "b" ৰ সৈতে মিলাবলৈ চেষ্টা কৰে। যেতিয়া ই বিফল হয়, ই পিছুৱাই যায়—শেষ "a" ৰ মিল নোহোৱা কৰি আৰু বাহিৰৰ গোটত `+` পৰিমাণীকৰণ চেষ্টা কৰে। এই প্ৰক্ৰিয়াটো পুনৰাবৃত্তি হয়, ইঞ্জিনে "a" সমূহক কেনেকৈ গোট কৰিব পাৰি তাৰ প্ৰতিটো সম্ভাৱ্য সংমিশ্ৰণ চেষ্টা কৰিবলৈ বাধ্য কৰে, যাৰ ফলত সম্ভাৱনাৰ সংমিশ্ৰণমূলক বিস্ফোৰণ ঘটে। ইঞ্জিনে অন্বেষণ কৰিবলগীয়া পথৰ সংখ্যা ষ্ট্ৰিং দৈৰ্ঘ্যৰ বৰ্গৰ সমানুপাতিক হ'ব পাৰে, সেয়েহে O(n2).

বাস্তৱ-জগতৰ প্ৰভাৱ: কেৱল মন্থৰতাতকৈ অধিক

এয়া কেৱল শৈক্ষিক চিন্তা নহয়। উৎপাদন পৰিৱেশত অদক্ষ ৰেগেক্সৰ গুৰুতৰ পৰিণতি হ’ব পাৰে। এটা আপাত দৃষ্টিত নিৰাপদ তথ্য বৈধকৰণ পৰীক্ষা এটা বটলনেক হ'ব পাৰে যেতিয়া বৃহৎ ফাইলসমূহ প্ৰচেছ কৰা বা ব্যৱহাৰকাৰীৰ ইনপুটৰ উচ্চ পৰিমাণ নিয়ন্ত্ৰণ কৰা হয়। আটাইতকৈ বিপজ্জনক ফলাফল হৈছে এটা ReDoS আক্ৰমণ, য'ত এটা ক্ষতিকাৰক অভিনেতাই এটা সযতনে নিৰ্মিত ষ্ট্ৰিং প্ৰদান কৰে যিয়ে এটা ৱেব এপ্লিকেচনৰ regex ত আটাইতকৈ বেয়া-ক্ষেত্ৰৰ পৰিৱেশন ট্ৰিগাৰ কৰে, ফলপ্ৰসূভাৱে চাৰ্ভাৰক ওলোমাই ৰাখে আৰু ইয়াক বৈধ ব্যৱহাৰকাৰীসকলৰ বাবে অনুপলব্ধ কৰি তোলে। ব্যৱসায়ৰ বাবে, ইয়াৰ পোনপটীয়াকৈ ডাউনটাইম, হেৰুৱা ৰাজহ, আৰু ক্ষতিগ্ৰস্ত সুনামলৈ অনুবাদ হয়। জটিল চিস্টেমসমূহ নিৰ্মাণ কৰাৰ সময়ত, বিশেষকৈ যিবোৰে অবিশ্বাস্য তথ্য প্ৰক্ৰিয়া কৰে, এই regex ফান্দসমূহৰ বিষয়ে সচেতন হোৱাটো সুৰক্ষা আৰু পৰিৱেশন অডিটিঙৰ এটা জটিল অংশ।

Mewayz

ৰ সৈতে স্মাৰ্ট চিস্টেমসমূহ নিৰ্মাণ কৰা

গতিকে, আমি এই মৌলিক বাধাৰ বাহিৰলৈ কেনেকৈ যাম? সমাধানটোৰ লগত উন্নত সঁজুলি আৰু স্মাৰ্ট স্থাপত্যৰ পছন্দৰ সংমিশ্ৰণ জড়িত হৈ আছে। প্ৰথমে, বিকাশকসকলে সমস্যাজনক আৰ্হি চিনাক্ত কৰিবলৈ আৰু অধিক কাৰ্যক্ষম হ'বলৈ পুনৰ লিখিবলৈ regex বিশ্লেষক ব্যৱহাৰ কৰিব পাৰে (যেনে, স্বত্বাধিকাৰী পৰিমাণীকৰণ বা পৰমাণু গোট ব্যৱহাৰ কৰি)। চূড়ান্ত পৰিৱেশনৰ বাবে, বিকল্প এলগৰিদমসমূহ আছে যি আৰ্হি মিলনৰ বাবে ৰৈখিক সময়, O(n), নিশ্চিত কৰে, যদিও প্ৰামাণিক লাইব্ৰেৰীসমূহত সিহত কম সাধাৰণ।

আপোনাৰ ব্যৱসায়িক অপাৰেটিং চিষ্টেম আজিয়েই নিৰ্মাণ কৰক

ফ্ৰীলান্সাৰৰ পৰা এজেন্সীলৈকে, Mewayz এ 208 সংহত মডিউলৰ সৈতে 138,000+ ব্যৱসায়ক শক্তি প্ৰদান কৰে। বিনামূলীয়াকৈ আৰম্ভ কৰক, বৃদ্ধি হ'লে উন্নয়ন কৰক।

বিনামূলীয়া একাউণ্ট সৃষ্টি কৰক →

Try Mewayz Free

All-in-one platform for CRM, invoicing, projects, HR & more. No credit card required.

Start managing your business smarter today

Join 6,208+ businesses. Free forever plan · No credit card required.

Ready to put this into practice?

Join 6,208+ businesses using Mewayz. Free forever plan — no credit card required.

Start Free Trial →

Ready to take action?

Start your free Mewayz trial today

All-in-one business platform. No credit card required.

Start Free →

14-day free trial · No credit card · Cancel anytime