[Muzika] DOUG Lloyd: Pra, ne kemi qenë të afrohet dhe më afër se Grail shenjtë e të dhënave struktura, ai që ne mund të futni në, fshini nga, dhe të kërkoni në kohë të vazhdueshme. E drejtë. Kjo është lloj i qëllimit. Ne duam që të jenë në gjendje për të bërë gjëra shumë, shumë shpejt. Kemi gjetur këtu kur ne jemi duke folur për përpiqet? E pra, le të marrin një sy. Pra, ne kemi parë disa strukturat e ndryshme të të dhënave që merret me pasqyrimin e ashtuquajtura çifte kyç vlerë, hartë disa pjesë të të dhënave në disa pjesë të tjera të të dhënave kështu që ne e dimë se ku për të gjetur informacioni në strukturën. Pra për grup, për shembull, Çelësi është indeksi ose elementi grup Vendndodhja 0 ose 1 grup dhe kështu me radhë. Dhe vlera janë të dhënat që ekziston në atë vend. Pra, çfarë është ruajtur në rrjet 0? Çfarë është ruajtur në rrjet 1 kundrejt vetëm 0 dhe 1, e cila do të jetë çelësat. Me një tabelë hash është lloj të njëjtën ide. Me një tabelë hash, ne kemi këtë hash funksion që gjeneron kodet hash. Pra, çelësi është kodi hash e të dhënave. Dhe vlera, veçanërisht kemi biseduar për chaining në video në tabelat hash, është se lista e lidhur e të dhënave se hashes për atë hashcode. E drejtë. Po në lidhje me një tjetër përqasje kjo metodë, edhe pse? Po në lidhje me një metodë ku Çelësi është e garantuar të jetë unike, ndryshe nga një tabelë hash, ku ne mund të përfundojnë me dy pjesë të të dhënave që ka të njëjtin hashcode. Dhe pastaj ne duhet të merren me që nga ose probing ose më shumë mundësisht chaining për të rregulluar këtë problem. Deri tani ne mund të garantojë se çelësi jonë do të jetë unik. Dhe çfarë nëse vlera jonë ishte vetëm diçka aq e lehtë si vërteta dhe të rreme që na tregon nëse apo jo ajo pjesë e informacionit ekziston në strukturën? Një Boolean mund të jetë aq e thjeshtë sa një grimë. Realisht kjo është ndoshta një byte më shumë gjasa se një grimë. Por kjo është shumë më e vogël se ruajtjen ndoshta një varg 50-karakter, për shembull. Pra përpiqet, të ngjashme me hash tavolina, të cilat kombinojnë vargjeve dhe listë e lidhur, përpiqet të kombinuar vargjeve, strukturat, dhe pointers së bashku për të ruajtur të dhënat në një mënyrë interesante që është mjaft i ndryshëm nga çdo gjë që kemi parë deri tani. Tani ne përdorim të dhënat si një udhërrëfyes për të lundruar këtë strukturë të dhënave. Dhe në qoftë se ne mund të ndiqni udhërrëfyesi, në qoftë se ne mund të ndjekin të dhënat nga fillimi në fund, ne do të e di nëse këto të dhëna ekzistojnë në Trie. Dhe në qoftë se ne nuk mund të ndiqni hartën nga do të thotë në fund fare, të dhënat nuk mund të ekzistojë. Përsëri, çelësat këtu janë garantuar të jetë unike. Dhe kështu ndryshe nga një tabelë hash, ne kurrë nuk do të duhet të merren me goditjet këtu. Dhe nuk ka dy pjesë të të dhënave kanë saktësisht të njëjtën udhërrëfyesin e përveç nëse që të dhënat është identike. Nëse ne të futur Gjoni, atëherë ne kërko për Gjonit. Kjo është dy copa identike të të dhënave, e drejtë, ne jemi duke kërkuar përmes. Por ndryshe, çdo dy copa të të dhënave janë garantuara që të ketë plane unike përmes kësaj strukture të dhënave. Dhe ne jemi duke shkuar për të marrë një vështrim në një vizuale të këtë në një moment të vetëm. Ne do të bëjmë këtë duke u përpjekur për të të krijojë një strukturë të re të të dhënave, hartës palë kyçe vlerë. Në këtë rast, ne nuk jemi duke shkuar për të përdorur diçka e thjeshtë si një Boolean. Ne fakt do të ruajtur string. Dhe kjo varg do të të jetë emri i një universiteti. Dhe çelësi do të jetë viti kur se universiteti u themelua. Të gjitha vjet për universitetet do të jenë katër shifra. Dhe kështu që ne do të përdorim këto katër shifra të lundruar nëpër këtë strukturë të dhënave. Dhe ne do të shohim, përsëri, si ne bëjmë atë në vetëm një të dytë. Në fund të rrugës, ne do të shohim emrin e universitetit që korrespondon në atë kyç, këto katër shifra. Ideja themelore prapa një Trie është që ne kemi një rrugë qendrore. Pra, mendoni për atë si një pemë. Dhe kjo është e ngjashme në drejtshkrim dhe në konceptin për një pemë. Në përgjithësi kur mendojmë për pemë në botën e vërtetë, ata kanë një rrënjë që është në terren dhe ata rriten lart dhe ata kanë degë dhe ata kanë gjethe. Dhe në thelb ideja e një Trie është saktësisht e njëjtë, përveç se rrënjë është ankoruar diku në qiell. Dhe gjethet janë në fund. Pra, kjo është lloj i marrë si një pemë dhe vetëm Flipping atë me kokë poshtë. Por ka ende degë. Dhe ata do të ishin rrugët tona, ata do të jenë lidhjet tona nga rrënja në gjethe. Në këtë rast, ata shtigjet, ato degë janë emërtuar me shifra që na tregojnë cila rrugë për të shkuar nga aty ku jemi. Nëse ne shohim një 0, ne do të shkojmë poshtë këtë degë, në qoftë se ne shohim një 1, ne do të shkojmë poshtë këtë degë, dhe kështu dhe kështu me radhë. E pra, çfarë do të thotë kjo? E pra, kjo do të thotë se në çdo pikë kryqëzim dhe çdo nyje në e mesme dhe çdo degë, ka 10 të mundshme vende që ne mund të shkojnë. Pra, ka 10 pointers nga çdo vend. Dhe ky është vendi ku mundohet mund të merrni pak frikësuese për dikë i cili nuk ka shumë Përvoja në shkenca kompjuterike para. Por mundohet janë me të vërtetë shumë e awesome. Dhe në qoftë se ju keni shans për të punuar me ta dhe ju jeni të gatshëm për të gërmoj-në dhe të eksperimentojnë me ta, ata janë me të vërtetë mjaft interesante strukturat e të dhënave për të punuar me të. Në qoftë se ne duam të futur një element në Trie, të gjithë ne duhet të bëjmë është ndërtuar rrugën e drejtë nga rrënja deri në fletë. Ja se çfarë çdo hap përgjatë mënyra mund të duket si. Ne jemi duke shkuar për të përcaktuar një të dhënave të re Struktura për një nyje të re të quajtur një Trie. Dhe brenda kësaj dhënave Struktura ka dy pjesë. Ne jemi duke shkuar për të ruajtur emri i një universiteti. Dhe ne jemi duke shkuar për të ruajtur një grup i pointers të nyjeve të tjera të tipit të njëjtë. Pra, përsëri, kjo është se lloj e konceptit të kudo ne jemi, ne në 10 të mundshme vende ne mund të shkojnë. Nëse ne shohim një 0, ne do të shkojmë poshtë këtë degë. Nëse ne shohim një 1, kjo degë, dhe kështu me radhë e kështu me radhë e kështu me radhë. Nëse themi 9, ne do të shkojmë poshtë këtë degë. Pra, në çdo pikë kryqëzim, ne mund të shkojnë 10 vende të mundshme. Pra, çdo nyje duhet të përmbajë 10 pointers për nyjet e tjera, deri në 10 nyjet e tjera. Dhe të dhënat që ne jemi ruajtjen është vetëm emri i universitetit. Pra, le të ndërtojmë një Trie. Le të futur një çift e artikujve në Trie tonë. Pra, në shumë të lartë, kjo është nyja jonë rrënjë. Kjo është ndoshta do të jetë diçka ju jeni do të shpallim globalisht. Dhe ju do të jeni për të ruajtur globalisht një tregues për këtë nyje gjithmonë. Ju jeni duke shkuar për të thënë, rrënjë barabartë, dhe ju jeni do të malloc veten nyje Trie. Dhe ju kurrë nuk do të jeni për të prekur rrënjë përsëri. Çdo herë që dëshironi të të fillojë lundrimit nëpër, keni vendosur një akrep barabartë me rrënjës, të tilla si trav, i cili është shembulli i përdorim në shumë prej videot e mia këtu në oxhaqet dhe radhët e gjata dhe listat Link dhe kështu me radhë. Ju vendosur një akrep thirrje Trav për traversal. Dhe ju përdorni për të lundruar trav nëpërmjet strukturës së të dhënave. Pra, le të shohim se si kjo mund të duket. Deri tani, çfarë nuk duket si një nyje? E pra, ashtu si të dhëna tona Deklarata Struktura e treguar, ne kemi një varg, i cili në këtë rast është bosh. Nuk ka asgjë këtu. Dhe një grup prej 10 pointers. Dhe tani, ne vetëm 1 nyje në këtë Trie. Nuk ka asgjë tjetër në të. Pra, të gjithë 10 e atyre pointers pikë të null. Kjo është ajo që e kuqe tregon. Le të futur vargun Harvardit. Le të futur në Universitetin e Harvard në këtë Trie, i cili u themelua në vitin 1636. Ne duam që të përdorni tastin, 1636, për të na tregoni se ku ne jemi duke shkuar për të ruajtur Harvardit në Trie. Tani, si mund ta bëjmë këtë? Kjo mund të duket diçka si kjo. Ne të fillojë në rrënjë. Dhe ne kemi këto 10 vende ne mund të shkojnë. Rrënja është vetëm si çdo nyje të tjera të Trie. Ka 10 vende ne mund të shkojë nga këtu. Ku ne ndoshta duam për të shkuar në qoftë se çelësi është 1636? Ka me të vërtetë dy opsione. E drejtë. Ne mund të ndërtojmë kyç nga djathta në të majtë dhe të fillojnë me 6. Ose ne mund të ndërtojmë kyç nga majta në të djathtë dhe të fillojnë me 1. Kjo është ndoshta më shumë intuitive si një qenie njerëzore për të kuptuar ne do të Vetëm të shkojnë majta në të djathtë. Dhe kështu që në qoftë se unë dua të futur Harvard në këtë Trie, Unë ndoshta duan të fillojnë duke filluar në rrënjë, duke kërkuar në 10 opsionet e mia para meje, dhe duke thënë Unë dua të shkoj poshtë 1 rrugën. NE RREGULL. Tani, 1 rruga është aktualisht null. Pra, nëse unë dua të vazhdoj poshtë këtë rrugë për të futur këtë element në Trie, Unë kam për të malloc një nyje të re, kanë 1 pikë atje, dhe pastaj unë jam i mirë për të shkuar. Kështu që unë jam në thelb një pikë ku unë jam duke qëndruar në rrënjët e pemës apo në Trie dhe ka 10 degë. Por secila degë ka një porta në frontin e tij. E drejtë. Sepse nuk ka asgjë tjetër nuk ka. Nuk ka kalim të sigurt. Kjo do të thotë se nuk ka asgjë poshtë ndonjë prej këtyre degëve. Nëse unë dua të fillojë ndërtimin diçka, unë dua për të hequr portën. Unë dua për të hequr portën në frontin e numrit 1. Dhe unë dua të ecin poshtë atë. Dhe unë dua të ndërtoj Një tjetër vend për mua për të shkuar. Dhe kjo është ajo që unë kam bërë këtu. Pra, 1 nuk tregon null. Unë e kam thënë se është e sigurt për të shkuar poshtë këtu tani. I ndërtuar një nyje. Dhe kur të shkoj në atë nyje, unë kanë një tjetër vendim për të bërë. Ku jam duke shkuar për të shkuar nga këtu? E pra, unë kam shkuar tashmë poshtë 1. Kështu që tani unë ndoshta dua të shkoj poshtë 6. E drejtë. Përsëri, unë kam 10 vende unë mund të zgjidhni. Pra, tani le të zbresin numrin 6. Kështu që unë të qartë portën në frontin e numrit 6. Dhe unë eci atje poshtë. Dhe unë ndërtoj një tjetër nyje. Dhe unë kam arritur në një pikë tjetër kryqëzim. Përsëri, unë kam 10 zgjedhje për ku unë mund të shkoj. Kam lëvizur nga 1 deri në 6. Kështu që tani unë ndoshta dëshironi të shkoni në 3. 3, nuk ka ku unë mund të shkoj. Kështu që unë kam për të pastruar rrugën dhe të ndërtoj një hapësirë ​​të re. Dhe pastaj nga 3, ku dua të shkoj? Unë dua të shkoj poshtë 6. Dhe, përsëri, unë kam për të të pastruar rrugën për të bërë atë. Deri tani unë kam përdorur çelësin tim për të futur të krijuar nyjet dhe të fillojnë për të ndërtuar këtë Trie. Unë kam filluar në rrënjë. Unë kam shkuar poshtë 1636. Dhe tani unë jam në fund aty në atë nyje. Dhe ju mund të jetë në gjendje të shohin atë në ekranin tuaj. Është theksuar në të verdhë. Kjo është ajo ku unë aktualisht jam. Çelësi im është bërë. Unë e kam shteruar çdo pozicion në Key time. Kështu që unë nuk mund të shkojmë më tutje. Pra, në këtë pikë, të gjithë i me të vërtetë duhet të bëni është të thënë, në rregull. Kjo është lloj i pëlqen kërkim poshtë në tokë, në qoftë se ju jeni duke parashikuar veten si këtë lloj të rrugës me lidhje të ndryshme. Lloj të shikuar poshtë dhe lloj llak pikturë Harvard në terren. Ky është emri i kësaj. E di se kjo është ajo që është në këtë vend. Në qoftë se ne të fillojë në rrënjë dhe ne do të shkojmë poshtë 1 dhe pastaj 6 dhe pastaj 3 dhe pastaj 6, ku jemi ne? E pra, nëse ne shikojmë poshtë dhe ne shohim Harvard, pastaj ne e dimë se Harvardit ishte themeluar në vitin 1636 në bazë të rrugës ne jemi duke zbatuar këtë strukturën e të dhënave. Kështu që ishte shpresë e thjeshtë. Ne jemi duke shkuar për të bërë dy insertions më shumë. Dhe shpresojmë se ajo do të ndihmojë për të shih kjo bëhet dy herë më shumë. Tani, le të futur një tjetër universitet. Le të futur Yale në këtë Trie. Yale u themelua në 1701. Pra, ne do të fillojë në nivel rrënjë, si ne gjithmonë të bëjë. Dhe ne kemi vendosur një tregues traversal. Ne jemi duke shkuar për të përdorur atë për të lëvizur nëpër. Gjëja e parë që ne duam të bëni është të shkoni poshtë 1 rrugën. Kjo është shifra e parë e kyç tonë. Për fat të mirë, edhe pse, ne nuk e bëjmë keni për të bërë ndonjë punë këtë herë. Në 1 rruga tashmë është pastruar. I pastruar atë më parë kur unë ishte futur në Harvard në 1636. Kështu që unë mund të sigurtë të lëvizin poshtë 1 dhe thjesht shkoni atje. Nëse mund të lëvizin poshtë 1. Tani, edhe pse, unë dua të shkoj në 7. I hapi rrugën në 6. Unë e di unë mund të sigurtë të vazhdojë në rrugën 6. Por kam nevojë për të vazhduar në rrugën 7. Pra, çfarë duhet të bëj? E pra, ashtu si më parë, unë vetëm nevojë për të pastruar portën, të marrë nga rruga, dhe për të ndërtuar një nyje të re nga rruga 7. Ashtu si kjo. Deri tani unë kam lëvizur 1 dhe pastaj 7. Dhe tani vini re, unë jam lloj e në këtë Subbranch ri. E drejtë. Çdo gjë tjetër nga 16 në, unë nuk e kujdesit në lidhje me. Unë nuk jam duke bërë 16 asgjë. Unë jam duke bërë 17 gjëra. Deri tani nga 17 e tutje, unë kam për të lloj i flakët shtigje të reja këtu. Shifra tjetër Çelësi im është 0. Unë në mënyrë të qartë nuk mund të merrni kudo. Unë vetëm ndërtuar këtë nyje. Kështu që unë e di se nuk ka asnjë Shtigjet përpara nga këtu. Pra, unë kam për të bërë një veten. Kështu që unë malloc një nyje të re dhe kanë 0 pikë atje. Dhe pastaj një herë më shumë, unë malloc një nyje të reja dhe kanë një pikë atje. Përsëri, unë e kam lodhur çelësin tim, 1701. Kështu që unë shikoj poshtë dhe unë llak bojë Yale. Ky është emri i këtij nyje. Dhe kështu që tani, nëse unë ndonjëherë nevojë për të parë nëse Yale është në këtë Trie, unë të fillojë në rrënjë, Unë shkoj poshtë 1701, dhe shikoni poshtë. Dhe në qoftë se unë shoh Yale llak pikturuar mbi tokë, atëherë Unë e di Yale ekziston në këtë Trie. Le të bëjmë një më shumë. Le të futur Dartmouth në këtë Trie, e cila u themelua në 1769. Të fillojë në rrënjë përsëri. Shifra ime e parë e çelësit tim është 1. Unë mund të sigurtë të lëvizin poshtë këtë rrugë. Që tashmë ekziston. Shifra tjetër e çelësit tim është 7. Unë mund të sigurtë të lëvizin poshtë këtë rrugë. Ajo ekziston si. Im i ardhshëm është 6. Prej këtu, nga ku unë aktualisht jam në të verdhë atje në atë nyje e mesme, 6 është momentalisht E Mbyllur off. Nëse unë dua të shkoj poshtë këtë rrugë, Unë kam për të ndërtuar atë vetë. Kështu që unë do malloc një nyje të re dhe kanë 6 pikë atje. Dhe pastaj, përsëri, unë jam flakëron shtigje të reja këtu. Kështu që unë malloc një nyje të re në mënyrë që nga se numri rrugë node-- 9-- dhe pastaj tani në qoftë se unë e udhëtimit vitin 1769, dhe unë shikoj poshtë. Nuk ka asgjë për momentin llak pikturuar atje. Unë mund të shkruaj Dartmouth. Dhe unë e kam futur Dartmouth në Trie. Pra, kjo është futur gjërat në të Trie. Tani ne duam të kërkoni për gjëra. Si mund të kërkoni për gjërat në Trie? E pra, kjo është shumë e shumë të njëjtën ide. Tani ne vetëm përdorni shifrat e kyç për të parë nëse ne mund të lundruar nga rrënja ku duam të shkojmë në Trie. Nëse ne goditi një fund të vdekur në çdo pikë, atëherë ne e dimë se se elementi nuk mund të ekziston ose tjetër se rruga do të tashmë janë pastruar. Nëse bëjmë atë gjatë gjithë rrugës për në fund, të gjithë ne duhet të bëjmë është të shikoni poshtë dhe të shohim nëse kjo është elementi ne jemi duke kërkuar për të. Nëse kjo është, suksesi. Nëse nuk është, dështojnë. Pra, le të kërkoni për Harvard në këtë Trie. Ne të fillojë në rrënjë. Dhe, përsëri, ne jemi duke shkuar për të krijojë një akrep traversal për të bërë lëvizje tonën. Nga rrënja ne e dimë se Vendin e parë ne kemi nevojë për të shkuar është 1, mund ta bëjmë këtë? Po ne mundemi. Nëse në mënyrë të sigurtë ekziston. Ne mund të shkojnë atje. Tani, vendi tjetër ne kemi nevojë për të shkuar është 6. A ekziston rruga 6 nga këtu? Po, ajo bën. Ne mund të shkojnë në rrugën 6. Dhe ne fund deri këtu. A mund të shkojmë poshtë në 3 rrugën nga këtu? E pra, siç rezulton, po, që ekziston edhe. Dhe mund të marrim në 6 rrugën nga këtu? Po ne mundemi. Ne nuk janë përgjigjur fare pyetja akoma. Ka ende një më shumë hap, e cila tani është ne duhet të shikoni poshtë dhe të shohim nëse kjo është actually-- në qoftë se ne jemi duke kërkuar për Harvardit, është se Çfarë ne gjejmë pasi ne shter çelësin? Në shembullin ne jemi duke përdorur këtu, vite janë gjithmonë katër shifra. Por ju mund të jeni duke përdorur shembullin ku po mbledh një fjalor të fjalëve. Dhe kështu në vend që 10 pointers për vendndodhjen time, ju mund të keni 26. Një për çdo letër e alfabetit. Dhe ka disa fjalë si bat, i cili është një mesin e batch, per shembull. Dhe kështu që edhe në qoftë se ju merrni të Fundi i kyç dhe ju shikoni poshtë, ju nuk mund të shihni se çfarë ju jeni duke kërkuar për. Kështu që ju gjithmonë duhet të kaloj tërë rruga dhe pastaj qoftë se keni qenë në gjendje me sukses të kaloj nëpër të gjithë rrugën, shikoni poshtë dhe të bëjë një konfirmim përfundimtar. A është kjo ajo që unë jam duke kërkuar për? E pra, unë shikoj poshtë pas fillimit në krye dhe të shkojnë 1636. Unë shoh poshtë. Unë shoh në Harvard. Pra, po, kam pasur sukses. Çka nëse ajo që unë jam duke kërkuar për nuk është në Trie, edhe pse. Çka nëse unë jam duke kërkuar për Princeton, e cila u themelua në 1746. Dhe kështu 1746 bëhet çelësi im për të lundruar nëpër Trie. E pra, unë të fillojë në rrënjë. Dhe vendi i parë që unë dua të shkon poshtë 1 rrugën. A mund ta bëjë këtë? Po, unë mund të. A mund të shkoj poshtë në 7 rrugën nga atje? Po, unë mund të. Që ekziston shumë. Por mund të shkoj poshtë në 4 rrugën nga këtu? Kjo është si të pyesësh pyetje, mund Unë vazhdoj poshtë që pak katrore që unë e kam theksuar në të verdhë? Nuk ka asgjë atje. E drejtë. Nuk ka asnjë mënyrë përpara poshtë në rrugën 4. Nëse Princeton ishte në këtë Trie, se 4 do të kishte qenë pastruar për ne tashmë. Dhe kështu në këtë pikë ne kemi arritur në një qorrsokak. Ne nuk mund të shkojmë më tutje. Dhe kështu që ne mund të themi, përfundimisht, nr. Princeton nuk ekziston në këtë Trie. Pra, çfarë do thotë e gjithë kjo? E drejtë. Ka shumë ndodh këtu. Ka pointers të gjithë vendin. Dhe, si ju mund të shihni vetëm nga diagrami, ka shumë të nyjeve që janë lloj i fluturon rreth. Por vini re çdo herë që ne të kërkuar për të kontrolloni nëse diçka ishte në Trie, ne vetëm kishte për të bërë 4 lëvizje. Çdo herë që ne të kërkuar për futur diçka në Trie, ne duhet të bëjmë 4 lëvizje, ndoshta mallocing disa gjëra gjatë rrugës. Por, siç e pamë kur kemi futur Dartmouth në Trie, nganjëherë disa të rrugës tashmë mund të pastruar për ne. Dhe kështu si Trie ynë merr më të mëdha dhe më e madhe, ne kemi bërë pak punë çdo kohë për të futur gjëra të reja sepse ne kemi tashmë ndërtuar një shumë të ndërmjetme Degët gjatë rrugës. Në qoftë se ne vetëm ndonjëherë duhet të shikoni në 4 gjëra, 4 është vetëm një konstante. Ne me të vërtetë jemi lloj i afrohet futje kohë konstante dhe koha lookup konstante. Kompromisit, natyrisht, duke qenë se kjo Trie, si ju ndoshta mund të them, është i madh. Secili prej këtyre nyjeve merr një shumë hapësirë. Por kjo është kompromis. Në qoftë se ne duam me të vërtetë të shpejtë futje, fshirje të vërtetë të shpejtë, dhe lookup të vërtetë të shpejtë, ne duhet të kanë shumë të dhëna fluturon rreth. Ne duhet të vënë mënjanë një shumë hapësirë dhe kujtesës për këtë strukturë e të dhënave të ekzistojnë. Dhe kështu kjo është kompromis. Por kjo duket si ne mund të keni gjetur atë. Ne mund të kemi gjetur se shenjtë Gral e strukturat e të dhënave me futje të shpejtë, fshirje, dhe lookup. Dhe ndoshta kjo do të jetë një strukturë e përshtatshme e të dhënave për t'u përdorur për çfarëdo informata ne jemi duke u përpjekur për të ruajtur. Unë jam Doug Lloyd, kjo është CS50.