Кіріспе
Берілген мәтіннің барлық жұрнақтарын қамтитын ағаш. Компьютер ғылымында жұрнақ ағашы (сонымен қатар PAT ағашы немесе ертерек нұсқасында позиция ағашы деп аталады) – бұл берілген мәтіннің барлық жұрнақтарын кілттер ретінде және мәтіндегі орындарын олардың мәндері ретінде қамтитын сығылған трие (төрттік ағаш) болып табылады. Жұрнақ ағаштары көптеген маңызды жол операцияларын өте жылдам жүзеге асыруға мүмкіндік береді. Мұндай ағашты жол үшін салу, жолдың ұзындығына пропорционал уақыт пен жадты қажет етеді. Салынғаннан кейін, бірнеше операцияларды жылдам орындауға болады, мысалы, жолдың ішіндегі бөлікті табу, белгілі бір мөлшерде қателерге жол берілген жағдайда жолдың ішіндегі бөлікті табу және үлгінің реттегіш өрнегіне сәйкес келетін бөлікті табу. Жұрнақ ағаштары ең ұзын ортақ жол мәселесіне алғашқы сызықтық уақыт шешімдерінің бірі болды. Бұл жылдамдықтар белгілі бір шығынмен келді: жолдың жұрнақ ағашын сақтау, әдетте, жолдың өзінен гөрі едәуір көп жадты қажет етеді.
In computer science, a suffix tree (also called PAT tree or, in an earlier form, position tree) is a compressed trie containing all the suffixes of the given text as their keys and positions in the text as their values. Suffix trees allow particularly fast implementations of many important string operations. The construction of such a tree for the string takes time and space linear in the length of Once constructed, several operations can be performed quickly, such as locating a substring in , locating a substring if a certain number of mistakes are allowed, and locating matches for a regular expression pattern. Suffix trees also provided one of the first linear time solutions for the longest common substring problem. These speedups come at a cost: storing a string's suffix tree typically requires significantly more space than storing the string itself.
Тарих
Бұл ұғым алғаш рет Rather-дың еңбектерінде, емес, жұрнағы орнына, Вайнер өзінің trie-де әр позиция үшін префикс идентификаторын сақтады, яғни, басталатын және тек бір рет кездесетін ең қысқа тізбек. Оның Algorithm D алгоритмі сығылмаған trie-ді алады және оны trie-ге кеңейтеді. Осылайша, тривиалды trie-ден бастап, trie Algorithm D алгоритміне кезекті шақырулар арқылы құрылуы мүмкін; алайда, жалпы орындалу уақыты Weiner алгоритмі B бірнеше қосымша деректер құрылымдарын қолданады, құрастырылған trie өлшеміне пропорционалды жалпы орындалу уақытын қамтамасыз ету үшін. Соңғысы әлі де түйіндерден тұруы мүмкін, мысалы, . Вайнер алгоритмі C соңында сығылған trie-лерді пайдаланып, жалпы сақтау көлемі мен орындалу уақытын сызықтық етуге қол жеткізеді. Дональд Кнут кейіннен өзінің студенті Vaughan Pratt бойынша оны "1973 жылдың алгоритмі" деп сипаттады. Оқулық Вайнердің нәтижелерін қарапайымдатылған және әдемі түрінде қайта жазды, позициялық ағаш терминін енгізді. -дан басталатын суффикс әдетте префикс идентификаторынан ұзын болғанымен, сығылған trie-дегі олардың жол көрсетулері өлшемдері бойынша ерекшеленбейді. Екінші жағынан, McCreight Вайнердің көптеген қосымша деректер құрылымдарынан бас тарта алды; тек суффикс байланыстары қалды. құрылысын одан әрі жеңілдетті. Ол суффикс ағаштарының алғашқы онлайн құрылысын ұсынды, қазір Ukkonen алгоритмі деп белгілі, оның орындалу уақыты сол кездегі ең жылдам алгоритмдерге сәйкес келді. Бұл алгоритмдер тұрақты өлшемді әліпби үшін сызықтық уақытты қамтиды және жалпы жағдайда ең нашар жағдайда орындалу уақыты бар. барлық әліпбилер үшін оңтайлы суффикс ағашын құру алгоритмін берді. Атап айтқанда, бұл полиномиалдық диапазон ішіндегі бүтін сандар әліпбиінен алынған тізбектер үшін бірінші сызықтық уақыт алгоритмі. Farach алгоритмі сыртқы жадта, сығылған, ықшам және т.б. сияқты суффикс ағаштары мен суффикс массивлерін құру үшін жаңа алгоритмдердің негізіне айналды.
for strings drawn from an alphabet of integers in a polynomial range. Farach's algorithm has become the basis for new algorithms for constructing both suffix trees and suffix arrays, for example, in external memory, compressed, succinct, etc.
Параллель құрылыс
Суффикс ағашын құру жылдамдығын арттару үшін әртүрлі параллель алгоритмдер ұсынылған. Жақында, жұмыс (тізбекті уақыт) және аралықпен суффикс ағашын құруға арналған практикалық параллель алгоритм әзірленді. Алгоритм ортақ жадты көп ядролы машиналарда жақсы параллель масштабталуға қол жеткізеді және 40 ядролы машинаны пайдаланып, шамамен 3 ГБ адам геномын 3 минуттан кем уақытта индекстеуге мүмкіндік береді.