Regex gabat gelýänleriň hemmesini tapmak elmydama O (n²) boldy | Mewayz Blog Skip to main content
Hacker News

Regex gabat gelýänleriň hemmesini tapmak elmydama O (n²) boldy

Teswirler

7 min read Via iev.ee

Mewayz Team

Editorial Team

Hacker News

Nusga gabat gelmegiň gizlin bahasy

Döredijiler üçin yzygiderli aňlatmalar (regex) aýrylmaz gural, tekstden maglumatlary derňemek, tassyklamak we çykarmak üçin Şweýsariýa goşunynyň pyçagydyr. E-poçta formatlaryny barlamakdan başlap, surnallardan maglumatlary döwmäge çenli regex çözgüt. Şeýle-de bolsa, bu güýçli fasadyň aşagynda onýyllyklaryň dowamynda ulgamlary başdan geçirýän öndürijilik duzagy ýerleşýär: ähli gabat gelýänleri setirde tapmagyň iň erbet wagty O (n²). Bu kwadrat wagt çylşyrymlylygy, giriş setiriniň çyzykly ösmegi bilen, gaýtadan işlemegiň wagtynyň çalt ösüp biljekdigini, garaşylmadyk haýallamalara, çeşmeleriň tükenmegine we ReDoS (Hyzmatyň yzygiderli beýan edilmegi inkär edilmegine) sebäp bolýandygyny aňladýar. Bu mahsus çäklendirmä düşünmek has ygtybarly we täsirli programmalary gurmak üçin ilkinji ädimdir.

Näme üçin Regex O (n²) bilen gabat gelýär? Yzyna yzarlamak meselesi

O (n²) çylşyrymlylygynyň kökü, adaty regex hereketlendirijileriniň ulanýan mehanizminde: yzky yzarlamak. Haçan-da Perl, Python ýa-da Java-daky ýaly regex hereketlendirijisi mümkin bolan gabat gelýänleri tapmaga synanyşanda, setiri bir gezek skanerden geçirmeýär. Dürli ýollary öwrenýär. "Aaaaaaaaac" ýaly köplenç "a" setirine ulanylýan "(a +) + b" ýaly ýönekeý nagşy gözden geçiriň. Dwigatel açgözlik bilen ähli "a" -lary ilkinji "a +" bilen gabat getirýär, soň bolsa soňky "b" bilen deňleşmäge synanyşýar. Şowsuz bolanda, soňky "a" bilen deňeşdirip, daşarky topardaky "+" mukdaryny synap görýär. Bu amal gaýtalanýar, hereketlendirijini "a" -laryň toparlara bölünmeginiň mümkin bolan ähli kombinasiýasyny synap görmäge mejbur edýär we bu mümkinçiligiň kombinator partlamasyna sebäp bolýar. Dwigateliň gözlemeli ýollarynyň sany setir uzynlygynyň kwadratyna proporsional bolup biler, şonuň üçin O (n²).

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