Hacker News

Isingeniso esisebenzisanayo kuma-quadtrees

Amazwana

11 min read Via growingswe.com

Mewayz Team

Editorial Team

Hacker News

Kungani I-Quadtrees Ibaluleke Kakhulu Kunokuba Ucabanga Ngayo

Njalo uma ucindezela ukuze usondeze kumephu yedijithali, ubuza izindawo zokudlela eziseduze, noma ubuka i-real-time freet tracker ibuyekeza inqwaba yezithonjana zemoto ngaphandle kokuba isiphequluli sakho simile, kunethuba elihle lokuthi i-quadtree iphakamisa isandla ngemuva kwezigcawu. Ama-Quadtrees angezinye zalezo zakhiwo zedatha ezinhle abantu abaningi abangalokothi bezwe ngazo, kodwa banika amandla buthule ezinye zezinhlelo ezibaluleke kakhulu ekusebenzeni kwesofthiwe yesimanje - kusukela ekutholeni ukushayisana kwegeyimu yevidiyo kuya kumasistimu olwazi lwendawo acubungula izigidi zemibuzo yendawo ngomzuzwana. Ukuqonda ukuthi zisebenza kanjani akukwenzi nje umthuthukisi ongcono; ishintsha kakhulu indlela ocabanga ngayo ngokuhlela nokusesha ngedatha yendawo. Kungakhathaliseki ukuthi wakha inkundla yezokulethwa kwezidingo, ideshibhodi yezibalo ezisekelwe endaweni, noma uzama ukunikeza amaphoyinti edatha angu-50,000 kukhanvasi ngaphandle kokuphahlaza isiphequluli, ama-quadtrees ahlinzeka ngesixazululo esiqondakalayo nesisebenza kahle ngokuphawulekayo.

Iyini Ngempela I-Quadtree?

I-quadtree iyisakhiwo sedatha yesihlahla lapho inodi ngayinye yangaphakathi inezingane ezine ncamashi, ngayinye imele iquadrant eyodwa yesikhala esinezinhlangothi ezimbili. Ake ucabange uthatha isifunda esiyisikwele usihlukanise sibe izikwele ezine ezilinganayo - enyakatho-ntshonalanga, enyakatho-mpumalanga, eningizimu-ntshonalanga, naseningizimu-mpumalanga. Ngasinye salezo zikwele singaphinda sihlukaniswe sibe ezinye izikwele ezine, njalo njalo, ngokuphindaphindiwe, uze ufinyelele esimweni esithile sokuma. Leso simo sokuma ngokuvamile siwukujula okuphezulu noma umkhawulo wokuthi mangaki amaphoyinti edatha indawo eyodwa engakwazi ukubamba ngaphambi kokuba ihlukanise.

Ubuhle bale ndlela yokusebenza bulele esimweni sayo sokuguquguquka. Izindawo eziminyene ezinamaphoyinti edatha zihlukaniswa zibe amaseli acolekile nangcono, kuyilapho izindawo ezigqagqene zihlala ziyizifunda ezinkulu, ezingahlukanisiwe. I-quadtree egcina izindawo zezitolo zekhofi eziyi-10,000 ezweni lonke izodala ukuhlukaniswa okujulile, okuningiliziwe phezu kweManhattan - lapho kungaba nezitolo ezingama-300 kumakhilomitha-skwele ambalwa - kuyilapho kugcinwa indawo enkulu yasemakhaya i-Wyoming njengendawo eyodwa, engahlukanisiwe equkethe uziro noma iphuzu elilodwa. Lokhu kulungiswa okuguquguqukayo yikho okwenza ama-quadtree abe namandla kakhulu uma kuqhathaniswa negridi eyisicaba, engamosha inani elikhulu lememori kumaseli angenalutho.

Umqondo wachazwa okokuqala ngu-Raphael Finkel kanye no-J.L. Bentley ngo-1974, futhi kusukela lapho uye wahlukaniswa waba okuhlukile okuningana: ama-point quadtrees gcina amapheya ahlanganisayo angawodwana, ama-quadtree wesifunda amele izindawo ze-spatial (eziwusizo ekucindezelweni kwesithombe), kanye nama-edge handleama-edge. Okuhlukile ngakunye kulungiselela izimo zokusetshenziswa ezihlukene, kodwa umgomo oyinhloko wokuhlukanisa iziqephu uhlala ufana kuzo zonke.

Indlela Ukufaka Nokubuza Okusebenza ngayo

Ukuze ufake iphoyinti ku-quadtree, uqala ku-root node futhi unqume ukuthi iyiphi kumaquadrants amane iphuzu eliwela kuwo. Bese ubuyela endaweni yengane yaleyo quadrant bese uphinda inqubo. Uma ufinyelela endaweni yeqabunga engakaze yeqe umthamo wayo (imvamisa isethwe kumaphoyinti angu-1 noma ama-4), umane ugcine iphuzu lapho. Uma iqabunga selivele linamandla, lihlukana libe izingane ezine, lisabalalise amaphuzu alo akhona phakathi kwabo, bese lifaka iphuzu elisha enganeni efanelekile. Le nqubo ivamise ukuqeda ngesikhathi sika-O(log n) ukuze kusatshalaliswe ngokulinganayo, nakuba izimo ezimbi kakhulu ezinedatha ehlangene kakhulu zingehlisa izinga lokusebenza.

Ububanzi bemibuzo — ukuthola wonke amaphuzu endaweni ethile engunxande — yilapho ama-quadtrees akhanya khona ngempela. Esikhundleni sokuhlola iphuzu ngalinye kudathasethi yakho (umsebenzi we-O(n)), uqala empandeni bese ubuza umbuzo olula endaweni ngayinye: ingabe umngcele wale nodi uyahlangana nonxande wami wosesho? Uma kungenjalo, usika isihlahla esingaphansi sonke — okungenzeka ukhiphe izinkulungwane zamaphoyinti ekucatshangelweni esiqhathanisweni esisodwa. Uma kunempambanomgwaqo, uphinda ungene ezinganeni ezifanele. Amaphuzu atholakala kumanodi eqabunga awela phakathi kukanxande wosesho ayengezwa kusethi yemiphumela.

Cabangela isibonelo esisebenzayo: unedathasethi yezindawo zamakhasimende ezingu-100,000 futhi udinga ukuthola wonke umuntu ngaphakathi kwerediyasi yamakhilomitha angu-5 yokuvula isitolo esisha. Indlela ye-brute-force idinga izibalo zebanga eziyi-100,000. I-quadtree eyakhiwe kahle ingase yehlise lokho kube wukuhlola okungu-200-500 nje ngokususa zonke izifunda zejografi ezingadluleli ngokusobala endaweni yakho yosesho. Lokho ukuthuthukiswa kokusebenza kwe-200x noma ngaphezulu — umehluko phakathi kombuzo othatha ama-millisecond angu-800 futhi uthathe ama-millisecond angu-4.

Izinhlelo Zokusebenza Zomhlaba Wangempela Ezisebenza Kuma-Quadtrees

Ukusetshenziswa kwama-quadtrees kunwebeka ngale kwesayensi yekhompyutha yezemfundo. Ziyisisekelo sezinhlelo ezisetshenziswa izigidigidi zabantu nsuku zonke, ngokuvamile ngaphandle kokuqaphela.

  • Ukwenza imephu nokuzulazula: Amasevisi afana ne-Google Amamephu ne-Mapbox zisebenzisa amasistimu ethayela afana ne-quadtree ukuze anikeze izithombe zemephu. Ileveli yokusondeza ngayinye ihlukanisa amathayela abe izingane ezine, yingakho izixhumanisi zamathayili emephu zilandela iphethini engu-z/x/y ebonisa ikheli le-quadtree. Uma usondeza ibhulokhi yedolobha, kuphela amathayela afanele anokulungiswa okuphezulu alayishayo — umhlaba wonke uhlala ekulungisweni okumaholo.
  • Ukutholwa kokushayisana kumageyimu: Izinjini zegeyimu zisebenzisa ama-quadtree (kanye nozakwabo we-3D, ama-octrees) ukuze zithole kahle lapho izinto zishayisana. Esikhundleni sokuhlola zonke izinto ezimbili — iphupho elibi le-O(n²) elinamabhizinisi angu-1,000 esikrinini — injini ihlola kuphela izinto ezine-quadtree cell efanayo, inciphisa ukuhlola kube inombolo elawulekayo.
  • Ukuminyanisa isithombe: Ama-quadtrees esifunda angaminyanisa izithombe ngokuhlanganisa amaphikseli ancikene abelana ngemibala efanayo abe amabhulokhi amakhulu. Lesi isisekelo sama-algorithms athile wokuminyanisa afinyelela isilinganiso sokuminyanisa esingu-10:1 kuyilapho kugcinwa ukwethembeka okubonakalayo ezindaweni ezinemininingwane ephansi.
  • Ukuphathwa kwemikhumbi kanye nokusetshenziswa: Izinkampani ezilethayo zisebenzisa inkomba yendawo ukuze zifanise abashayeli nama-oda aseduze ngesikhathi sangempela. I-quadtree ivumela isistimu yokuthumela iphendule ngokushesha umbuzo othi "ibaphi abashayeli abangu-5 abaseduze kakhulu nale ndawo yokulandwa?" kuzo zonke izinkulungwane zezimoto ezibuyekeza izindawo zazo ze-GPS njalo ngemizuzwana embalwa.
  • Izibalo ze-Geospatial: Amaplathifomu ahlanganisa idatha yebhizinisi esekelwe endaweni — amamephu wokuminyana kwamakhasimende, ukuthuthukiswa kwendawo yokuthengisa, ukuhlaziya ukubekwa kwesitolo — kuncike ezakhiweni zedatha yendawo ukuze yenze le mibuzo isebenze kunokuthi icutshungulwe ngenqwaba.

Ukuqonda okubalulekile ngemuva kwe-quadtrees ukuthi imibuzo eminingi yendawo ayidingi ukuhlola idatha eminingi. Ngokuhlela isikhala ngokwezigaba, uguqula usesho lwe-brute-force lube ukuphambana okuqondiwe — uguqule imizuzwana ibe ama-millisecond futhi wenze ukusebenzisana kwesikhathi sangempela kwenzeke ngisho namasethi edatha amakhulu.

Ukwakha I-Quadtree Kusukela Ekuqaleni

Ukusebenzisa i-quadtree eyisisekelo kuyangeneka ngokumangazayo, nakubathuthukisi abamaphakathi. Isakhiwo esiyinhloko sidinga izingxenye ezimbalwa nje: umngcele (indawo engunxande imbozo yenodi), umthamo (amaphoyinti aphezulu ngaphambi kokuhlukaniswa), uhlu lwamaphoyinti, kanye nezinkomba ezinodi zezingane ezine (ekuqaleni zingenalutho). Wonke umsebenzi wokufaka ungabhalwa ngaphansi kwemigqa yekhodi engama-30 ezilimini eziningi.

Umsebenzi wokuhlukanisa udala amanodi ezingane amane amasha, ngalinye lihlanganisa iquadrant eyodwa yomngcele womzali. Kumzali onomngcele (x, y, ububanzi, ukuphakama), ingane esenyakatho-mpumalanga ithola (x + ububanzi/2, y, ububanzi/2, ubude/2), inyakatho-ntshonalanga ithola (x, y, ububanzi/2, ubude/2), njalonjalo. Ngemuva kokuhlukaniswa, amaphuzu akhona aphinde asakazwe ezinganeni ezifanele. Iphutha elivamile ukukhohlwa ukusula uhlu lwamaphuzu omzali ngemva kokusabalalisa kabusha, okuholela emiphumeleni eyimpinda ngesikhathi semibuzo.

Ngokusetshenziswa kokukhiqiza, ukulungiselelwa okuningana kubalulekile. Ukusetha umthamo we-node kumaphoyinti angu-4-8 ngokuvamile kudlula umthamo ongu-1, ngenxa yokuthi kunciphisa ukujula kwesihlahla kanye nengaphezulu lezinto zenodi. Ukwengezaumkhawulo wokujula okukhulu (ngokuvamile amazinga angu-8-12) kuvimbela izimo ze-pathological lapho amaphuzu amaningi abelana ngezixhumanisi ezifanayo kusukela ekudaleni izihlahla ezijule ngokungenamkhawulo. Futhi kumadathasethi aguquguqukayo lapho amaphuzu ahamba khona - njengokulandelela imoto - uzofuna indlela yokususa noma isu lokwakha kabusha isihlahla ngezikhathi ezithile, njengoba ama-quadtrees awakwazi ukuzilinganisa njengoba kwenza izihlahla ezimnyama-bomvu.

💡 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 →

Ama-quadtrees ku-Business Platform ne-Analytics

Izinkundla zebhizinisi zesimanje ziya ngokuya zibhekana nedatha yendawo, kungakhathaliseki ukuthi izindawo zamakhasimende, izindawo zokulethwa, izindawo zokuthengisa, noma ukulandelelwa kwempahla. Inselele akukhona nje ukugcina le datha - iyenza ibuzeke ngesikhathi sangempela esikalini. Uma ibhizinisi elisebenza kuwo wonke amadolobha angu-50 lidinga ukubona ngeso lengqondo ukuminyana kwamakhasimende, izishayeli zokulethwa komzila, noma ukuhlaziya ukusebenza kokuthengisa kwesifunda, isu eliyisisekelo lenkomba yendawo linquma ukuthi ideshibhodi ilayisha ngama-millisecond angu-200 noma imizuzwana engu-20.

Lesi esinye sezizathu izinkundla ezifana ne-Mewayz — ehlanganisa amamojula angu-207 ahlanganisa i-CRM, ama-invoyisi, ukuphathwa kwemikhumbi, ukubhukha, nokuhlaziya ku-OS yebhizinisi elilodwa — zuza ekuphathweni kahle kwedatha yendawo ngaphansi kwehod. Uma imojula yokuphathwa kwemikhumbi idinga ukubonisa izimoto ezisebenzayo ezingu-500 kumephu, noma uma imojuli ye-CRM ibona ngeso lengqondo izindawo zabasebenzisi abangu-138,000+ zokuhlela indawo, izindlela zokungenangqondo azilingani. Izakhiwo zokukhomba zendawo ezifana nama-quadtrees (noma okufana nazo kusizindalwazi, njenge-PostGIS R-trees kanye nezinkomba zendawo ze-MySQL) zikwenza kube nokwenzeka ukunikeza lezi zici ngaphandle kokudinga ihadiwe yezinga lebhizinisi.

Kumabhizinisi ahlola izinkundla, okuthathwayo kuyasebenziseka: amathuluzi aphatha kahle indawo nedatha yendawo awasebenzisi nje ama-algorithms aphambili ngenxa yako. Benza umehluko phakathi kwesistimu yokubhuka engabonisa ngokushesha abahlinzeki besevisi abatholakalayo phakathi kwamakhilomitha angu-10 kanye nethatha amasekhondi angu-8 ukulayisha imiphumela efanayo. Ukusebenza kuleli zinga kuhumusha ngokuqondile ulwazi lomsebenzisi futhi, ekugcineni, imali engenayo.

Ama-Quadtrees vs. Ezinye Izakhiwo Zedatha Yendawo

Ama-quadtrees akuyona ukuphela kwenketho yenkomba yendawo, futhi ukuqonda ezinye izindlela kukusiza ukuthi ukhethe ithuluzi elilungile. I-R-trees, esetshenziswa kakhulu kuzinqolobane ezifana ne-PostGIS kanye nemojuli ye-R*Tree ye-SQLite, ihlela idatha ibe onxande ababophezelayo obuncane futhi isingathe imibuzo yobubanzi kanye nosesho lomakhelwane abaseduze ngendlela efanele. Ngokuvamile zidlula ama-quadtree okulondoloza okusekelwe kudiski ngoba zinciphisa ukusebenza kwe-I/O, yingakho izingosi zolwazi eziningi zendawo zisebenzisa okuhlukile kwe-R-tree ngaphakathi kune-quadtrees.

Izihlahla ze-K-d zisebenzisa ukuhlukana okuhambisana ne-eksisi okushintshanayo (kuqala ngo-x, bese ngo-y, bese ngo-x futhi) futhi zinhle kakhulu ekusesheni komakhelwane ezindaweni ezimaphakathi. Zivame ukwenza kahle kakhulu kunama-quadtrees lapho ubukhulu buphansi futhi idathasethi imile, kodwa kunzima ukuyibuyekeza ngokushintshashintshayo. Ama-Geohashe athatha indlela ehlukile ngokuphelele, ebhala i-latitude nobude kube yiyunithi yezinhlamvu eyodwa lapho iziqalo ezabiwe zibonisa ukusondela kwendawo — okuzenza zilungele ukukhonjwa kwesizindalwazi kanye nokugcinwa kwesikhashana kodwa zingakwazi ukuguquguquka kancane emibuzweni yobubanzi engaqondakali.

Ama-quadtrees azibambela mathupha ezimeni ezidlala ngamandla awo: inkomba yendawo yenkumbulo, amasethi edatha aguquguqukayo anokufakwa njalo nokususwa, izinhlelo zokusebenza zokubonisa lapho ukwakheka kwegridi ye-hierarchical kumephu ngokwemvelo ukuze kusondeza, nezimo lapho ubulula bokusebenzisa bubalulekile. Kuhlelo lokusebenza olungaphambili olunikeza amaphoyinti edatha angu-10,000 kukhanvasi ene-pan-and-zoom, i-quadtree esetshenziswe emigqeni engu-100 ye-JavaScript izodlula noma yisiphi isisombululo esisekelwe kusizindalwazi ngokumane isuse ukubambezeleka kwenethiwekhi.

Ukuqalisa: Izinyathelo Ezilandelayo Ezisebenzayo

Uma ufuna ukujulisa ukuqonda kwakho kwama-quadtrees ngaphezu kokufunda ngawo, indlela ephumelela kakhulu ukwakha eyodwa ngokubukeka. Dala uhlelo lokusebenza olulula lwekhanvasi lapho ukuchofoza kungeza amaphuzu, futhi ubuke ukuhlukaniswa kwesihlahla ngesikhathi sangempela. Engeza unxande wombuzo webanga ongakwazi ukuwuhudula bese ugqamisa amaphuzu eliwatholayo. Lokhu kusebenzisana kwakha umuzwa wokuthi akukho inani lokufunda elingalingana — uzobona ngokushesha ukuthi kungani idatha ehlanganisiwe idala izihlahla ezijulile nokuthi ukuziphatha kokuthena ngesikhathi semibuzo kuqeda kanjani indawo enkulu.

Ngezinhlelo zokusebenza zokukhiqiza, cabangela le mihlahlandlela: uma idatha yakho ihlala kusizindalwazi, sebenzisa inkomba yendawo yolwazi lwakho egciniwe (PostGIS, MySQL Spatial, MongoDB 2dsphere indexes) kunokusebenzisa ama-quadtrees kukhodi yohlelo lokusebenza. Uma wenza ukubonakala kohlangothi lweklayenti noma ukucubungula okusenkumbulweni, amalabhulali afana ne-d3-quadtree ye-JavaScript noma i-pyquadtree ye-Python ikunikeza ukusetshenziswa okuhlolwe impi. Futhi uma wakha inkundla ephethe noma yiluphi uhlobo lwedatha yendawo - kusukela emakhelini ekhasimende kuya emzileni wokulethwa kuya ekuphathweni kwendawo - tshala isikhathi ukuze uqonde ukukhomba indawo, ngoba kuzololonga ngokuyisisekelo lokho isicelo sakho esingakwenza ngesilinganiso.

Ama-quadtrees amele umgomo obanzi kusayensi yekhompiyutha: ukuthi isakhiwo osikhethela idatha yakho sinquma imibuzo ongayiphendula kahle. Uhlu oluyisicaba lwezixhumanisi lungaphendula "nginike wonke amaphuzu," kodwa i-quadtree ingaphendula "nginike wonke amaphuzu eduze lapha" — futhi ingakwenza ngokushesha ngokwanele ukuze uzizwe ngokushesha. Emhlabeni lapho u-73% wedatha yebhizinisi inengxenye yendawo ngokwezilinganiso zemboni, lelo khono alikona nje okwezemfundo. Kuyinzuzo yokuncintisana.

Imibuzo Evame Ukubuzwa

Iyini i-quadtree futhi isebenza kanjani?

I-quadtree iyisakhiwo sedatha esisekelwe esihlahleni esihlukanisa ngokuphindaphindiwe isikhala esinezinhlangothi ezimbili sibe amaquadranti amane alinganayo. I-node ngayinye ingabamba inombolo elinganiselwe yamaphoyinti edatha ngaphambi kokuhlukaniswa kube amanodi ezingane ezine. Lokhu kuhlukaniswa okulandelanayo kwenza imibuzo yendawo - njengokuthola wonke amaphuzu endaweni ethile - ngokushesha okukhulu, kunciphisa isikhathi sokusesha ukusuka kumugqa ukuya ku-logarithmic ezimweni ezingokoqobo.

Akuphi ama-quadtrees avame ukusetshenziswa ezinhlelweni zomhlaba wangempela?

Ama-Quadtrees anika amandla amasistimu anhlobonhlobo afaka amamephu edijithali anomsebenzi wokuncinza ukuze usondeze, amadeshibhodi okulandelela izimoto ngesikhathi sangempela, izinjini zokuthola ukushayisana kwamageyimu evidiyo, namasistimu olwazi lwendawo acubungula izigidi zemibuzo yendawo ngomzuzwana. Noma yiluphi uhlelo lokusebenza oludinga ukusesha, ukufaka, noma ukuphatha kahle izinto ezisatshalaliswe endaweni enezinhlangothi ezimbili lungazuza ku-quadtree indexing.

Ingabe i-quadtrees iqhathaniswa kanjani nezinye izakhiwo zedatha yendawo?

Ngokungafani namagridi ayisicaba, ama-quadtrees ajwayela ukulungiswa kwawo ukuze avumelane nokuminyana kwedatha — izindawo ezigqagqene zihlala zimaholoholo kuyilapho izifunda eziminyene zihlukana ngokuqhubekayo. Uma kuqhathaniswa nezihlahla ze-k-d, ama-quadtrees alula ukuwasebenzisa futhi afaneleka kangcono idatha ye-2D esatshalaliswe ngokufanayo. Izihlahla ezi-R zisingatha izifunda ezigqagqene kahle kakhulu, kodwa ama-quadtrees awina ngesivinini sokufaka futhi kulula ukuwahlanganisa ukuze agcwalise umsebenzi wesikhathi sangempela.

Ingabe ama-quadtrees angasiza ekuthuthukiseni ukusebenza kwesofthiwe yebhizinisi?

Nakanjani. Noma yiliphi ithuluzi lebhizinisi lokuphatha idatha yendawo, izibalo zendawo, noma amadeshibhodi asebenzisanayo azuza ngokulungiselelwa kwe-quadtree. Izingxenyekazi ezifana Mewayz, i-OS yebhizinisi enamamojula angu-207 eqala ku-$19/mo, iphakamisa izakhiwo zedatha ezisebenza kahle ngemuva kwezigcawu ukuze ilethe ukuzizwisa okusheshayo, okusabelayo — kusuka kumamephu wendawo yesitolo kuya kuzibalo zesikhathi sangempela ezinkulungwaneni zamaphoyinti edatha.

Try Mewayz Free

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

Start managing your business smarter today

Join 30,000+ businesses. Free forever plan · No credit card required.

Ready to put this into practice?

Join 30,000+ 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