[go: up one dir, main page]

SE513248C2 - Metod för hantering av datastrukturer - Google Patents

Metod för hantering av datastrukturer

Info

Publication number
SE513248C2
SE513248C2 SE9704767A SE9704767A SE513248C2 SE 513248 C2 SE513248 C2 SE 513248C2 SE 9704767 A SE9704767 A SE 9704767A SE 9704767 A SE9704767 A SE 9704767A SE 513248 C2 SE513248 C2 SE 513248C2
Authority
SE
Sweden
Prior art keywords
register
symbol
current
pointer
symbols
Prior art date
Application number
SE9704767A
Other languages
English (en)
Other versions
SE9704767D0 (sv
SE9704767L (sv
Inventor
Stefan Bjoernson
Original Assignee
Ericsson Telefon Ab L M
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Ericsson Telefon Ab L M filed Critical Ericsson Telefon Ab L M
Priority to SE9704767A priority Critical patent/SE513248C2/sv
Publication of SE9704767D0 publication Critical patent/SE9704767D0/sv
Priority to PCT/SE1998/002221 priority patent/WO1999032994A2/en
Priority to DE69840875T priority patent/DE69840875D1/de
Priority to AU17932/99A priority patent/AU1793299A/en
Priority to JP2000525830A priority patent/JP2001527240A/ja
Priority to EP98962774A priority patent/EP1040430B1/en
Priority to KR1020007006459A priority patent/KR20010033096A/ko
Priority to US09/215,122 priority patent/US6298339B1/en
Publication of SE9704767L publication Critical patent/SE9704767L/sv
Publication of SE513248C2 publication Critical patent/SE513248C2/sv

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9024Graphs; Linked lists
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99932Access augmentation or optimizing
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99933Query processing, i.e. searching
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99951File or database maintenance
    • Y10S707/99952Coherency, e.g. same view to multiple users

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

15 20 25 30 513t2lš8 uppsättning nummer. En tänkbar tillämpning är t ex nummer, som finns på en svart lista, vilka inte skall kunna nås för samtal utifrån. Detta exempel är ekvivalent med att hitta ett givet ord i ett elektroniskt lexikon. Ett exempel enligt teknikens ståndpunkt på denna implementation använder datastrukturer som är implementerade som register av länkade listor. Registren är vektorer av pekare med ett element för varje värde (t ex en siffra). När ett svartlistat telefonnummer infogas erhålls en länkad lista med register, som slutar i ett register, där elementet för det sista numret innehåller en nollpekare. Sökning genom dessa listor och att hitta en sekvens av nummer som inte hör till något av de infogade numren möjliggör för samtalet att fortsätta. Detta exempel kommer att beskrivas närmare med hänvisning till en ritning nedan.
Denna struktur tillåter detektering av icke giltiga nummer med ett minimum av information; så snart som ett icke existerande element påträffas eller sökningen försöker att fortsätta förbi en noll- pekare kan den avslutas med ett negativt resultat.
Problemet med denna s k enkelregistertypstruktur är att den är mycket utrymmeskrävande för lagring av långa sekvenser. I det allmänna fallet kommer endast de initiala registren att innehålla mer än ett aktuellt element. Därför kommer det att finnas stora mängder outnyttjat utrymme för de efterföljande symbolerna.
Ett annat dokument enligt teknikens ståndpunkt har publicerats av Sussenguth: "Use of Tree Structures for Processing Files", Comm of the ACM, Vol. 6, No. användning av trädstrukturer för att behandla filer. I första hand 5, maj 1963. Här beskriver Sussenguth beskriver Sussenguth en tillämpning vid sökning och uppdatering av stora filer med nyckelvärden av varierande längd och initiala sammanträffanden. En särskild tillämpning av detta är lagring av Detta lexikondata, t ex för stavningskontroller och översättare.
W U 20 25 30 513 243 3 dokument enligt teknikens ståndpunkt kommer också att beskrivas närmare nedan och med hänvisning till en figur.
I den internationella IBM ansökan ÉCT/EP94/02135 föreslås en utformning, där problemet med att hitta en bästa matchning för nycklar med olika längd, t ex IP-adresser i ett routersystem angrips. Lösningen för optimeringsprinciperna och sökförfarandena är emellertid andra än de som beskrivs i föreliggande ansökning.
REDOGÖRELSE FÖR UPPFINNINGEN I litteraturen inom mjukvarutekniken beskrivs trie "reTRIBve") (för lagrings/sökförfarandet som ett vanligt sätt att hantera "lexikon"-data, som skall genomsökas för att ta reda på om ett givet ord finns eller inte. Utrymmeskraven för trie uppmärksammas också och olika förfaranden för att begränsa dessa krav föreslås. Det verkar emellertid saknas förfaranden som på ett enkelt sätt sparar utrymme och samtidigt bibehåller sök- hastigheten.
Kärnan i föreliggande uppfinningen är sättet pà vilket förfaranden enligt teknikens ståndpunkt kombineras tillsammans med nya funktioner för att bilda en lösning i vilken en datastruktur med en dubbel uppsättning register används. Detta är för att spara minnesutrymme och samtidigt ha kvar en mycket hög prestanda för operationer i tillämpningar, där man måste lagra och söka genom långa registeruppsättningar, som innehåller symboler, såsom siffror eller bokstäver.
Lösningen innefattar en datastruktur och ett förfarande för att i en datastruktur lagra, radera och hitta ord eller nummer där den N U 20 25 30 513 2428 dubbla uppsättningen av registerorgan betyder att en första uppsättning är en länkad lista av register såsom visas i teknikens ståndpunkt, men där det också finns en andra lista med strängar som innehåller de fullständiga numren. Exempel kommer att ges där lösningens fördelar tydligt kommer att framgå och där telefon- nummer används. Uppfinningen skall emellertid inte ses som begränsad endast till denna tillämpning. Andra sekvenser och symboler än nummer (t ex bokstäver) kan användas. Idén kan också användas när en snabb och effektiv hantering av symboler behövs (t ex för att söka genom elektroniska lexikon) och när maximal tid/utrymmesprestanda är viktig. Behovet av hantering av sådana datastrukturer är uppenbart dà lagring/sökning av deluppsättningar av flera tusen nummer görs i olika telekommunikationscenter och ett snabbt och utrymmeseffektivt sätt att utföra detta är viktigt för systemets prestanda.
Uppfinningens särdrag som tros vara nya framställs särskilt i de bilagda patentkraven. Själva uppfinningen kommer bäst att förstås, både i uppbyggnad och sätt att utföra samt ytterligare syften och fördelar med denna med hänvisning till den bilagda beskrivningen tagen i samband med de bilagda ritningarna.
KORTFATTAD BESKRIVNING AV RITNINGARNA Utföringsformer av uppfinningen kommer nu att beskrivas i samband med ritningarna, på vilka: - fig. 1 visar en registerlayout för att lagra siffror i en datastruktur i enlighet med teknikens ståndpunkt, - fig. 2 visar en annan registerlayout för att lagra siffror i en datastruktur i enlighet med teknikens ståndpunkt, - fig. 3 visar en förenklad registerlayout för att lagra siffror i en datastruktur i enlighet med teknikens ståndpunkt, W U 20 25 30 5.13 2i48 5 - fig. 4 - 8 visar registerlayouter vid efterföljande insättningar av tal i datastrukturen enligt uppfinningen, - fig. 9 visar ett flödesschema för insättningsproceduren enligt uppfinningen, - fig. 10 - ll visar en registerlayout för att lagra ett nummer i en datastruktur i enlighet med uppfinningen, - fig. 12 visar en tillståndsmatristabell för lagring av ett nummer i en datastruktur enligt uppfinningen, - fig. 13 visar ett flödesschema för raderingsproceduren enligt uppfinningen, - fig. 14 visar ett flödesschema för hitta/sökproceduren enligt uppfinningen och - fig. 15 visar ett diagram som visar lagringskrav för enkel respektive dubbel registertyputformning.
BESKRIVNING AV FÖREDRAGNA UTFÖRINGSFORMER Pig. 1 visar ett exempel från besläktad känd teknik, där ett förfarande beskrivs för att demonstrera hur ett svartlistat telefonnummer insätts i länkade listor av register i en enda registertypstruktur för att snabbt ta reda på om en uppringande abonnent finns på svarta listan eller inte. Ett nummer antas här inmatat siffra för siffra. Sà fort ett nummer som inte hör till nàgot av de fördefinierade numren genereras, avbryts sökningen och samtalet tillåts att fortsätta. Dessa problemområden betecknas såsom nämnts "trie search" (ursprumgligen från reTRIEve) och besläktade datastrukturer implemenfieras som länkade register- listor. Registren är vektorer med Éekare med ett element för varje värde (alfabetisk symbol i det allfiänna fallet, siffrorna O-9 i detta fall). För alla giltiga sekvenser finns en länkad register- lista som slutar i ett register där elementet för den sista 10 15 20 25 30 515 243 6 giltiga symbolen innehåller en nollpekare. Sålunda visar fig. 1 321 och 3245 skulle representeras. En position som finns i ett register betecknas med ett exempel på hur sekvenserna 123, en "x"-markering och nollpekaren betecknas med en " "-symbol.
Fig. 2 visar ett annat dokument enligt teknikens ståndpunkt, nämligen Sussenguths förfarande som beskrivs ovan. I figuren ser vi hur fem telefonnummer med nio siffror skulle kunna lagras 321456789, 334567890, Varje register i strukturen enligt enligt Sussenguth. Numren är 123456789, 351567890 och 354567890.
Sussenguths förslag består av ett nyckelvärde (t ex en siffra) och två pekarvärden. Den första pekaren pekar på ett annat register på samma nivå, dvs registret som innehåller ett nyckelvärde för samma sifferposition. Den andra pekaren pekar mot "filialuppsättningen" för alla nummer med samma initiala sekvens, åtminstone fram till det aktuella djupet (antalet siffror). Sålunda betecknar de små rutorna register som endast pekar ut en filialuppsättning. För dessa efterföljande register finns det inga pekare till register som betecknar samma sifferposition (mittelementet i registret).
Sussenguths lösning påminner om enkelregistertyp trie som beskrivs ovan, men skillnaden mellan de två förfarandena är att i Sussenguths förslag är sifferpositionerna vid några särskilda nivåer länkade med pekare i stället för att betecknas som element i en vektor.
I fig. 3 ser vi hur många strängar vi skulle behöva för samma exempel som ovan om vi här använder lagring i enkelregistertyp- strukturen, som föreslås enligt teknikens ståndpunkt. De små rutorna betecknar pekarregister, där endast ett element används.
Denna struktur kräver 814 bytes med data, jämfört med 126 bytes med data enligt uppfinningen. Beräkningarna kommer att beskrivas närmare nedan. 10 15 20 25 30 5137248 Uppfinningen föreslår à andra sidan en lösning där datastrukturen i fig. l ersätts av en dubbel uppsättning register. Den första uppsättningen är en länkad lista med register som tidigare, men det finns en andra lista med strängar som innehåller hela numren.
De länkade registren används endast så länge det finns tvâ eller fler element markerade som aktuella. Slutregisterelementet kommer att peka pà motsvarande sträng.
Fig. 4 - 8 kommer att visa hur insättningsprincipen fungerar för 321456789, 334567890, 351567890 och 354567890 siffra för siffra. I detta fall kommer symbolen " " att indikera att pekafen pekar på en annan sträng och samma sekvenser som ovan, dvs l23456789, inte på ett annat register. Figurerna 4 - 8 visar register- layouterna vid efterföljande insättningar av dessa nummer.
Vektorregistret med pekare betecknas som "typ A", medan registret med strängar som innehåller nummer betecknas som "typ B". Det första registret av typ A finns initialt, även om det inte finns några nummer definierade i listan. Alla poster i detta register är initierade som nollpekare. Insättningsproceduren för nya nummer kommer nu att beskrivas stegvis. Fig. 4 - 8 kommer också att visa resultatet av den stegvisa proceduren.
Det bör observeras att även om exemplen nedan hänför sig till hantering av telefonnummer, skulle data likaväl kunna utgöra en annan sekvens av symboler: Insättning av nya nummer 10 15 20 25 30 513 2848 1. Välj ett aktuellt register, som antingen är det första registret, eller ett register som pekas pà av den aktuella pekaren som initialt pekar pà det första A-registret. Öka djupräknaren, som är initialt satt till noll, med ett. 2. Välj nästa siffra i numret som skall sättas in. Initialt är denna lika med den första siffran. Denna kommer att kallas "aktuell siffra" i det följande. 3. Finn den aktuella pekaren vid motsvarande position i registret genom att använda värdet pá den aktuella siffran som index i det aktuella registret. Om denna pekare pekar på ett annat register av typ A, gå tillbaka till steg l, i annat fall fortsätt. 4. Om den aktuella pekaren är noll, skapa ett register av typ B och lagra hela numret i detta. Uppdatera den aktuella pekaren till att peka pà det nya B-registret. Detta avslutar insättnings- proceduren. I annat fall fortsätt. 5. Kontrollera om det aktuella B-registret innehåller samma nummervärde som numret som skall sättas in. I sådana fall avslutas insättningsproceduren med ett fel "numret finns". I annat fall fortsätt. 6. Skapa och länka i ett nytt A-register vilket också medför omdefiniering av tidigare pekare. Öka djupräknaren med ett. Sätt nästa siffra i numret som skall sättas in till aktuell siffra. 7. Välj i det aktuella B-registret siffran som svarar mot djup- räknaren. Jämför denna siffra med den aktuella siffran i numret 10 15 20 25 513 248: 9 som skall sättas in. Om dessa siffror är lika gå till steg 6, i annat fall fortsätt. 8. Skapa ett nytt B-register, insätt hela det nya numret i detta och insätt en pekare till B-registret vid en indexposition i det tidigare A-registret som svarar mot den aktuella siffran. Detta avslutar insättningsproceduren.
Genom att titta på fig. 4 - 8, ser vi resultatet av insättningen av numren 123456789, 321456789, 33456789, 35167890 och 354567890 i enlighet med den stegvisa proceduren ovan. l Fig. 4 visar insättning av det första numret. Det initiala A- registret och en B-registeringàng har definierats.
Fig. 5 visar insättning av det andra numret. En ny B-register- ingång har definierats.
Fig. 6 visar insättning av det tredje numret. Ett nytt A-register har skapats och en ny B-registeringàng definieras och den tidigare pekaren till det andra insatta numret har omdefinierats.
Fig. 7 visar insättning av det fjärde numret. En ny B-register- ingång har definierats.
Fig. 8 visar insättning av det femte och sista numret i detta exempel. Ytterligare ett nytt A-register behövs här. Här ser vi också hur den tidigare pekaren (tiil det fjärde numret) har omdefinierats. 10 15 20 25 30 513 248 10 Modus operandi för insättningsproceduren i enlighet med uppfinningen kan enkelt visas i ett flödesschema som visas i fig. 9.
Ur tabellen i fig. 12 med de bilagda figurerna 10 - ll visas ytterligare ett klargörande av förfarandet. Här visar vi en beskrivning i tillstàndsmatrisform av insättning av det femte och (354567890) och 11 (efter) visas här med hänvisningsbeteckningar. sista numret i exemplet som gavs ovan. Fig. 10 (före) Denna insättningsprocedur är nu utrymmeseffektiv och bibehåller samtidigt sökhastigheten. En utvidgning av idén kan implementeras inom uppfinningens omfång för att skapa ett enda allmänt uppfinningskoncept. Genom att använda insättningsförfarandet som beskrivs ovan blir ett förfarande för radering av nummer och ett förfarande för att hitta nummer i registren en naturlig utvidgning av idén. En stegvis förklaring raderings- och hitta/sökproceduren tillsammans med fig. 11 och 12 som visar de relevanta flödes- schemana kommer att belysa förfarandena.
Radering av ett existerande nummer 1. Välj ett aktuellt register, som antingen är det första registret, eller ett register som pekas ut av den aktuella pekaren. Öka djupräknaren, som initialt är satt till noll med ett. 2. Välj nästa siffra i numret som skall raderas. Initialt är denna satt lika med den första siffran. Denna kommer att kallas "aktuell siffra" i den följande beskrivningen. 10 15 20 25 513 248 11 3. Finn en ny aktuell pekare vid motsvarande läge i registret genom att använda värdet pà den aktuella siffran som index i det aktuella registret. Lagra värdet av den aktuella pekaren i en temporär vektor vid ett indexvärde som svarar mot djupräknaren. Om denna pekare pekar pà ett annat register av typ A gå tillbaka till steg 1, i annat fall fortsätt. 4. Om den aktuella pekaren innehåller ett nollvärde avslutas raderingsproceduren med ett fel "ej hittat". 5. Annars, om den aktuella pekaren pekar pà ett register av typ B, kontrollera om numret som finns i detta B-register är samma som det som skall raderas. I så fall radera detta register, annars avsluta med ett fel "ej hittat". 6. Sätt den aktuella B-pekaren i A-registret till noll. 7. Om det finns fler än en B-pekare eller någon A-pekare i det aktuella A-registret avslutas raderingsproceduren. 8. Annars, om det endast finns en Bepekare kvar i det aktuella A- registret, raderas detta A-register, B-pekaren flyttas till det tidigare A-registret och gör detta till aktuella registret och ersätter A-pekaren till det raderade registret med B-pekaren. Gå tillbaka till steg 7.
Hitta ett nummer N Ü 20 25 30 513. 248 12 1. Välj ett aktuellt register, som antingen är det första registret, eller ett register som utpekas av den aktuella pekaren. Öka djupräknaren, som initialt är satt till noll med ett.
Initialt är denna "aktuell 2. Välj nästa siffra i numret som skall hittas. lika med den första siffran. Denna kommer att kallas siffra" i den följande beskrivningen. 3. Hitta en ny aktuell pekare vid motsvarande position i registret genom att använda värdet på den aktuella siffran som index i det aktuella registret. Om denna pekare pekar pà ett annat register av typ A, gå tillbaka till steg 1, i annat fall fortsätt. 4. Om den aktuella pekaren innehåller ett nollvärde, avslutas sökproceduren med "ej hittat". 5. Annars, om den aktuella pekaren pekar på ett register av typ B, hämta detta register som ett möjligt nummer. 6. Scanna det möjliga numret siffra för siffra och jämför med motsvarande siffror i numret som skall hittas. Om siffrorna inte matchar vid motsvarande positioner eller om numren har olika längd, avsluta med "ej hittat". Om alla siffror i båda numren som jämförs är lika, avsluta sökningen med "hittat".
Utrymmeskraven för insättningsexemplet ovan med fem nummer med nio' siffror var jämför sig med teknikens ståndpunkt som följer: fallet med den enkla registertypen i fig. 1 skulle kräva 37 register, eller 814 bytes såsom ses i fig. 3 där de mindre rutorna motsvarar pekarregister där endast ett element används, varvid det antas att varje pekare är 2 bytes, vilket gör totalt 20 bytes för pekare och 10 15 20 25 30 5130248 13 att det finns 2 extra bytes för flaggor (finns/finns inte) per register, dvs 22 bytes per register.
Sussenguthförfarandet sàsom visas i fig. 2 skulle för samma exempel medföra ett behov av 4lx5 = 205 bytes lagringsutrymme, om det antas att varje register är 2x2 bytes för pekare och 1 byte för nyckeln (siffran).
Fallet med ett register av dubbeltyp i enlighet med uppfinningen skulle kräva tre pekarvektorregister och fem strängregister (fig. 8). Med antagandet att varje strängregister är dimensionerat att innehålla 24 siffror (= 12 bytes) skulle detta ge en total på 3x22 + 5x12 = fallet med enkelregister. 126 bytes, dvs omkring 15% av utrymmet som krävs för Sussenguthförfarandet är sämre än dubbelregisterförfarandet, men bättre än enkelvektorregistret som beskrivs ovan. Sökning med Sussenguthförfarandet skulle vara långsammare än med enkelvektor eller dubbelvektorförfarandet. Orsaken till att sökningen blir långsammare är att i genomsnitt måste fem pekare följas för var och en av de initiala nivåerna för att hitta en matchning/icke matchning. Datorlogiken är också mindre effektiv vid adressering av pekare än av vektorindex.
I syfte att jämföra de två förfarandena för en större uppsättning nummer med varierande längd har en matematisk simulering gjorts.
En serie pà mer än 1000 slumpnummer med slumpmässig längd, i området 2 till 24 siffror alstradesfl Fördelningen var sàdan att huvuddelen av numren hade omkring 12 siffror. Utfallet är att för 1000 nummer skulle enkelregistermodellen kräva omkring 200 k bytes, medan dubbelregistermodellen endast skulle kräva omkring 27 k bytes eller 13%. Detta visar att signifikanta mängder minne kan 10 513 248 14 sparas, vilket är viktigt då ett stort antal programmoduler tävlar om tillgång till dataminnesutrymme i t ex en telefonväxel.
Fig. 15 visar hur de två utföringsformerna är i förhållande till varandra för ett varierande antal element. Diagrammet visar utfallet för den ovan nämnda matematiska simuleringen för en specifik nummerfördelning. Analysen har gjorts på grund av slump- tal som sorteras i fallande ordning som strängar (dvs "23" har en högre sorteringsordning än "2299999").
Ansökningens idé kan användas i andra söktillämpningar där innyckelvärdet ges ett element åt gången. Detta kan tillämpas på t ex routeranalys och hemregisterplatssökningar.

Claims (4)

1. 0 15 20 25 5 13 2 8 IS PATENmmAv l. Förfarande för att hantera sekvenser av symboler i en data- struktur innefattande länkade listor av register, kännetecknat av att symbolsekvenserna insätts symbol för symbol i en dubbel uppsättning register: - en första uppsättning länkade registerlistor (A-register), som är vektorregister med pekare med ett element för varje symbol (t ex 0-9) - en andra uppsättning strängar (B-register), som innehåller hela sekvensen av inmatade symboler, varvid i ett initialskede alla element i nämnda A-register initieras som nollpekare och varvid en påföljande insättning av en sekvens av symboler innefattar stegen att: - (I) välja ett aktuellt register, som antingen är det första registret eller ett register som utpekas av den aktuella pekaren, som initialt pekar på det första A-registret och öka en djupräknare som initialt är satt till noll med ett, - (II) välja nästa symbol i sekvensen av symboler att sättas in vilken initialt kommer att vara den "första" symbolen och senare den "aktuella" symbolen, - (III) finna den aktuella pekaren vid motsvarande position i registret genom att använda värdet för den aktuella symbolen som index i det aktuella registret och om denna pekare pekar på ett annat A-register gå tillbaka till steg (I), - (IV) om den aktuella pekaren är noll, skapa ett B~register och lagra hela sekvensen med symboler i detta och uppdatera den aktuella pekaren till att peka pà det nya B-registret, vilket avslutar insättningsproceduren, och i annat fall fortsätta, 10 15 20 25 513 248 fe - (V) symbolsekvens som symbolsekvensen som skall sättas in och om kontrollera om det aktuella B-registret innehåller samma detta är fallet avsluta insättningsproceduren, och i annat fall fortsätta, - (VI) djupräknaren med ett och sätta nästa symbol i symbolsekvensen som skall sättas in till "aktuell" symbol. skapa och länka i ett nytt A-register och öka - (VII) Välja symbolen som svarar mot djupräknaren i det aktuella B-registret och jämföra denna symbol med den aktuella symbolen i symbolsekvensen som skall insättas och om dessa symboler är lika gå till steg (VI), och i annat fall fortsätta, - (VIII) symbolsekvensen i detta och sätta in en pekare till B-registret skapa ett nytt B-register, sätta in hela den nya vid en indexposition i det föregående A~registret som svarar mot den aktuella symbolen.
2. Förfarande för att hantera sekvenser av symboler i en data- struktur innefattande länkade listor av register, kännetecknat av att symbolsekvenserna insätts symbol för symbol i en dubbel uppsättning register: - en första uppsättning länkade registerlistor (A-register), som är vektorregister med pekare med ett element för varje symbol (t ex O-9) - en andra uppsättning strängar (B-register), som innehåller hela sekvensen av inmatade symboler, varvid en radering av en symbolsekvens ur nämnda register in- nefattar stegen att: - (I) välja ett aktuellt register, som antingen är det första registret eller ett register som pekas ut av den aktuella lO 15 20 25 30 513,24? /? pekaren och öka en djupräknare, med ett. som initialt är satt till noll, - (II) välja nästa symbol i symbolsekvensen att raderas som initialt är den "första" symbolen och senare den "aktuella" symbolen. - (III) registret genom att använda värdet på den aktuella symbolen som finna en ny aktuell pekare vid motsvarande position i index i det aktuella registret, lagra värdet för den aktuella pekaren i en temporär matris med ett indexvärde som svarar mot djupräknaren och om denna pekare pekar på ett annat A-register ga tillbaka till steg (I), och i annat fall fortsatta. - (IV) kontrollera om den aktuella pekaren innehåller ett noll- värde, och om så är fallet avsluta raderingsproceduren. - (V) annars, om den aktuella pekaren pekar på ett B-register, kontrollera om symbolsekvensen som finns i detta B-register är samma som skall raderas, radera och om detta är fallet, registret, och i annat fall avsluta raderingsproceduren. - (VI) Sätta den aktuella B-pekaren i A-registret till noll. - (VII) om det finns fler än en B-pekare eller någon A-pekare i det aktuella A-registret avslutas raderingsproceduren. - (VIII) annars, om det endast finns en B-pekare kvar i det aktuella A~registret, radera A-registret, flytta B-pekaren till det tidigare A-registret, varvid denna görs till aktuellt register och ersätter A-pekaren till det raderade registret med B-pekaren och gå tillbaka till steg 7.
3. Förfarande för att hantera sekvenser av symboler i en data- struktur innefattande länkade listor av register, kännetecknat av att symbolsekvenserna insätts symbol för symbol i en dubbel uppsättning register: 10 15 20 25 30 513248 IK - en första uppsättning länkade registerlistor (A-register), som är vektorregister med pekare med ett element för varje symbol (t ex O-9) - en andra uppsättning strängar (B-register), som innehåller hela sekvensen av inmatade symboler, varvid en sökning av en viss sekvens av symboler i nämnda register innefattar stegen att: ~ (I) registret eller ett register som pekas ut av den aktuella välja ett aktuellt register, som antingen är det första pekaren och öka djupräknaren, som initialt är satt till noll, med ett. - (II) välja nästa symbol i symbolsekvensen som skall hittas, vilken initialt är den första symbolen och senare den "aktuella" symbolen. - (III) registret genom att använda värdet på den aktuella symbolen som finna en ny aktuell pekare vid motsvarande position i index i det aktuella registret och om denna pekare pekar pà ett annat A-register gà tillbaka till steg (I), och i annat fall fortsätta. - (IV) kontrollera om den aktuella pekaren innehåller ett noll- värde, och om detta är fallet avsluta sökproceduren med "ej hittad". - (V) typ B, hämta detta register som en möjlig symbolsekvens. annars om den aktuella pekaren pekar på ett register av _ (VI) det med motsvarande symboler i symbolsekvensen som skall hittas scanna det möjliga numret symbol för symbol och jämföra och om symbolerna inte matchar varandra i motsvarande positioner eller om symbolsekvenserna har olika längd avslutas sökningen med "ej hittad" och om alla symbolerna i båda symbolsekvenserna har jämförts och befunnits lika, avsluta sökningen med "hittad". 513 248 M
4. Förfarande för att hantera sekvenser av symboler i en data- struktur enligt något av kraven 1 - 3, kännetecknat av att symbolerna avser siffror och symbolsekvenserna avser telefon- Iïllmmer .
SE9704767A 1997-12-19 1997-12-19 Metod för hantering av datastrukturer SE513248C2 (sv)

Priority Applications (8)

Application Number Priority Date Filing Date Title
SE9704767A SE513248C2 (sv) 1997-12-19 1997-12-19 Metod för hantering av datastrukturer
PCT/SE1998/002221 WO1999032994A2 (en) 1997-12-19 1998-12-04 Management in data structures
DE69840875T DE69840875D1 (de) 1997-12-19 1998-12-04 Verwaltung von datenstrukturen
AU17932/99A AU1793299A (en) 1997-12-19 1998-12-04 Management in data structures
JP2000525830A JP2001527240A (ja) 1997-12-19 1998-12-04 データ構造内の管理
EP98962774A EP1040430B1 (en) 1997-12-19 1998-12-04 Management in data structures
KR1020007006459A KR20010033096A (ko) 1997-12-19 1998-12-04 데이터 구조의 관리
US09/215,122 US6298339B1 (en) 1997-12-19 1998-12-18 Management in data structures

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
SE9704767A SE513248C2 (sv) 1997-12-19 1997-12-19 Metod för hantering av datastrukturer

Publications (3)

Publication Number Publication Date
SE9704767D0 SE9704767D0 (sv) 1997-12-19
SE9704767L SE9704767L (sv) 1999-06-20
SE513248C2 true SE513248C2 (sv) 2000-08-07

Family

ID=20409473

Family Applications (1)

Application Number Title Priority Date Filing Date
SE9704767A SE513248C2 (sv) 1997-12-19 1997-12-19 Metod för hantering av datastrukturer

Country Status (8)

Country Link
US (1) US6298339B1 (sv)
EP (1) EP1040430B1 (sv)
JP (1) JP2001527240A (sv)
KR (1) KR20010033096A (sv)
AU (1) AU1793299A (sv)
DE (1) DE69840875D1 (sv)
SE (1) SE513248C2 (sv)
WO (1) WO1999032994A2 (sv)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7249149B1 (en) 1999-08-10 2007-07-24 Washington University Tree bitmap data structures and their use in performing lookup operations
US6560610B1 (en) 1999-08-10 2003-05-06 Washington University Data structure using a tree bitmap and method for rapid classification of data in a database
US6725326B1 (en) 2000-08-15 2004-04-20 Cisco Technology, Inc. Techniques for efficient memory management for longest prefix match problems
US6775737B1 (en) 2001-10-09 2004-08-10 Cisco Technology, Inc. Method and apparatus for allocating and using range identifiers as input values to content-addressable memories
US6754795B2 (en) 2001-12-21 2004-06-22 Agere Systems Inc. Methods and apparatus for forming linked list queue using chunk-based structure
US6970971B1 (en) 2002-01-08 2005-11-29 Cisco Technology, Inc. Method and apparatus for mapping prefixes and values of a hierarchical space to other representations
US7899067B2 (en) 2002-05-31 2011-03-01 Cisco Technology, Inc. Method and apparatus for generating and using enhanced tree bitmap data structures in determining a longest prefix match
US7299317B1 (en) 2002-06-08 2007-11-20 Cisco Technology, Inc. Assigning prefixes to associative memory classes based on a value of a last bit of each prefix and their use including but not limited to locating a prefix and for maintaining a Patricia tree data structure
US7558775B1 (en) 2002-06-08 2009-07-07 Cisco Technology, Inc. Methods and apparatus for maintaining sets of ranges typically using an associative memory and for using these ranges to identify a matching range based on a query point or query range and to maintain sorted elements for use such as in providing priority queue operations
US7441074B1 (en) 2002-08-10 2008-10-21 Cisco Technology, Inc. Methods and apparatus for distributing entries among lookup units and selectively enabling less than all of the lookup units when performing a lookup operation
US7415463B2 (en) * 2003-05-13 2008-08-19 Cisco Technology, Inc. Programming tree data structures and handling collisions while performing lookup operations
US7415472B2 (en) * 2003-05-13 2008-08-19 Cisco Technology, Inc. Comparison tree data structures of particular use in performing lookup operations
US7478109B1 (en) 2004-03-15 2009-01-13 Cisco Technology, Inc. Identification of a longest matching prefix based on a search of intervals corresponding to the prefixes

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4468728A (en) * 1981-06-25 1984-08-28 At&T Bell Laboratories Data structure and search method for a data base management system
US4611272A (en) * 1983-02-03 1986-09-09 International Business Machines Corporation Key-accessed file organization
US5497485A (en) * 1993-05-21 1996-03-05 Amalgamated Software Of North America, Inc. Method and apparatus for implementing Q-trees
US5560007A (en) * 1993-06-30 1996-09-24 Borland International, Inc. B-tree key-range bit map index optimization of database queries
SE503376C2 (sv) * 1994-06-13 1996-06-03 Ericsson Telefon Ab L M Kundprofilerad telekommunikationstjänst
WO1996000945A1 (en) * 1994-06-30 1996-01-11 International Business Machines Corp. Variable length data sequence matching method and apparatus
JP3152871B2 (ja) 1995-11-10 2001-04-03 富士通株式会社 ラティスをキーとした検索を行う辞書検索装置および方法
US5758353A (en) * 1995-12-01 1998-05-26 Sand Technology Systems International, Inc. Storage and retrieval of ordered sets of keys in a compact 0-complete tree
US6065046A (en) * 1997-07-29 2000-05-16 Catharon Productions, Inc. Computerized system and associated method of optimally controlled storage and transfer of computer programs on a computer network
US6141655A (en) * 1997-09-23 2000-10-31 At&T Corp Method and apparatus for optimizing and structuring data by designing a cube forest data structure for hierarchically split cube forest template

Also Published As

Publication number Publication date
JP2001527240A (ja) 2001-12-25
WO1999032994A3 (en) 1999-08-26
SE9704767D0 (sv) 1997-12-19
DE69840875D1 (de) 2009-07-16
WO1999032994A2 (en) 1999-07-01
SE9704767L (sv) 1999-06-20
EP1040430B1 (en) 2009-06-03
AU1793299A (en) 1999-07-12
EP1040430A2 (en) 2000-10-04
US6298339B1 (en) 2001-10-02
KR20010033096A (ko) 2001-04-25

Similar Documents

Publication Publication Date Title
EP0419889A2 (en) Prefix search tree with partial key branching
US10055439B2 (en) Fast, scalable dictionary construction and maintenance
Aoe An efficient digital search algorithm by using a double-array structure
Itoh et al. An efficient method for in memory construction of suffix arrays
Morrison PATRICIA—practical algorithm to retrieve information coded in alphanumeric
Ferragina et al. The string B-tree: A new data structure for string search in external memory and its applications
US6691123B1 (en) Method for structuring and searching information
US6470347B1 (en) Method, system, program, and data structure for a dense array storing character strings
JP3771271B2 (ja) コンパクト0完全木における順序付けられたキーの集まりの記憶と検索のための装置及び方法
SE513248C2 (sv) Metod för hantering av datastrukturer
CN102867049B (zh) 一种基于单词查找树实现的汉语拼音快速分词方法
CN105335481B (zh) 一种大规模字符串文本的后缀索引构造方法及装置
Andersson et al. Suffix trees on words
US6976025B2 (en) Database and method for storing a searchable set of keywords
Giancarlo The suffix of a square matrix, with applications
Dinklage et al. Engineering predecessor data structures for dynamic integer sets
Sahni Tries
Aoe A fast digital search algorithm using a double‐array structure
Ehrenfeucht et al. String searching
Giancarlo et al. Parallel construction and query of suffix trees for two-dimensional matrices
JP2001117929A (ja) データ検索方法、データ整列方法およびデータ検索装置
JPH1115836A (ja) 文字列探索用テーブル、その作成方法及び文字列探索方法
Morimoto et al. A dictionary retrieval algorithm using two trie structures
Ivanova A survey of mathematical and informational foundations of the BigArM access method
Narahari Data structures and algorithms

Legal Events

Date Code Title Description
NUG Patent has lapsed