Classes abstraites et membres de classes. Notion de type de données abstraite

L'abstrait est habituel appelé type de données, explicitement, n'est pas disponible dans la langue de programmation, dans ce sens, ce concept est relatif - le type de données manquant dans une langue de programmation peut être présent dans un autre.

Type de données abstraite (ATD) est déterminé indépendamment de la méthode de sa mise en œuvre:

    plusieurs valeurs possibles de ce type,

    et un ensemble d'opérations avec les valeurs de ce type.

L'utilisation de ATD peut être limitée à la phase de développement logicielMais pour son utilisation explicite dans le programme, il est nécessaire de disposer de sa mise en œuvre sur la base des types de données existants (et précédemment mis en œuvre) dans le langage de programmation:

    méthode de représentation des valeurs de ce type,

    et la mise en œuvre des opérations avec les valeurs de ce type.

ATD n'est pas prédéterminé dans la langue de programmation, et même en outre, les opérations de conception de tels types prédéterminées dans le décalage de la langue au développeur de programmeur la question de la méthode de la présentation des valeurs de ce type et de la mise en œuvre des opérations avec les valeurs De ce type. Et par conséquent, pour ces types de données, la question du choix des définitions et des méthodes de mise en œuvre du type d'opérations constructeur (valeurs et entrepôts de données) de ce type sélecteur et modificateur les composants (valeurs et entrepôts de données) de ce type sont attribués au développeur de programmeur.

Dans le concept de ATD, les concepts ont un statut spécial interface , Open User, et ventes caché de lui. Le rôle particulier de ces concepts dans le concept ATD est lié à la disposition fondamentale de l'indépendance du concept de l'ATD de la méthode de sa mise en œuvre.

Dans les "langages de programmation pratiques modernes", une opération de conception de type prédéfinie est généralement utilisée pour concevoir ATD. classer Ce qui donne un programmeur à un programmeur non seulement les moyens de regrouper des données et des opérations (avec ces données) dans un seul ensemble, mais également des moyens d'encapsulation, d'héritage et de polymorphisme pour contrôler les méthodes de conception et d'accès à ces données. Notez que la classe décrit une implémentation possible de l'ATD, l'affichage de la classe dans l'ATD est exprimé par la fonction d'abstraction, mais le rapport opposé n'est généralement pas fonctionnel, les implémentations du même ATD peuvent être multiples.

Dans les études sur des types de données abstraites, un rôle important a été reconnu à un stade précoce. paramétrage du type " En effet, par exemple, la "pile" ATD ne dépend pas du type d'éléments de pile, mais il est impossible de mettre en œuvre cette ATD aux "éléments d'une sorte de type identique". Dans le langage de programmation ADA, les moyens appropriés de conception de types de données paramétrés ont été inclus initialement et dans les «langages de programmation pratiques modernes», ce qui signifie que depuis que le développement de la bibliothèque STL est apparu. Aujourd'hui, le concept de "programmation généralisée" occupe une position significative dans la programmation pratique due à l'inclusion dans "Langues de programmation pratiques" moyens de construire des types de données paramétrés (modèles, modèle. , générique) .

Tout ce qui précède signifie qu'avec un point de vue méthodologique et théorique, une définition précise plus détaillée du concept de «type de données abstrait» est nécessaire. En théorie, le concept de "type de données abstrait" est généralement défini comme système algébrique multi-noyau (multi-axe) En plus de l'ensemble des valeurs possibles (transporteur) et d'un ensemble d'opérations sur de telles valeurs, des concepts sont alloués:

    La variété et la signature - ces concepts vous permettent de classer et des éléments du transporteur et des opérations avec eux par leurs types (pour les opérations - par les types de leurs arguments et la valeur renvoyée).

    Prédicats - relations sur les éléments du transporteur. Cela vous permet de déterminer la zone des valeurs possibles en imposant des restrictions (exigences) sur des valeurs valides, ainsi que dans une interprétation naturelle de travailler avec des expressions logiques arbitraires, sans les obliger à les interpréter comme des fonctions d'accessoires pour les ensembles ou comme des opérations multiples.

Sur cette base, il est possible de prendre en compte des types de données abstraites avec un point de vue logique logique holistique, y compris des questions sur les concepteurs (types et valeurs), les sélecteurs et les modificateurs de propriétés pour des objets de ce type.

Les concepts de la "structure de données" et du "type de données abstrait" dans quelque chose de très proche. Vous pouvez bien sûr supposer que ces concepts ne sont que deux vues sur la même chose. La méthode de représentation des valeurs ATD est toujours basée sur une structure de données, moins ou plus complexe, et la mise en œuvre d'opérations avec de telles valeurs dépend naturellement de la présente structure de données sélectionnée. D'autre part, la structure de données concernait un grand désir que nous pouvons toujours émettre en tant que ATD.

Mais nous allons toujours distinguer ces deux concepts, donné:

    Le type de données abstraite - implique un certain niveau d'abstraction afin de résoudre le type de données d'application (orienté objet) sans référence aux méthodes de sa mise en œuvre, et il est possible d'activer ce type de données dans la bibliothèque d'applications, bien, à moins pour le développement spécifique d'un système logiciel spécifique. ATD peut avoir plusieurs implémentations alternatives basées sur diverses structures de données.

    La structure de données est plutôt un diagramme de l'organisation des données et de la gestion, qui implique une concrétisation appropriée lorsqu'il est utilisé dans des situations spécifiques lors de la résolution de tâches spécifiques.

Les types de données abstraits, tout d'abord, incluent naturellement des systèmes algébriques de base mathématiques - séquences, ensembles, relations et mappages (relations fonctionnelles, fonctions). Mais dans la programmation de premier plan, ce n'est pas une étude des propriétés communes de ces concepts mathématiques et des possibilités de leur utilisation dans le développement de modèles de résolution des objectifs du sujet, des algorithmes de résolution de ces tâches et de la mise en œuvre effective de les algorithmes développés. Et par conséquent, sous la forme de ATD, les variantes limitées de ces systèmes algébriques de base sont généralement élaborées d'un côté et, d'autre part, étendues par des ensembles spécialisés d'opérations représentant un intérêt pragmatique sur le point de vue de la demande.

Le type de données décrit une pluralité d'objets présentant des propriétés similaires. Toutes les langages de programmation traditionnels utilisent un ensemble de types de données de base (réel, entier, chaîne, caractère). Les types de données de base sont soumis à un ensemble d'opérations prédéterminé. Par exemple, le type de données de base entier vous permet d'effectuer des opérations telles que l'ajout, la soustraction, la multiplication, la division.

Dans les langages de programmation traditionnels, les concepteurs de type sont allumés, dont le plus fréquent est le constructeur d'enregistrement. Par exemple, pour enregistrer un type de client, vous pouvez définir des champs de données. L'entrée client sera un nouveau type de données dans lequel les informations client seront stockées, vous pouvez accéder directement à cette structure de données, en vous référant aux noms de champs. Des opérations telles que l'écriture, la lecture, la suppression, la mise à jour peut être effectuée au-dessus de l'enregistrement. Pour les types de données de base, il est impossible d'identifier de nouvelles opérations.

Comme les types de données de base, les types de données abstraits (ATD, types de données abstraits) décrivent une variété d'objets similaires. Il existe des différences d'ATD à partir du type de données traditionnel:

· Les opérations ATD sont déterminées par l'utilisateur;

· ATD n'autorise pas l'accès direct à la présentation interne des données et de mettre en œuvre des méthodes.

Dans certains systèmes OO (par exemple, SmallTalk), les types de données de base sont mis en œuvre comme abstrait.

Pour créer un type de données abstrait, vous devez fournir:

· Tapez le nom;

· Présentation des données ou des variables d'une instance d'un objet appartenant à ATD; Chaque instance de variable a un type de données pouvant être un type de base ou un autre ATD;

· Les opérations en vertu de l'ATD et des restrictions sont mises en œuvre à l'aide de méthodes.

La définition ATD reconstruit la définition de la classe. Dans certains systèmes OO pour distinguer les classes et les types lorsqu'il est référencé aux structures de données et aux méthodes de classe, le mot clé est utilisé et lorsque l'objet des instances d'objet est référencé - mot-clé Classer. Type (type) est un concept plus statique et la classe est connectée principalement à l'heure d'exécution. La différence entre la classe OO du type OO peut être illustrée par l'exemple. Supposons qu'il y ait un modèle de modèle. Une description de sa structure est attachée au modèle, ainsi que des instructions pour son utilisation. Ce modèle est une description du type (définition de type). L'ensemble de gabarits d'art réel, chacun a numéro unique (ou OID) est la classe (classe).

ATD ainsi que l'héritage vous permet de créer des objets complexes. Objet complexe (objet complexe) est formé par une combinaison d'autres objets dans des interrelations complexes les uns avec les autres. Exemple objet complexe peut être trouvé dans les systèmes de sécurité où différents types Données:

1. Données de l'employé standard (tableau) (nom complet, onglet. Non, etc.);

2. Carte de billette pour stocker la photo de l'employé;

La capacité de travailler relativement simplement avec un environnement de données aussi complexe augmente la valeur des systèmes OO du marché actuel de la base de données.

Type de données abstraite

Type de données abstraite (ATD) - Il s'agit d'un type de données permettant de travailler avec des éléments de ce type un ensemble spécifique de fonctions, ainsi que la possibilité de créer des éléments de ce type à l'aide de fonctions spéciales. La structure interne totale de ce type est masquée du développeur de logiciels - c'est l'essence de l'abstraction. Le type de données abstrait détermine l'ensemble de mise en œuvre spécifique Type de fonctions pour fonctionner avec ses valeurs. Des implémentations spécifiques d'ATD sont appelées structures de données.

Dans la programmation, les types de données abstraites sont généralement soumis sous la forme d'interfaces qui masquent les types de types correspondants. Les programmeurs fonctionnent avec des types de données abstraits exclusivement à travers leurs interfaces, car la mise en œuvre peut changer à l'avenir. Cette approche est conforme au principe de l'encapsulation dans la programmation orientée objet. Côté fort Cette technique consiste à dissimuler la mise en œuvre. Une fois que l'interface est publiée uniquement, tandis que la structure de données prend en charge cette interface, tous les programmes qui fonctionnent avec une structure donnée du type de données abstrait continueront de fonctionner. Les développeurs structurels de données essaient sans modifier l'interface externe et la sémantique des fonctions, affinez progressivement la mise en œuvre, l'amélioration des algorithmes de vitesse, de fiabilité et de mémoire utilisées.

La distinction entre les types de données abstraites et les structures de données implémentées par des types abstraits peut être expliquée dans l'exemple suivant. La liste des types de données abstraites peut être implémentée à l'aide d'une liste ou d'une liste de lignes à l'aide de diverses méthodes d'allocation de mémoire dynamique. Toutefois, chaque mise en œuvre détermine le même ensemble de fonctions qui doivent fonctionner de manière égale (en conséquence, et pas de vitesse) pour toutes les implémentations.

Les types de données abstraits vous permettent d'atteindre la modularité produits logiciels et avoir plusieurs autres implémentations interchangeables d'un module séparé.

Exemples d'ajouter

voir également

Liens

  • LAPSHIN V. A. Types de données abstraites dans la programmation

Fondation Wikimedia. 2010.

Regardez ce qui est un "type de données abstrait" dans d'autres dictionnaires:

    type de données abstraite - Type de données ( classe abstraite) défini en transférant ses méthodes et ses propriétés sans créer leur mise en œuvre spécifique. Sujets informatique En général, en Abstract Data Daysadt ... Annuaire Traducteur technique

    Dans la théorie de la programmation, tout type, dont les valeurs sont les valeurs de certains autres types, des concepteurs «WedROGOGOGO» de type algébrique. En d'autres termes, le type de données algébriques comporte un ensemble de concepteurs de type, chacun desquels ... Wikipedia

    Un entier, type de données entier (ENG. INTEGER), en informatique, l'un des types de données les plus simples et les plus courants dans les langages de programmation. Utilisé pour représenter des entiers. Les nombreux chiffres de ce type représentent ... ... Wikipedia

    Ce terme a également d'autres valeurs, voir définie (valeurs). De nombreuses structures de type et de données en informatique sont la mise en œuvre d'un ensemble d'objets mathématiques. Le jeu de types de données vous permet de stocker nombre limité Viole ... ... Wikipedia

    Certaines langages de programmation fournissent un type de données spécial pour les nombres intégrés. La présence d'un type intégré simplifie le stockage de valeurs intégrées et en calculant sur eux. Contenu 1 Arithmétique sur complexe 2 Support en langues ... Wikipedia

    Ce terme a d'autres valeurs, voir le pointeur. Pointeur de diagramme du pointeur (pointeur, anglais. Pointeur) variable, la plage des valeurs dont consiste des adresses des cellules de mémoire et une valeur spéciale de l'adresse zéro. ... ... Wikipedia

    L'un des types de types de données algébriques, caractérisés par le fait que ses concepteurs peuvent renvoyer des valeurs de leur type. Ce concept est mis en œuvre dans plusieurs langages de programmation, en particulier dans les langues ML et Haskell, et ... ... Wikipedia

    Le type (fra. Trait) est un type abstrait, en informatique, utilisé comme "modèle conceptuel simple pour structurer des programmes axés sur des objets". Les types sont similaires aux mélanges, mais peuvent inclure des définitions de méthodes de classe. ... ... Wikipedia

    Arbre binaire, exemple simple d'une structure de données connectée à la ramification. Structure de données (eng. Structure de données) Unité logicielle, permettant une ... Wikipedia

    - (type supérieur) dans la théorie des types, souvent indiqués comme un seul sommet ou un symbole "fixe" (⊤), un type universel, c'est-à-dire un type qui contient chaque objet possible dans le système souhaité Les types. Le type le plus élevé est parfois appelé ... ... Wikipedia

Bonne journée, Hobravchan!

Le prochain message est une présentation de ma réflexion sur la nature des classes et des ATD. Ces reflets sont complétés par des citations intéressantes des livres du développement logiciel Gourou

introduction

Commençons par le fait que nous parlons sans heurts à la définition de ATD. ATD, tout d'abord, est un type de données, ce qui signifie comme suit:
la présence de certaines opérations disponibles sur les éléments de ce type;
Ainsi que des données relatives auxquelles ces opérations sont effectuées (plage de valeurs).

Que signifie le mot "abstrait"? Tout d'abord, le concept d'abstrait «d'abstrait» signifie se concentrer sur quelque chose d'important et, en même temps, nous devons être distraits d'un peu important, sur ce moment, des détails. La définition de l'abstrait est bien divulguée dans le livre de livres de livres ("Grady Boch"). Sonne la définition comme ceci:

L'abstraction est l'allocation et la transmission de la combinaison d'objets de propriétés communes qui définissent leurs frontières de concept et distinguent tous les autres types d'objets.
En d'autres termes, l'abstraction vous permet de "jeter la lumière" aux données dont nous avons besoin et, avec le "partage" de ces données que nous ne sommes pas importants.

Alors, que se passera-t-il si de fusionner le concept de "type de données" et de "abstraction" ensemble? Nous recevrons un type de données qui nous fournit un certain ensemble d'opérations garantissant que le comportement de ce type de données, ainsi que ce type de données masquera ces données avec lesquelles ce comportement est mis en œuvre. D'ici, nous arrivons au concept de l'ATD:

ATD est un type de données qui cachent sa réalisation interne des clients.
Il est surprenant que, en appliquant ATD Abstraction, nous permet de ne pas penser à des points de mise en œuvre de bas niveau, mais de travailler avec l'essence de haut niveau du monde réel (Steve McConnell).

Je pense que lorsque vous développez ATD, vous devez d'abord déterminer l'interface, car l'interface ne doit pas dépendre de la représentation interne des données de l'ATD. Après avoir déterminé les opérations qui déplacent l'interface, vous devez vous concentrer sur les données qui mettront en œuvre le comportement spécifié de l'ATD. En conséquence, nous obtenons une certaine structure de données - le mécanisme vous permet de stocker et de traiter des données. Dans le même temps, la beauté de l'ATD est que si nous voulons modifier la présentation interne des données, nous n'aurons pas à errer tout au long du programme et changera chaque ligne du code qui dépend des données que nous souhaitons changer. . ATD encapsule ces données, ce qui vous permet de modifier le travail des objets de ce type et non de l'ensemble du programme.

Avantages de l'ATD

L'utilisation de ATD présente de nombreux avantages (tous les avantages décrits peuvent être trouvés dans le livre de Steve McConnell "Code parfait"):

  • Encapsulation des détails de vente.
    Cela signifie qu'une fois l'encapsulation des détails de la mise en œuvre du travail ATD, nous fournissons l'interface client, avec laquelle il peut interagir avec ATD. En modifiant les détails de la mise en œuvre, la présentation des clients sur les travaux de l'ATD ne changera pas.
  • Complexité réduite.
    En abstraction des détails de la vente, nous sommes concentrés sur l'interface, c'est-à-dire sur ce qui peut être fait par ATD, et non sur la manière dont cela se fait. De plus, ATD nous permet de travailler avec l'essence du monde réel.
  • Limiter la zone d'utilisation des données.
    En utilisant ATD, nous pouvons être certains que les données représentant la structure interne de l'ATD ne dépendent pas d'autres sections du code. Dans le même temps, l'indépendance de l'ATD est mise en œuvre.
  • Informatique haute interface.
    ATD vous permet de présenter l'ensemble des interfes en termes d'entités du domaine, ce qui vous convient, augmente la lisibilité et l'informativement de l'interface.

Steve McConnell recommande de soumettre des types de données de faible niveau en tant que ATD, tels qu'une pile ou une liste. Demandez-vous quelle est cette liste. S'il représente une liste des employés de la banque, envisagez ATD comme une liste des employés de la banque.

Nous avons donc compris ce que ATD est et appelé les avantages de son utilisation. Maintenant, il convient de noter que lorsque vous développez des cours dans l'OOP, il convient de penser, tout d'abord sur ATD. En même temps, Steve McConnell l'a dit, vous n'êtes pas programmé dans la langue, mais en utilisant la langue. Ceux-ci, vous programmerez le départ de la langue, sans se limiter aux pensées en termes de tableaux ou de types de données simples. Au lieu de cela, vous penserez à un niveau élevé d'abstraction (par exemple, en termes de feuilles de calcul ou des listes d'employés). La classe n'est rien de plus qu'une addition et un moyen de mettre en œuvre le concept ATD. Nous pouvons même soumettre une classe comme formule:
Classe \u003d ATD + Héritage + polymorphisme.
Alors, pourquoi suivre l'ATD, lors du développement de cours. Parce que, premièrement, nous devons décider quelles opérations seront l'interface de la future classe, quelles données à cacher, mais à ce qu'il faut fournir accès ouvert. Nous devons penser à fournir une interface élevée, une facilité d'optimisation et une vérification de code, ainsi que sur la manière de fournir la bonne abstraction de pouvoir réfléchir aux essences du monde réel, et non sur des éléments de mise en œuvre de bas niveau. Je crois que c'est après la définition de ATD, nous devons penser à des problèmes d'héritage et de polymorphisme.

Il convient de noter que le concept ATD a trouvé une application gyroche dans l'OOP, car ce concept complète l'OOP et vous permet de faire la complexité des programmes dans les exigences mondiales rapides pour les logiciels.

J'ai écrit cet article afin d'attirer l'attention des développeurs sur l'ATD afin d'améliorer la qualité du travail et le développement de logiciels.

Sources d'occasion:

Steve McConnell - "Code parfait";
Robert Sedzhvik - "Algorithmes sur Java".

Annexe du programme de travail sur la discipline "Structures et algorithmes de traitement de données" dans EUM "

Type de données abstraite "Liste".

Lister - Séquence d'éléments d'un certain type uNE.1 , uNE.2 , ..., uNE. n., n.https://pandia.ru/text/78/308/images/image001_307.gif "largeur \u003d" 13 "hauteur \u003d" 16 "\u003e 1, puis uNE.1

Appelé le premier élément, et uN. - le dernier élément de la liste. Les éléments de liste sont commandés de manière linéaire en fonction de leur position dans la liste. Élément ai. précédé par Élément ai+1 pour jE. = 1,2, n.-1 et ai poursuivre par ai-1 pour jE. = 2,3, n.. Chaque élément de la liste ai Il a positionner jE., jE.=1,2, n.. La liste existe la position , ce qui signifie la fin de la liste - néant.. Il suit le dernier élément de la liste.

Les opérateurs ATD "Liste":

1. Insérer ( x., R,L.). Cet opérateur insère un objet h. Positionner r dans la liste L, En déplaçant des éléments de la position P puis de la position la plus élevée suivante. Ainsi, si la liste L. se compose d'éléments uNE.1 , uNE.2 , ..., maisn. a1, A2, ..., Ar-1, X, Ar, ..., uNE.n.. Si p prend la valeur néant. , alors nous aurons uNE.1 , uNE.2 , ..., uNE.n. , , H.. Si dans la liste L. Pas de position r, Le résultat de l'exécution de cet opérateur n'est pas défini.

2. Localiser.(x. , L. ). Cette fonctionnalité renvoie la position d'objet. h. dans la liste L. Si dans la liste d'objets x. Il se trouve plusieurs fois, puis la position du premier du début de la liste d'objets est renvoyée. x. Si objet h. pas sur la liste L., puis retourne néant..

3. Récupérer.(p. , L. ). Cette fonctionnalité renvoie un élément qui se situe en position. r dans la liste L. Le résultat n'est pas défini si p \u003d. néant. ou répertorié L. Pas de position r

4. Effacer.(p. , L. ). Cet opérateur supprime l'article en position r Lister L. Donc, si la liste L. se compose d'éléments uNE.1 , uNE.2 , ..., maisn. , après avoir terminé cet opérateur, il aura une vue a1, A2, ...,, ap.- jE. , ap.+ jE., ..., maisn. Le résultat n'est pas défini si dans la liste L. Pas de position r ou alors r = néant..

5. Suivant ( p, L. ) et Précédent (p, L. ). Ces fonctions retournent en conséquence les positions suivantes et antérieures de la position. r dans la liste L. Si un r - Dernière position dans la liste L, Que ensuite (p., L.) = néant.. La fonction suivante n'est pas définie lorsque p \u003d.néant.. La fonction précédente n'est pas définie si p \u003d 1. Les deux fonctions ne sont pas définies si dans la liste L. Pas de position r

6. Makenull.( L. ) . Cette fonctionnalité fait une liste L. position vide et retourne la position néant..

7. PREMIER.(L. ). Cette fonctionnalité renvoie la première position dans la liste L. Si la liste est vide, la position est renvoyée. néant..

8. Printlist.(L. ). Imprimés Liste Articles L. Dans l'ordre de leur emplacement dans la liste.

Représentation de la liste à l'aide du tableau:

Représentation de la liste en utilisant liste auto-connectée:

Désignation:

· - Pointeur au début de la liste,

· durer. - Pointeur du dernier élément de la liste ,

· maxlenght. longueur maximale (Nombre d'éléments) dans la liste.

Affichage de la liste à l'aide d'une liste à double liaison:

Des exercices:

1. Écrivez des inserts, supprimez et recherchez des éléments de liste triés en utilisant pour implémenter la liste.

§ déployer

§ Pointeurs.

2. Écrivez un programme de fusion

§ deux listes connectées triées,

§ n triés des listes connectées,

3. Dan un type polynomial

p (x) = c1 H.e.1 + c.2 xe.2 + + den.h.n., e1\u003e E2\u003e ...\u003e e.n.> 0.

Un tel polynôme peut être représenté comme liste associéeoù chaque élément a trois champs: un - pour le coefficient dejE. Deuxièmement - pour l'indicateur e.jE. Le troisième est pour le pointeur à l'élément suivant. Pour la présente soumission des polynômes, écrivez un programme d'addition et de multiplication des polynômes en utilisant cette vue.

4. Implémentez la liste ATD (liste) pour tout type de données et son insertion, localiser, récupérer, supprimer, ensuite, précédent, make, printlist:

§ La liste est définie sous la forme d'un tableau,

§ La liste est définie comme une liste unique connectée,

§ La liste est définie comme une liste de double liaison.

Section du programme de travail 2.1.2

Type abstrait de données "pile".

Empiler - Il s'agit d'un type de liste spécial dans lequel tous les inserts et retrait sont effectués uniquement à une extrémité, appelé verche , (HAUT). Pour la pile utilise la méthode d'accès Lifo. (Dernier in-premier sorti - ce dernier est entré - le premier est sorti).

Opérateurs ATD "Stack":

1. Makenull.(S.). Rend la pile s vide.

2. Haut.(S.). Renvoie l'élément de la pile de S. S. Typiquement, l'étape de la pile est identifiée par la position 1, puis le (s) top (s) peut être enregistré en termes d'opérateurs de liste générale comme récupération (premier (s), s).

3. Pop(S.). Supprime l'élément de la pile sommet (hors de la pile), en termes d'opérateurs de liste, cet opérateur peut être écrit comme Suppr (premier (s), S.).

4. Pousser.(x., S. ). Insère un élément h. Au sommet de la pile s (pousse l'élément à la pile). L'élément précédemment situé dans le haut de la pile devient l'élément suivant le sommet, etc. En termes de relevés de liste Total, cet opérateur peut être écrit comme insert (; c, premier (s), S.).

5. Vider.(S.) . Cette fonctionnalité revient vrai (vérité) si la pile S. Vide et la valeur de faux (faux) sinon.

déployer:

Présentation de la pile avec liste auto-connectée:

Des exercices:

Implémentez la pile ATD (pile) pour tout type de données et ses opérateurs de POP, POP, POP, POINT, VIDE.

§ La pile est spécifiée sous la forme d'un tableau,

§ La pile est spécifiée comme une liste unique connectée.

Section du programme de travail 2.1.2

Type de données abstraite "File d'attente".

File d'attente (file d'attente) est un type de liste spécial, où des éléments sont insérés d'une extrémité, appelé arrière (Arrière) et retirer de l'autre, de face (De face). Les files d'attente sont également appelées "Listes de type FIFO" (l'abréviation FIFO est déchiffrée comme premier in-premier sorti: première entrée - première sortie). Les opérateurs effectués au-dessus des files d'attente sont similaires aux opérateurs de la pile. La différence essentielle entre eux est que l'insertion de nouveaux éléments est effectuée dans fin de la liste , pas au début, comme dans les piles.

ATD Opérateurs "File d'attente":

1. Makenull.(Q.) Efface Q. Q. , Le rendre vide.

2. De face(Q.) - Fonction renvoyant le premier élément de la file d'attente Q. Vous pouvez implémenter cette fonctionnalité à l'aide des opérateurs de liste comme récupérateur (premier (q), q ).

3. Enduue(uNE.Q.) Insère un élément h. À la fin de la file d'attente Q.

Utilisation des opérateurs de liste, cet opérateur peut être effectué comme suit: Insertion (x, fin (q), q ).

4. Dequeuse(Q.) Supprime le premier élément de file d'attente Q . Nous mettons également en œuvre à l'aide des opérateurs de liste comme Supprimer (premier (Q), Q).

5. Vider.(Q.) Retourne vrai si et seulement si q est une file d'attente vierge.

cyclique déployer:

Désignation:

Q. - file d'attente,

Q.. de face - pointeur au début de la file d'attente,

Q.. arrière - Mannequin à la fin de la file d'attente.

Vue de la file d'attente avec liste auto-connectée:

Des exercices:

Mettre en œuvre la file d'attente ATD (file d'attente) pour tout type de données et sa make, avant, Enqueue, dequeuse, des opérateurs vides.

§ La file d'attente est définie sous la forme d'une matrice cyclique,

§ La file d'attente est spécifiée sous la forme d'une liste à double liaison.

Type de données abstraite "Arbre".

Bois - Ceci est une combinaison d'éléments appelés nœuds (dont celui est défini comme racine ), et relations ("parent") structure hiérarchique nœuds. Les nœuds, ainsi que des éléments de listes, peuvent être des éléments de n'importe quel type. Formellement, l'arborescence peut être définie récurremment comme suit.

1. Un nœud est un arbre. Le même noeud est également la racine de cet arbre.

2. Laisser p - Ceci est un nœud, un T.1 , T2, ...,Tock - Arbres avec racines n.1 . n.2 , ..., nk. respectivement. Vous pouvez construire un nouvel arbre en faisant p nœuds parents n.1 . n.2 , ..., nk. . Dans cet arbre p sera la racine, un T.1 , T2, ...,Tock - justificatif Cette racine. Nœuds n.1 . n.2 , ..., nk. appelé fils nœud p.

Souvent dans cette définition incluent le concept arbre zéro , c'est-à-dire "arbre" sans nœuds, un tel arbre est indiqué par le mot nier .

Exemple: O.le chef des livres, schématiquement peut être soumis par le bois. Le rapport entre le parent-fils est affiché comme une ligne. Les arbres sont généralement tirés de haut en bas pour que les parents soient situés au-dessus des "enfants".

Div_adblock135 "\u003e

Hauteur du nœud L'arbre s'appelle la longueur du chemin le plus long de ce nœud à n'importe quelle feuille. Dans l'exemple de la hauteur du nœud Ch.1 égal à 1, noeud CH.2 - 2, et le nœud ch. W - 0. Hauteur de l'arbre Coïncide avec la hauteur de la racine. Profondeur du nœud Déterminé comme la longueur du chemin (c'est le seul) de la racine avant le nœud.

Les fils du nœud sont généralement commandés de gauche à droite. Par conséquent, deux arbres sur la figure sont différents, comme l'ordre des fils du nœud mais Déversé. Si l'ordre des fils est ignoré, un tel arbre est appelé déséquilibré , Sinon, l'arbre est appelé commandé .

Opérateurs ATD "Tree":

1. Parent.(n., T). Cette fonctionnalité renvoie un nœud parent (parent) p dans un arbre T. Si un p est une racine qui n'a pas de parent, alors dans ce cas le retour nier. Ici nier Indique ce qui s'est passé à l'extérieur de l'arbre.

2. Le plus à gauche.__ Enfant(n. , T). Cette fonctionnalité Retourne le fils le plus à gauche du noeud n. dans un arbre T. Si un n. est une feuille (et donc n'a pas de fils), puis retourne nier.

3. Droite_ Frère et sœur(n. , T). Cette fonctionnalité renvoie le bon frère du nœud p dans un arbre T.ou valeur nier,. S'il n'y a pas de tel. Car c'est un parent r nœud p Et tous les fils du nœud r, Ensuite, parmi ces fils, un nœud est situé directement à droite. nœud p.

4. Étiqueter(n. , T. ). Retourne l'étiquette de nœud n.. arbre T.Pour effectuer cette fonctionnalité, il est nécessaire que les balises soient définies sur les nœuds de l'arborescence.

5. Créer.(v. , T. 1 , T. 2 , ..., Ti ,) - Il s'agit d'une traçabilité des fonctions que pour chaque i \u003d 0, 1, 2, ... Créez une nouvelle racine r Étiqueter v. Et puis pour cette racine crée des fils qui deviennent des racines de sous-arbre T.1 , T2, ....Ti;. Ces fonctions renvoient l'arbre avec la racine r. Notez que si i \u003d 0, un nœud est renvoyé rqui est à la fois la racine et la feuille.

6. Racine(T. ) Retourne un nœud qui est la racine de l'arbre T., Si un T. - Arbre vide, puis retourne nier.

7. Makenull.(T. ). Cet opérateur fait un arbre T. Arbre vide.

Vue des arbres à l'aide de parents massifs:

Aperçu de l'arborescence à l'aide des listes associées:

La représentation de l'arbre au moyen des fils de gauche et des frères droit.

Désignations sur la figure:

nodespace. tableau de nœuds d'arbres,

    Étiqueter étiquette de nœud entête. index du fils gauche dans la liste des fils,

cellspase. Tableau de listes de fils de nœuds,

    nœud. pointeur sur le nœud dans le tableaunodespace. , suivant l'index du fils droit dans la liste des fils.

Des exercices:

1. L'arbre est donné:

Div_adblock137 "\u003e

§ L'arborescence est définie sous la forme d'une gamme d'enregistrements de nœuds contenant l'index du fils gaucher, l'index du frère droit et de l'étiquette,

§ L'arborescence binaire connecté est définie à l'aide de pointeurs sur les fils gauche et droit.

4. Écrivez la fonction de dérivation en bois binaire en direct, inverse et symétrique.

Section du programme de travail 2.1.3

Type de données abstraite "SET".

Beaucoup de Habituellement représenté sous la forme d'une séquence de ses éléments conclus par des supports bouclés, par exemple (1, 4) désigne une pluralité constituée de deux éléments - nombre 1 et 4. L'ordre dans lequel les éléments de l'ensemble sont enregistrés n'est pas significatif. , afin que vous puissiez écrire (4, 1) comme (1, 4), lors de l'enregistrement du même ensemble. Beaucoup ne sont pas une liste (au moins sur la base d'un ordre arbitraire des éléments d'enregistrement). Il n'y a pas d'éléments répétitifs ((1, 4, 1) dans de nombreux).

Le concept fondamental de la théorie de l'ensemble est le concept de relation accessoires à définir désigné par le symbole. Alors enregistrement h. h. Pas la propriété de set MAIS", c'est à dire. h. pas l'élément de l'ensemble MAIS. Il y a un ensemble spécial désigné par le symbole appelé ensemble vide , et qui n'a aucun objet. La plupart des div_adblock138 "\u003e

Dire que beaucoup MAIS contenir Dans un ensemble DANS (ou alors s'allume Dans de nombreux DANS), Écrit UNE. DANS ou alors DANS MAISSi un élément de l'ensemble MAIS est aussi un ensemble de multiples DANS. Lorsque UNE. DANS aussi dire que beaucoup MAISest un un sous-ensemble de l'ensemble DANS.

Par exemple, (1, 2) https://pandia.ru/text/78/308/Images/image019_36.gif "largeur \u003d" 15 "hauteur \u003d" 15 src \u003d "\u003e DANS et dans, alors l'ensemble et l'appel propre, vrai ou alors sous-ensemble strict Ensemble DANS.

Les principales opérations effectuées sur les ensembles sont des opérations d'unification, d'intersection et de différences. Association Ensemble MAIS et DANS (dénote MAIS DANS) appelé un ensemble composé d'éléments appartenant au moins un des ensembles UNE. et DANS.

Intersection Ensemble MAIS et DANS (dénote MAIS DANS)appelé un ensemble composé uniquement de ces éléments appartenant à l'ensemble MAIS, Et mettre DANS. Différence Ensemble MAISet DANS (dénote UNE.\ B.) s'appelle un ensemble, composé uniquement de ces éléments de l'ensemble MAISqui n'appartiennent pas à l'ensemble DANS.

Par exemple, si A \u003d (A, B, C) et B \u003d (B, A), puis et B \u003d (A, B, C, D), A B \u003d (B) et A \\ B \u003d (A, avec ).

Les opérateurs ATD "SET":

1. syndicat(UNE., En, c) MAIS et DANS DE, Égal MAIS DANS.

2. Intersection.(UNE., En, c) a "entrée" arguments d'ensemble MAIS et DANSet en conséquence - "week-end" DE, Égal MAIS DANS..

3. Différence(UNE., En, c) a "entrée" arguments d'ensemble MAIS et DANSet en conséquence - "week-end" DE, Égal UN V.

4. Fusionner.( UNE. , Dans, c) opérateur effectue fusionnement (fusionner.), ou alors combinaison d'ensembles habitants . Cet opérateur ne diffère pas de l'opérateur. syndicatMais ici, il est supposé que les constructeurs ne pas intersecter (c'est-à-dire ne pas avoir d'éléments communs). L'opérateur attribue un ensemble DE valeur MAIS DANS, mais le résultat ne sera pas défini si Dans, c'est-à-dire dans le cas où les ensembles MAIS et DANS avoir des éléments communs.

5. membre(x, A. ) a des arguments définis MAIS et objet h. du même type que les éléments de l'ensemble MAISet retourne la valeur boolevo vrai. (Vérité), comme H.a "," b "," s ")) \u003d "mais". De même, l'opérateur est déterminé Makh.

11.Égal.(UNE. , DANS ) Retourne la valeur vrai. Puis et seulement quand les ensembles MAIS et DANS Consistent des mêmes éléments.

12. Trouve.(x. ) Fonctionne dans un milieu où il y a un ensemble de jeux non cyclables. Il renvoie le nom (uniquement) défini dans lequel il y a un élément x.

Multi Représentation:

Mstro peut être défini à l'aide d'une liste ou d'une liste connectée.

Des exercices:

1. Deux ensembles sont donnés A \u003d (1, 2, 3) et B \u003d (3, 4, 5). Quel sera le résultat des opérateurs suivants?

· Union (a. V. S),

· Intersection (A, B, C),

· Différence (a. V. c),

· Membre (L. A),

· Insérer (1, A),

· Supprimer (1, A),

2. Mettre en œuvre «Set» ATD pour tout type de données et sa make, un syndicat, une intersection, un membre, des opérateurs min.

· L'ensemble est défini à l'aide d'une matrice de longueur fixe et d'un pointeur sur la dernière position occupée dans la matrice,

· L'ensemble est défini à l'aide d'une liste connectée non étagée,

· L'ensemble est défini à l'aide d'une liste liée triée,

Section du programme de travail 2.1.3

Types spéciaux d'ensembles

Abstrait Type de données "Arbre de recherche binaire"

Arbre de recherche binaire - Structure de données pour les ensembles d'ensembles dont les éléments sont commandés par un certain ratio d'ordre linéaire. Sur les arbres de recherche binaires, vous pouvez implémenter des opérateurs définis Insérer., Effacer., Membre et Min.et le temps de leur exécution en moyenne a la commande O (log n) pour les ensembles consistant en p Éléments.

Un arbre de recherche binaire caractéristique est que ses nœuds sont marqués d'ensembles d'ensembles (les nœuds d'arbres contiennent des éléments de l'ensemble). De plus, tous les éléments stockés dans les nœuds de la sous-arbre gauche de tout nœud x, Moins que l'élément contenu dans le nœud x, Et tous les éléments stockés dans les nœuds du bon nœud suivant x, Plus d'éléments contenus dans le nœud x.

Exemples de bois binaire:

https://pandia.ru/text/78/308/images/image023_7.jpg "largeur \u003d" 277 "hauteur \u003d" 122 src \u003d "\u003e

La vue Avl-Tree ne diffère pas de la présentation de l'arbre de recherche binaire.

Un autre type d'arbre de recherche équilibré est 2-3 arbre. La structure de 2-3 arbres est différente de la structure de l'arbre de recherche binaire. Pour 2-3 arbres, il est caractéristique que tous les nœuds ont 2 ou 3 fils, tous les chemins de la racine à la feuille ont la même longueur et Tous les éléments de l'ensemble sont contenus dans les feuilles. 2-3 Les nœuds d'arbres sont divisés en interne et en borne (feuilles). Les nœuds internes ne sont utilisés que pour rouler la recherche dans l'arborescence. Chaque nœud intérieur contient les clés des plus petits éléments du deuxième et troisième fils (s'il y a un troisième fils) et des pointeurs vers les nœuds des fils.

Représentation d'un arbre de recherche binaire connecté:

Présentation d'un arbre de 2-3 connecté équilibré:

Des exercices:

1. Dessinez tous les arbres de recherche binaires possibles pour quatre éléments 1, 2, 3 et 4.

2. Insérez les entiers 7, 2, 9, 0, 5, 6, 8, 1 dans un arbre de recherche binaire vide.

3. Montrez le résultat de l'élimination du nombre 7, puis du numéro 2 de l'arborescence obtenue dans l'exercice précédent.

4. Dessinez 2-3 bois, qui entraînera une insertion dans un ensemble vide (représenté comme 2-3 arbores) d'éléments 5, 2, 7, 0, 3, 4, 6, 1, 8, 9.

5. Montrer le résultat de l'élimination de l'élément 3 du bois de 2-3 obtenu dans l'exercice précédent.

3. Implémentez l'arborescence de recherche ATD pour tout type de données et ses opérateurs d'insertion, de suppression, de membre et de min.

· L'arborescence est définie sous la forme d'un arbre binaire connecté

· L'arborescence est spécifiée sous la forme de 2-3 bois

Section du programme de travail 2.1.3

Type de données abstraite "Vocabulaire".

Vocabulaire - un ensemble pour stocker des objets "actuels" avec un insert périodique ou en supprimant certains d'entre eux. De temps en temps, il se pose également de savoir si un élément spécifique est présent dans cet ensemble. Le dictionnaire est mis en œuvre à l'aide du "dictionnaire" ATD avec les opérateurs INSÉRER,Effacer. et Membre. Dans un ensemble d'opérateurs de dictionnaires inclut également un opérateur Makenull. Pour initialiser les structures de données ATD.

Le dictionnaire peut être représenté à l'aide d'une table de hachage. La table est basée sur l'idée suivante: l'ensemble potentiel d'éléments (éventuellement infini) est divisé en un nombre fini de classes. Pour DANS classes numérotées de 0 à EN 1Construit fonction de hachage h. telle que pour tout élément h. Fonction Source Set h (x) Prend une valeur entière de l'intervalle 0, ... DANS - 1, qui correspond à la classe à laquelle l'élément appartient x. Élément h. souvent appeler clé h ( x) - hacher-x, Et "classes" - segments . Je vais faire la résolution des collisions du hachage (deux éléments de l'ensemble ont la même valeur h (x)) Applique le hachage ouvert et fermé.

table de hachage ouverte

Un tableau appelé segments de table et indexé segments de nombres 0, 1, ..., dans - 1 contient des titres pour DANS Listes connectées. Élément jE."La liste est un élément du jeu source pour lequel h.(.x :) \u003djE..

Présentation d'un dictionnaire avec table de hachage fermée

La table des segments est stockée directement des éléments du dictionnaire. Par conséquent, dans chaque segment, vous ne pouvez stocker qu'un seul élément du dictionnaire. Avec hachage fermé, une technique est appliquée hachage répété . En essayant de mettre un élément x. dans le segment avec le nombre h. ( x. ) qui est déjà engagé dans une autre séquence de segment de séquence sélectionnée h. 1 ( x. ) ,h. 2 ( x. ) , où vous pouvez mettre un élément. Chacun de ces segments est coté systématiquement jusqu'à ce qu'un segment libre soit trouvé. Il est placé un élément x. . Spécifier les numéros de segment lorsque la reproche s'applique diverses méthodes Autorisations de collisions. Par exemple, une méthode de hachage linéaire, une méthode au milieu carré, la méthode de hachage aléatoire

Des exercices:

1. Supposons que pour le hachage d'entiers dans la table de hachage à 7 segments utilise la fonction de hachage H (i) \u003d i% 7.

· Apportez la table de hachage résultante si des cubes précis 1, 8, 27,64 125, 216 343 sont insérés dans celui-ci;

· Répétez l'élément précédent pour une table de hachage fermée avec une méthode linéaire de résolution des collisions.

2. Supposons qu'il existe une table de hachage fermée avec 5 segments, fonction de hachage H (I) \u003d i% 5 et une méthode linéaire de résolution des collisions. Montrez le résultat de l'insert dans la table de hachage vide d'origine de la séquence des nombres 23, 48, 35, 4, 10.

3. Mettre en œuvre le "dictionnaire" ATD pour chaîne de texte et ses opérateurs insérer , Supprimer, membre et makenull

· Le dictionnaire est défini à l'aide d'une table de hachage ouverte,

· Le dictionnaire est défini à l'aide d'une table de hachage fermée avec une méthode linéaire de résolution des collisions,

Section du programme de travail 2.1.3

Type de données abstraite "Affichage".

Affichage - Ceci est un ensemble, sur les éléments qui définissaient la fonction d'affichage des éléments du même type ( domaines de définition ) sur les éléments d'un autre type ( zones de valeurs ) Autre type. Affichage M. avoue l'élément rÉ. Tapez DomainType de la zone de définition de champ r Type de rangeType de la gamme de valeurs: M.(rÉ.) = r.Affichage vide ne contient aucun élément

Opérateurs ATD "Affichage":

1. Makenull.(M. ). Rend l'affichage M. vider.

2. Assigner (M. d, R). Fait. M.(rÉ.) égal r peu importe comment M.(rÉ.) Il a été déterminé plus tôt.

3. Calculer ( M, d, r). Retourne True et attribue une valeur r variable M.(rÉ.), Si ce dernier est défini, et retourne faux sinon.

Vue d'affichage:le mappage peut être mis en œuvre efficacement à l'aide de tables de hachage. Ici x. spécifie la valeur de la zone d'affichage de l'écran et de l'élément de table avec le numéro h. ( x. ) - élément de la gamme de valeurs.

Section du programme de travail 2.1.3

Type de données abstraite "File d'attente avec priorités"

La file d'attente avec des priorités - Ceci est un ensemble, pour les éléments dont la fonction de priorité est définie (priorité), c'est-à-dire pour chaque élément x. Les ensembles peuvent être calculés r ( x. )- Élément prioritaire x. , qui prend généralement des valeurs provenant de nombreux nombres valides ou, dans un cas plus général, d'un ensemble ordonné de manière linéaire.

ATD "File d'attente avec priorité" Basé sur l'ATD "la plupart" avec les opérateurs Insérer. et Supprimer., ainsi que avec l'opérateur Makenull. Pour initialiser la structure de données. Opérateur Insérer. Pour une file d'attente avec des priorités est comprise dans le sens habituel, tandis que Supprimer. C'est une fonction qui renvoie un élément avec la plus petite priorité et comme un effet secondaire l'enlève de l'ensemble.

Vue de la file d'attente avec commandé une liste à deux connectés.


Vue de la file d'attente avec arbre connecté partiellement commandé:

L'idée de base d'une telle mise en œuvre est d'organiser les éléments de la file d'attente sous la forme d'un arbre binaire. Au niveau inférieur, lorsque certaines feuilles peuvent être absentes, toutes les feuilles manquantes ne peuvent être situées que sur la droite des feuilles de niveau inférieur. Plus sensiblement cet arbre commandé partiellement . Cela signifie que la priorité du noeud v. Plus de priorité d'un noeud de fils v., Lorsque la priorité du nœud est la valeur de la priorité de l'élément stocké dans ce nœud. La figure montre que de petites valeurs prioritaires peuvent ne pas apparaître à un niveau supérieur où il y a grandes valeurs Priorités.

Lors de l'exécution de la fonction Supprimer, un élément ayant une priorité minimale qui devrait être la racine de l'arborescence est renvoyé. Afin de ne pas détruire l'arborescence et de sauvegarder l'ordre partiel des valeurs des priorités de l'arborescence après avoir retiré la racine, les actions suivantes sont effectuées: au niveau le plus bas se trouve le nœud le plus à droite et placé temporairement à la racine de l'arbre. Ensuite, cet élément est descendu sur les branches de l'arbre vers le bas (à des niveaux inférieurs), sur le chemin, changeant des endroits avec des fils ayant une priorité plus petite, jusqu'à ce que cet élément devienne une feuille ou tombe dans une position où ses fils auront au moins aucun moins priorité.

Vue de la file d'attente à l'aide d'un tableau contenant des nœuds partiellement commandés:

Dans le tableau UNE. premier n. Les positions correspondent à n. Nœuds d'arbre. Élément UNE. Contient la racine de l'arbre. Nœud d'arbre à gauche gauche UNE.[ jE.], s'il existe, est dans la cellule UNE., Et le bon fils, s'il existe - dans la cellule UNE.. Et vice versa si le fils est dans la cellule UNE.[ jE.], Puis son parent dans la cellule UNE.[ jE.%2] . Les nœuds d'arbre remplissent les cellules UNE., UNE., … UNE.[ n.] niveau constant derrière le niveau, à partir de la racine et au niveau - de gauche à droite. L'arbre indiqué ci-dessus sera représenté dans la matrice de la séquence suivante de ses nœuds: 3, 5, 9, 6, 8, 9, 10, 10, 18, 9.

Des exercices:

1. Tracez un arbre partiellement commandé obtenu à la suite d'une insertion dans un arbre vide d'entiers 5, 6, 4, 9, 3, 1 et 7 et 7. Quel sera le résultat de l'utilisation en série de cet arbre de trois opérateurs Supprenemin?

2. Mettre en place une "file d'attente avec priorités" pour tout type de données et ses opérateurs d'insertion, de suppression et de makenull

§ Un arbre partiellement commandé est mis en œuvre avec des pointeurs,

§ Un arbre partiellement commandé est mis en œuvre à l'aide d'un tableau.

Section du programme de travail 2.1.3

Type de données abstraite "combinant des ensembles".

ATD est une association d'objets, chacun d'entre eux est un ensemble. Les principales actions effectuées ci-dessus une telle combinaison sont de combiner des ensembles dans un certain ordre, ainsi que de vérifier l'appartenance d'un objet spécifique avec un ensemble spécifique. Ces tâches sont résolues à l'aide d'opérateurs Fusionner. (Fusion) et Trouve. (Trouver). Opérateur de fusion ( UNE., Dans, avec) Fait beaucoup DE Égal à combiner des ensembles MAIS et DANSSi ces ensembles ne se croisent pas (c'est-à-dire ne pas avoir d'éléments communs); Cet opérateur n'est pas défini si les ensembles MAIS et DANS Traverser. Trouver la fonction ( x.) Renvoie l'ensemble sur lequel l'élément appartient x; Dans le cas où h. Il appartient à plusieurs ensembles ou n'appartient à personne, la valeur de cette fonction n'est pas définie.

Opérateurs ATD "Combinant des ensembles":

1. Fusionner.(UNE. , DANS) Combine les composants MAISet . DANS, Le résultat est attribué ou un, ou DANS.

2. Trouve.(x. ) - fonction qui renvoie le nom du composant auquel appartient x.

3. Initiale(UNE. , h. ) Crée un composant avec le nom A contenant seulement un article x.

Représentation des ensembles d'ensembles avec des tableaux:

Le nom de l'ensemble coïncide avec la valeur de l'index de la matrice setheaders. (nom 0. )

Désignation:

setheaders. - Tableau d'ensembles d'ensembles:

§ de ont. - le nombre d'éléments dans l'ensemble,

§ firstElement. - Index massifdes noms. avec le premier élément de l'ensemble

des noms.array de listes d'ensembles d'ensembles:

    setName. - le nom de l'ensemble sur lequel appartient l'élément, nextellement. - L'index de l'élément suivant dans la liste cet ensemble (La valeur de l'index 0 est utilisée comme la fin de la liste).

Section du programme de travail 2.1.3

Type de données abstraiteGraphique orienté "

Définitions principales:

Graphique orienté (orgraf ) G. = (V, e) consiste en une variété de sommets V. et beaucoup d'arcs E. Les sommets sont également appelés nœuds , et arcs - nervures orientées . Arc est présent sous la forme d'une paire de sommets commandée ( u., w.), où top et appelé début , uNE. w. - finir arcs.

Ils disent aussi que l'arc et -> w. conduit du sommet et au sommet w, Et le sommet w. adjacent avec sommet v..

Exemple 1 Orgraf:

Les sommets de l'Orgraf peuvent être utilisés pour représenter des objets et des arcs - pour la relation entre les objets.

Chemin Dans l'orgrappe s'appelle la séquence de sommets v.1 , v.2 , … , vn. , , Pour quels arcs existent v.1 -> v.2 , v.2 , -> v.3, , ..., vn.-1 , -> vn.. Ce chemin commence au sommet v.1 et passer à travers les sommets v.2 , v.3 , ..., vn.-1 se termine en haut vn.. Longueur du trajet - Le nombre d'arcs constituant le chemin dans ce cas la longueur du trajet est égale p - 1 . En tant que cas particulier de la manière, considérons un sommet v. comme un chemin de longueur 0 du haut v. à Le même top v.. Sur la figure, la séquence de sommets 1, 2, 4 forme le chemin de la longueur 2 du sommet 1 au sommet 4.

Le chemin est appelé simple , Si tous les sommets à ce sujet, sauf, peut-être que le premier et dernier, sont différents. Cycle - C'est un simple chemin de longueur d'au moins 1, qui commence et se termine dans le même sommet. Dans le dessin du sommet 3, 2, 4, 3 forment un cycle de longueur 3.

Dans de nombreuses applications, il est pratique de rejoindre toutes les informations sur les sommets et les arcs de l'Orgraf. Pour ces objectifs utilisés loveless Orgraf , C'est-à-dire que l'Orgraf, qui a tous les arcs et / ou chaque pic a des balises appropriées. L'étiquette peut être le nom, le poids ou le coût (ARC), ou la valeur de toutes les données de type spécifiées.

Exemple 2 de l'Orgraf marqué:

Div_adblock149 "\u003e

3. Un algorithme de circuit transitif (algorithme de Warchell):

Pour graphique G. = (V., E.) L'algorithme calcule la matrice de transitivité T., chaque élément dont T.[jE., j.] = 1 seulement quand il y a un chemin du haut jE. Jusqu'au sommet j. et T.[ jE., j.] = 0 autrement.

4. Algorithme de recherche du centre de l'Orgraf:

Laisser être et - Haut arbitraire orgraf. G. = (V., E). Excentricité (Suppression maximale) Verhins et défini comme

max (longueur de chemin minimum du haut w. jusqu'au sommet v. }

w. V.

Centre d'orgraf. G. Un haut avec une excentricité minimale est appelé. En d'autres termes, le centre de l'Orgraf est le sommet pour lequel la distance maximale (longueur de trajet) vers d'autres sommets est minimale.

Exemple:Le centre de l'orgraf est le sommet rÉ.

Eccentre-t.

5. Algorithme de contournement de l'orgraf en profondeur (recherche de profondeur):

En résolvant de nombreuses tâches relatives aux graphiques orientés, méthode efficace Traversel systématique des sommets et des arcs des orgraves. Cette méthode est la soi-disant rechercher en profondeur - Généralisation de l'arborescence contourne les méthodes d'ordre direct. La recherche de profondeur commence par la sélection du sommet initial v. Compter G, Ce sommet marqué a visité (a visité). Puis pour chaque sommet, adjacent au sommet v. Et qui n'a pas assisté plus tôt, la recherche de profondeur s'applique récursivement. Quand tous les sommets pouvant être atteints du haut v., Sera "attribué" des visites, la recherche se termine. Si certains sommets ne sont restés pas visités, l'un d'entre eux est sélectionné et la recherche est répétée. Ce processus continue jusqu'à ce que tous les sommets de l'orgrafage soient couverts par G..

6. Algorithme de construction d'une colonne de colonne de noyau profond:

Lors de la contournement du graphique, la méthode de recherche dans la profondeur que certains arcs mènent à des sommets inversés. De tels arcs menant à de nouveaux sommets sont appelés arcs de bois et forment un graphique forêt d'Ospea construit par la recherche de profondeur forêt froide profonde . Lors de la construction de la forêt, 3 types d'arc sont toujours debout: inverse, droit et transversal .. Arcs inversés - De tels arcs, qui dans la forêt centrale vont des descendants aux ancêtres. Arcs droits Ils s'appellent des arcs venant d'ancêtres à de vrais descendants, mais qui ne sont pas des arcs de bois.

Les arcs reliant des sommets qui ne sont ni des ancêtres ni des descendants les uns des autres sont appelés arcs transversaux . Si, lors de la construction d'un arbre le plus cool des fils d'un sommet, il est situé à gauche à droite dans l'ordre de leur visite et si de nouveaux arbres sont ajoutés à la forêt de gauche à droite, puis tous les arcs transversaux vont à droite .

Par exemple, Dugi. RÉ.-\u003e c et g-\u003e d - transversale, arc C.-> UNE. - Inverse, il n'y a pas d'arc direct.

Avec la dérivation profonde de l'arbre, il est souvent pratique de numéroter des sommets dans l'ordre de leurs visites. Ces numéros sont appelés profonds.

Présentation de l'Orgraf:

§ Présentation de l'Orgraf à l'aide d'une matrice adjacente:

Matrice d'aptitude pour l'orgraf G - Ceci est une matrice MAIS Taille n. n. avec des valeurs booléennes où UNE.[ jE., j.] = vrai. Puis et seulement quand il y a un arc du haut jE. Au top j. Souvent dans la matrice d'armement signification vrai. Remplacé par 1, et la valeur faux - 0.

Une généralisation de la vue de l'Orgraf à l'aide de la matrice de l'adjacence peut être considérée comme la représentation d'un Orgraf marqué également au moyen d'une matrice adjacente, mais de quel élément UNE.[ jE., j.] égal à l'étiquette de l'arc i -\u003ej.. Si arcs du haut jE. Jusqu'au sommet j. n'existe pas, alors la valeur a [ jE., j.] Peut ne pas être la signification d'une balise valide et peut être considérée comme une cellule "vide".

Matrice d'étanchéité pour un orgraf marqué (exemple 2):

§ Performances ARF avec listes de adjacence:

Liste des armes pour le haut jE. appelé une liste de tous les sommets adjacents au sommet jE.et d'une certaine manière ordonnée. Orgraf G. peut être représenté par tableau Diriger. (Titre), dont l'élément Diriger.[jE.] est un pointeur de la liste des adjacents de sommet jE..


Les opérateurs ATD "Orgraf":

Les opérateurs les plus courants effectués sur des graphiques orientés incluent les opérateurs de la lecture de marques de sommet et d'arcs de sommet, d'insertion et d'élimination des sommets et des arcs et un opérateur de mouvement dans les séquences d'arc.

Pour afficher l'ensemble des sommets adjacents, les trois opérateurs suivants sont requis.

1. Premier ( v.) Renvoie le premier index Vertex, adjacent au sommet v.. Si le sommet v. Pas de sommets adjacents, puis renvoie "zéro" sommet néant..

2. Suivant ( v., jE.) Renvoie l'index du sommet, adjacent au sommet v, Index suivant je. Si un jE - Ceci est le dernier indice de sommet, adjacent au sommet. v, puis retourne néant..

3. sommet ( v.,jE.) Renvoie le sommet avec l'index jE. d'une variété de sommets adjacents à v..

Des exercices:

Un graphique orienté (Orgraf):

https://pandia.ru/text/78/308/Images/image043_12.gif "largeur \u003d" 125 "hauteur \u003d" 100 src \u003d "\u003e


Un exemple de graphique incohérent:

Cycle (Simple) est appelé la longueur du chemin (simple) d'au moins 3 de n'importe quel sommet à celui-ci lui-même. Le nombre est appelé cyclique , Si au moins un cycle a. Un graphique acyclique connecté, qui est un "arbre sans racine", est appelé arbre libre . La deuxième figure décrite ci-dessus montre le graphique constitué de deux composants connectés, chacun d'eux étant un arbre libre. Un arbre libre peut être effectué par l'arbre "ordinaire", si un sommet est prescrit à la racine et toutes les nervures orientées dans la direction de cette racine.

Les arbres libres ont deux propriétés importantes:

1. Chaque arbre libre avec le nombre de sommets n., n. > 1 a exactement n. - 1 travers de porc

2. Si vous ajoutez un nouveau bord dans un arbre libre, un cycle sera avéré.

Laisser être G. = (V., E) -un graphique connecté dans lequel chaque bord ( r, w.) marqué d'un nombre de(v., w) qui est appelée coût des côtes . Arbre Osters Compter G.appelé un arbre libre contenant tous les sommets V. Graphique G. Coût L'arborescence principale est calculée comme la somme des valeurs de toutes les nervures entrant dans cet arborescence.

Les principaux algorithmes de traitement des graphiques non orientés:

1. Construction d'un coût minimum d'une valeur minimale (prima algorithme):

De nombreux verths sont construits U.À partir duquel le "pousse" arbre auxiliaire. Laisser être V \u003d (1, 2, ...,n.}. D'abord U \u003d (1). À chaque étape de l'algorithme est le bord de la valeur la plus basse ( u., V.) tel que u. U. et v. V \\ u., alors top v. Transféré de l'ensemble V \\ u. Dans de nombreux U.. Ce processus continue aussi longtemps que nombre U. ne sera pas égal à régler V..

La séquence de construction du noyau est indiquée ci-dessous.

https://pandia.ru/text/78/308/images/image048_12.gif "largeur \u003d" 501 "hauteur \u003d" 384 src \u003d "\u003e

3. Contourner des graphiques non orientés en recherchant en profondeur:

Pour contourner systématiquement tous les sommets du graphique, une recherche de profondeur est utilisée. L'algorithme de recherche dans la profondeur est similaire à l'algorithme de contournement des sommets de l'Orgraf. Ce dernier est également utilisé pour les graphiques non orientés, depuis un bord non orienté (v., w.) peut être représenté comme une paire d'arcs orientés v. -> w. et w. -> v..

Le déroulement en profondeur peut être utilisé pour construire un arbre de base.

Le graphique et le refroidisseur, obtenus en contournant ses sommets par la méthode de recherche de profondeur ci-dessous:

4. Contourner des graphiques non orientés en recherchant une largeur

Une autre méthode de contournement systématique des sommets du graphique est appelée rechercher dans la largeur . Il a obtenu son nom en raison du fait que lors de la réalisation des sommets pendant v. Suivant sont considérés comme tous les sommets, adjacents au sommet v., C'est-à-dire, visualisant les sommets "en largeur". Cette méthode peut également être appliquée aux graphiques orientés.

Tout comme lors de l'utilisation d'une recherche de déploiement, à travers une méthode de recherche de largeur située autour de contourner le graphique, un noyau est créé. Si après avoir atteint le sommet h. Lorsque vous envisagez la côte (x, y) sommet w. Non fréquenté plus tôt, cette côte est considérée comme une côte de bois. Si le sommet w. déjà visité plus tôt, puis la côte (x, y) Ce sera une frontière, car elle relie les sommets qui ne sont pas impliqués dans l'héritage de l'autre.

L'arbre d'essieu obtenu par la méthode de recherche de largeur est présenté ci-dessous.

Représentation d'un graphe inattendu à l'aide de la matrice d'adjacence:

Pour la présentation de graphiques non orientés, les mêmes méthodes peuvent être utilisées comme pour la représentation des graphiques orientés, si un bord non orienté entre les sommets v.et W. Considérer comme deux arcs orientés du haut v k. Haut w. et du haut w. Jusqu'au sommet v.

https://pandia.ru/text/78/308/Images/image051_12.gif "largeur \u003d" 159 "hauteur \u003d" 106 "\u003e

Représentation d'un graphe non annulé à l'aide de listes de adjacence:

https://pandia.ru/text/78/308/images/image053_12.gif "largeur \u003d" 339 "hauteur \u003d" 115 src \u003d "\u003e

1. Construire:

la valeur minimale de la valeur minimale de l'algorithme de prima;

l'arbre le plus cool du coût minimum avec l'algorithme de droration;

outlook en recherchant en profondeur, en commençant par des sommets A et D;

oslo Tree en cherchant en largeur, en commençant par des sommets A et D.

2. Mettre en œuvre les algorithmes de PRIMA et Crooked.

3. Mettre en œuvre la construction d'un noyau en recherchant en profondeur

§ Pour un graphique non orienté représenté par une matrice d'adjacence,

§ Pour un graphique non utilisé représenté avec des listes de adjacence.

4. Mettre en œuvre la construction d'un arbre caché dans la largeur

§ Pour un graphique non orienté représenté par une matrice d'adjacence,

§ Pour un graphique non utilisé représenté avec des listes de adjacence.

Avez-vous aimé l'article? Partager avec des amis: