Cet article parle de certains des algorithmes trouvés couramment utilisés dans les structures de données. La structure de données de ligne théorique est presque proche de la fin et elle partagera des concepts plus spéciaux, tels que KMP, Haofmanum, V.V. Future Brush Stade. Brossage Le titre utilisera Python, veuillez continuer à faire attention.
1. Recherchez la feuille de séquence
Les recherches séquentielles sont également appelées recherches linéaires, comme la recherche la plus élémentaire La technologie, son processus principal est la suivante: à partir du premier ou dernier enregistrement de la table, la comparaison des mots-clés des enregistrements et si des mots-clés sont trouvés égaux ou non si un mot-clé dans un journal est à la recherche de mots-clés est égal, la recherche aboutit à la recherche de enregistrements; Si c'est jusqu'à ce que le dernier enregistrement, ses mots-clés ne sont pas égaux aux mots-clés trouvés, puis ont échoué.
Le code déployé spécifiquement comme suit:
Version de base TRL'algorithme de recherche est comparable à la position I et à la longueur de réseau N de l'enregistrement suivant après parcourir un enregistrement. On constate qu'il dépasse la portée des tableaux et la version améliorée de l'algorithme de recherche a déplacé cette étape, le processus de mise en œuvre spécifique: Soit [0] = verrouiller, i = n pour laisser des mots-clés [0] pour trouver des mots-clés Et de la matrice tardive se déroule, déploier le code suivant:
int Sequential_Search(int *a,int n,int key) //a为数组,n为要查找数组长度,key为待查找关键词{ int i; for(i = 1;i <= n;i++) //遍历数组内的每一条记录,元素记录是从1开始 { if(a[i] == key) //如果查找到,则返回记录所在位置 return i; } return 0; //如果未查找到,则返回0}
2. Recherchez le tableau commandé
int Sequential_Search(int *a,int n,int key) //a为数组,n为要查找数组长度,key为待查找关键词{ int i; a[0] = key; i = n; while(a[i] != key) { i--; } return i; //如果未查找到,则返回0}
]
int Binary_Search(int *a,int n,int key){ int low,high,mid; low = 1;//定义最开始位置 high = n;//定义结束位置 while(low <= high) { mid = (low + high)/2; //先折半 if(key < a[mid]) //如果查找值比中值小,结束位置变为中值-1 high = mid - 1; else if(key > a[mid]) //如果查找值比中值大,起始位置变为中值+1 low = mid + 1; else return mid; //如果相等,则说明mid就是待查找位置 } return 0;}
Regardant la commande signifie des enregistrements linéaires dans le tableau trié (de grand à petit ou petit à grand) et stocké linéairement dans l'ordre.
Réduit de 40,1%
pour répondre à la structure de la commande, nous utilisons la première méthode pour trouver le répertoire, appelant également deux points .. L'idée de base du pliage est: dans la table peut commander, prenez d'abord l'enregistrement intermédiaire en tant qu'objet de comparaison, si la valeur donnée par le mot-clé de l'enregistrement intermédiaire, aprèsÓ Trouve le succès; Si la valeur est inférieure au profil intermédiaire, le milieu de la moitié gauche de l'enregistrement continue de trouver; Si la valeur donnée est conforme au mot-clé de l'enregistrement intermédiaire, continuez de trouver au milieu de l'enregistrement moyen. Répétez continuellement le processus ci-dessus jusqu'à réussi, ou à toutes les détection sans enregistrements, trouvez une défaillance. Code de déploiement:
2.2 Interactions
Pliage très pratique à comprendre, mais parfois, cela augmentera le nombre de résultats inutiles. Par exemple, vous devez trouver 10 de 0-10000. Si vous recherchez cinquième, il y aura beaucoup de recherches inutiles. Donc, il n'ya aucun moyen d'éviter ce problème, c'est-à-dire commencer à la chercher à proximité de la valeur à la recherche, mais pas de besoin. NON à partir de la position intermédiaire. Les recherches interstactes sont utilisées pour résoudre ce problème.
doit tourner 1/2 en un demi-pli plié (clé-a [bas]) / (A [HIGH] -A [LOW]), il peut rapidement être verrouillé à Commencez à chercher la valeur de la recherche, appelée TRA CInterpolation.
2.3 FIBOOP SEPAMALLY
Qu'est-ce que le FIBO avant FIBO, voyez ce que le mémorial de Fibo est.
L'étape spécifique de Soucoa trouve l'algorithme suivant:
Créez une variété d'utilisation de Fiboac pour une utilisation facile. Un nom de tableau est F, tel que f [1] = 1, f [2] = 1, f [3] = 2, f [4] = 3, f [5] = 5, F [6] = 8, f [7] = 13, f [8] = 21 ...
Comparaison de la longueur de N sous F [K] -1, où k est la valeur minimale de la condition, si elle est égale, entrez la prochaine étape,s'il n'est pas égal à la longueur de la matrice trouvée mDe façon générale F [k] -1.
Trouver l'élément entre + bas (F [k-1] -1), de façon continue pour comparer deux points jusqu'à ce qu'il soit trouvé.
N est le mot - clé de liaison avec l'enregistrement correspondant, un indice constitué d'un index, chaque index doit contenir au moins les mots clés et il a un goût La position correspondante est enregistrée dans la mémoire.
Les index peuvent être divisés en: indice linéaire, l'indice d'arbre et de l'index à plusieurs niveaux. Les indicateurs courants principalement linéaires. Le soi-disant indice linéaire est une organisation d'une entréeStructure linéaire, également appelée table d'index. Points principaux Pour introduire trois index linéaires: indicateurs denses, index des blocs et index inverse.
Indice de livraison mentionné un élément requis dans l'indice linéaire, dans lequel chaque enregistrement dans l'ensemble de données correspondant, dans l'index dense, l'élément d'index doit être agencé dans une serrure code.
L'élément d'index est calculé, nous pouvons suivre la méthode de recherche mentionnée précédemment pour trouver les mots-clés dont vous avez besoin dans la table de gauche, puis trouver l'élément de données correspondant au mot-clé dans le panneau de droite .. Si nous n'utilisons pas L'élément d'index, nous ne pouvons que parcourir chaque code principal de la bonne manière dans le panneau de droite. L'utilisation d'un élément d'index peut considérablement raccourcir la durée de recherche. Toutefois, si l'ensemble de données est trop important, l'index a également la longueur du jeu de données. Chaque fois que vous trouvez un mot-clé, vous trouverez un code de clé long, réduira considérablement la marque.Reigner des fruits.
L'indice de la pièce
L'indice de livraison est dû au fait que l'indice est trop long et que l'effet de la requête diminuera. Donc, il y a un moyen de faire la longueur de l'index plus courte? C'est l'indice de bloc. Les gens devraient voir des étagères, la position est en fait un indicateur de blocage et chaque livre est placé (définir un indicateur), l'index sera donc raccourci de manière significative.
L'indice de bloc est divisé en plusieurs blocs selon un principe, de sorte que chaque pièce correspond à la réclamation.
La structure d'indice d'index de l'indice de bloc est divisée en trois éléments de données:
Bloc de mémoire chinoise enregistre certains enregistrements, utilisés pour le cyclisme;
Pour les pointeurs pour bloquer les premiers éléments de données, il est facile de démarrer ce bloc d'enregistrement.Index Split Trouvez la commande de recherche:
Trouvez les blocs dans lesquels les mots-clés que vous souhaitez trouver dans BA BANG Les blocs d'indexation, car les blocs d'index de bloc sont disposés, il peut donc être utilisé une méthode de recherche dans une recherche ordonnée.
Trouvez le bloc correspondant en fonction des en-têtes de bloc et regardez consécutif dans le bloc.
3.3 Indicateur de roulement
Pensez à la manière dont nous utilisons souvent des moteurs de recherche? Nous entrons dans des mots-clés que nous voulons que la requête, puis les moteurs de recherche renvoient une pile de liaisons Web contenant des mots-clés de recherche, puis nous cliquons sur vos propres besoins. Vous le pouvez. Le principe derrière ceci est d'inverser l'index.
Principes spécifiques de l'indice inverse:
Réception de mots-clés, les moteurs de recherche graviront presque toutes les informations sur Internet, puis voient chaque document / chaque document, le soi-disant texte grand devient un mot clé.
Configurez une index de ligne inverse, après avoir reçu des mots-clés, nous pouvons configurer un index de ligne inverse pour les mots-clés, qui est l'emplacement des mots-clés et des mots-clés, qui est post carQui correspond à elle. De plus, il est également nécessaire d'indiquer que le mot clé est dans l'article, de tomber rapidement en rouge. Il y a aussi plusieurs fois dans un article. Le nombre de postes indique que, dans quelques articles d'abord, la fréquence indique plusieurs fois dans cet article et la position indique que le mot clé est un emplacement spécifique de cet article.
Une fois que l'index est défini, lorsque l'utilisateur recherche le mot-clé, commencez par naviguer sur la colonne de mots-clés, puis renvoyez le numéro d'article correspondant au mot-clé et à l'apparence.
[classification binaire
Disposition binaire est une table de recherche dynamique, cette table peut être insérée ou Supprimé dans des recherches et d'autres éléments de données sans modifier d'autres éléments de données.
L'arborescence de classification binaire est également appelée arbres binaires, cet arbre peut être vide, s'il n'y a pas de blanc, avec la nature suivante:
Si vous ne devez pas être vide, toutes les valeurs de tous les boutons de l'arborescence de droite sont supérieures à la valeur de ses boutons d'origine.
Le nombre total de gauche et de droite est également un arbre de bifuisson.
L'arborescence de classification binaire est la première est un arbre binaire, et le but de construire un arbre de classification binaire n'est pas trié, mais d'améliorer la vitesse de la recherche et de l'insertion de verrouillage.
Sensibilisation de l'arbre binaire à la recherche
4.1 Balance d'arbre binaire (AVL)
L'arbre binaire d'équilibre est un arbre couplé, dans lequel la différence de hauteur entre l'arbre lurdy et l'arbre de droite de chaque bouton par 1.
raisons pour lesquelles l'arbre AVL est également connu sous le nom de deux mathématiciens G.Adelsom-Velskii et Emlandis inventé un algorithme pour résoudre un arbre binaire équilibré.
typedef struct BiTNode{ int data; //结点数据 struct BiTNode *lchild,* rchild; //左右孩子指针}BiTNode,*BiTree;
Nous soustrayons la valeur de la profondeur de l'arborescence latérale à gauche des nœuds binaires en valeur deLa profondeur de l'arborescence latérale est appelée le facteur de balance BF, puis l'élément de balance de tous les boutons de l'arborescence binaire d'équilibre ne peut être -1, 0, 1, à condition qu'il y ait un bouton du système la balance des plantes binaires , arbres binaires déséquilibrés.
Status SearchBST(BiTree T,int key,BiTree f,BiTree *p){ if(!T) //判断当前结点是否为空,如果为空,则执行 { *p = f; return FALSE; } else if(key == T -> data) //如果待查找关键词等于该节点值,则返回结点位置 { *p = T; retuen TRUE; } else if(key < T-> data) //如果待查找值小于结点值,则在左子树继续查找,否则在右子树查找 return SearchBST(T -> lchild,key,T,p) else return SearchBST(T -> rchild,key,T,p)}
Le premier arbre est un arbre binaire binaire équilibré et binaire, et non un arbre binaire équilibré, principalement en raison du facteur de balance BF supérieur à 1. Remarque: le tabouret d'équilibre est un arbre disposé.
4.2 Recherche multi-arborescence (B)
Le nombre d'enfants de chaque bouton peut être supérieur à deux et chacun des éléments peut être stocké au point. Il y a trois enfants dans les allocations gauche et droite dans les nœuds racines de l'image ci-dessous.
B Tree a une caractéristique très importante que la valeur du mot clé du bouton de couche inférieure est toujours dans la distance fractionnée du mot clé de couche ci-dessus, en particulier pendant cette période, il peut être visualisé du curseur.
Par exemple, dans l'image, l'arborescence gauche 3, 6 du bouton racine peut diviser la période de tempsO à 3, 3 et 6, 6 sur la justice; 1 et 2 tombent en infinis à 3 pièces, 4 et 5 tombent dans 3 à 6 fois, 7, 8, 9 tombent dans 6 à la période infinie.
B Interface est également basé sur cette fonctionnalité. Les recherches spécifiques sont les suivantes:
Si le cours & lt; k [1], Continuez à trouver dans les plantules spécifiées par P [0].
si serrure & gt; k [n], continuez à trouver dans les plantules spécifiées par p [n].Si k [i] & lt; Key & lt; K [i + 1] continue de trouver dans les plantules spécifiées par P [I].
Si vous rencontrez un pointeur vierge, vous prouverez que la recherche est infructueuse.
5. Tables répertoriées
Nous avons été décrits précédemment, le contenu du mot-clé sera trouvé être stocké dans la structure de données. NSi vous recherchez avec succès, l'adresse correspond au mot-clé renvoyé. Si cela échoue, la valeur n'est pas retournée.
Y a-t-il un moyen de renvoyer l'adresse sans comparaison?
La réponse est une méthode spécifique pour trouver des tables de hachage. Le principe de mise en oeuvre spécifique réelle pour mettre en place un certain nombre de connexions (mappage) entre les mots-clés et les adresses. Le mot-clé équivalent à x, le mot clé correspondant à l'adresse équivalente à y, y et x peut être avec une fonction, nous appelons cette fonction appelée fonction de hachage, de sorte que vous obtiendrez y aussi longtemps que vous entrez x. Pas besoin de contraster.
5.1 Structure de la moitié de la fonction
La méthode d'adresse directe prend directement une valeur TTouche des mots-clés comme adresse de hachage du mot clé.
Cette méthode très simple, n'apparaît pas non plus de conflits, Mais il faut connaître la répartition des mots clés précédente et appropriée pour la recherche plus petite et continue.
5.1.2 Analyse numérique
L'adresse est allouée en analysant des lois entre les chiffres.
Par exemple, nous prenons le numéro de téléphone mobile de chaque personne en tant que mot-clé, puis prenez les quatre derniers chiffres de chaque mot-clé (numéro de téléphone mobile) en tant que mot-clé. Si la société a trop (plus de 1 W), il est susceptible de se produire des conflits d'abord, c'est-à-dire que le nombre de deux personnes est la même et la solution pour résoudre les conflits que nous suivrons.
Cette méthode convient au cas de quantités de mots clés relativement volumineuses, car le nombre de bits est suffisamment grand, ne pourra pas apparaître des positions contradictoires, mais vous avez besoin deprévu. Distribution des données.
5.1.3 carrés
Cette méthode est littéralement d'abord en premier, d'abord des mots-clés de transplantation, puis de 3 chiffres intermédiaires en tant qu'adresse de hachage.
Le carré du mot-clé 1234 est 1522756, puis l'adresse de hachage du mot clé est 227.
Cette méthode convient à une distribution inconnue de mots-clés et de bits très.
5.1.4 Méthode pliante
f(key) = a*key + b (a,b为常数)
Les méthodes de pliage sont laissées de gauche à droite pour diviser le nombre de positions (fin du nombre inadéquat), il peut être plus court), après cela, se chevauchant Les substances sont résumées et longues planches et certains chiffres sont considérés comme une adresse de hachage.
Par exemple, il existe un mot-clé 9876543210, la table de hachage est de 3 bits (peut être de 4 bits), peut être divisé en 4 groupes, 987 | 654 | 321 | 0, puis commencez-les et 987 + 654 + 321 + 0 = 1962, puis 3 bits Obtenez l'adresse de hachage 962.
Cette méthode convient à un grand nombre de mots-clés et qu'il n'est pas nécessaire de connaître des mots-clés à l'avance.
5.1.5 En plus de payer le reste
est un littéral, le reste obtenu car le mot-clé est utilisé comme adresse de fleur de mot-clé.
5.1.6 Nombre aléatoire
Ceci est simple et plus simple, en utilisant directement des méthodes aléatoires. Les méthodes spécifiques sont les suivantes:
Ces méthodes ont mentionné ci-dessus que le mot clé est quelque chose, alors que dois-je faire si le mot clé est le caractère? En fait, tous les caractères, qu'ils soient chinois ou anglais, peuvent être convertis en chiffres (code ASCII ou Unicode).
5.2 Manipulation des conflits humains
5.2.1 MéthodesL'adresse ouverte
La méthode d'adresses d'ouverture consiste à trouver la prochaine adresse Hamoping après que l'emplacement ait un conflit, accédez directement à l'adresse sans arrêter 1), tant que la table de hachage est suffisamment grande, vous trouverez certainement un Adresse de hachage vide.
5.2.2 Fonction de réflexion
La fonctionnalité limitée doit commencer à sélectionner la fonction d'adresse de hachage pour construire l'adresse de hachage. Lorsque l'adresse est conflictuelle, elle est remplacée par une méthode de construction pour restructurer l'adresse de hachage jusqu'à ce que le conflit soit libéré.
5.2.4 Région de déversement public
La zone de débordement public consiste à créer des tables de surface sans spillless, qui sont utilisées spécifiquement pour stocker des éléments d'adresses de conflit. Équivalent à mettre tous les éléments dans deux tables. Lorsque vous levez les yeux, regardez dans la table principale, si la table principale n'est pas, TLe débordement est trouvé.
Trouver une table de hachage
Première nécessité de déterminer la structure de la table de hachage Hashtable, cette structure est utilisée pour stocker le hachage de mots-clés et des adresses de mots clés, définit spécifiquement comme suit: Après la structure (conteneur), nous pouvons initialiser la table de hachage, spécifiquement définie comme suit: Pour calculer l'adresse de hachage, correspondant à chaque mot-clé est inséré dans les données, nous Nécessité de déterminer la fonction de hachage, spécifiquement définie comme suit: Initialisation, les fonctions de hachage sont également définies. À ce stade, il peut être ajouté aux feuilles en vrac. La mise en œuvre est la suivante: Après avoir inséré des données, il attend d'être utilisé et un code spécifique, le code est le suivant: