10
votes

Quelle est la définition réelle d'un tableau?

Duplicaté possible:

Les tableaux, quel est le point?

J'ai essayé de poser cette question auparavant dans Quelle est la différence entre un tableau et une liste? mais ma question était fermée avant d'atteindre une réponse concluante ( plus sur ce ).

J'essaie de comprendre ce qui est vraiment signifié par le mot "tableau" en informatique. J'essaie d'atteindre une réponse de ne pas avoir une discussion selon l'esprit de ce site Web. Ce que je demande, c'est une langue agnostique, mais vous pouvez vous inscrire à vos connaissances sur les tableaux / faire dans diverses langues que vous avez utilisées.

façons de penser à cette question:

  • Imaginez que vous concevez un nouveau langage de programmation et vous décidez de mettre en œuvre des tableaux de travail; Qu'est-ce que cela signifie qu'ils veulent faire? Quelles seront les propriétés et les capacités de ces choses? Si cela dépend du type de langue, comment?
  • Qu'est-ce qui fait un tableau un tableau?
  • Quand est-ce qu'un tableau n'est pas un tableau? Quand c'est, par exemple, une liste, un vecteur, une table, une carte ou une collection?

    Il est possible qu'il n'y ait pas une définition précise de ce qu'est un tableau, si tel est le cas, existe-t-il des hypothèses standard ou standard ou quelle est la matrogue? Y a-t-il des espaces communs au moins? Peut-être qu'il y a plusieurs définitions, si tel est le cas, je cherche le plus de précision dans chacun d'eux.

    Exemples de langue:

    (Corrigez-moi si je me trompe sur l'un de ces).

      Les tableaux
    • C sont des blocs contigus de la mémoire d'un seul type pouvant être traversé à l'aide de pointeur arithmétique ou accessible à un point de décalage spécifique. Ils ont une taille fixe.
    • Les tableaux de JavaScript, Ruby et PHP ont une taille variable et peuvent stocker un objet / scalaire de tout type possible de croissance ou d'éliminer des éléments.
    • Les tableaux PHP sont arrivés en deux types: numériques et associatifs. Les tableaux associatifs ont des éléments stockés et récupérés avec des clés de chaîne. Les matrices numériques ont des éléments stockés et récupérés avec des entiers. Fait intéressant si vous avez: $ EG = Array ('a', 'B', 'B', 'C') ET VOUS UNET ($ EG [1]) Vous récupérez toujours < Code> 'C' avec $ par exemple [2] , uniquement maintenant $ par exemple [1] est indéfini. (Vous pouvez appeler array_values ​​() pour ré-indexer la matrice). Vous pouvez également mélanger des clés en chaîne et entier.

      À ce stade de la sorte de suspect que les tableaux C sont le seul véritable tableau ici et qui parlant strictement pour qu'un tableau soit un tableau, il doit avoir toutes les caractéristiques que je mentionne dans cette première balle. Si tel est le cas, celles-ci sont encore des soupçons que je cherche à avoir confirmé ou rejeté - des tableaux dans JS et Ruby sont en réalité des vecteurs et des tableaux PHP sont probablement des tables de type.

      Note finale: J'ai fait ce wiki communautaire afin que les réponses doivent être modifiées à quelques reprises au lieu de commentaires, allez-y et faites cela. Consensus est en ordre ici.


10 commentaires

Les matrices PHP sont en réalité une combinaison de listes et de tableaux dans d'autres langues. Il est donc préférable de ne pas le mentionner ici. - Peut causer une confusion.


Oh mon Dieu, ça me fait rire. Surtout parce que oui, c'est déroutant! Je pense que je pourrais avoir à poser des questions distinctes pour les listes et tous les autres mots.


La langue humaine n'est presque jamais une langue formelle. Vous aboiez du mauvais arbre lorsque vous essayez de trouver la définition «réelle» ou «réelle». Il n'y en a pas. Tout ce que nous avons est la tradition et le consensus, et le consensus se décompose fréquemment sur les marges. Dans la mesure où C, JavaScript, Ruby et PHP sont des langues formelles, ils peuvent définir ce que signifie une matrice dans le contexte de la langue, mais ces définitions n'ont aucune obligation de converger sur un modèle commun, et ils sont chacun ' vrai "et" réel "dans le contexte de la langue.


Génial, Charles. Je peux donc créer un nouveau langage de programmation qui fait référence à des nombres entiers comme "chaînes" au lieu de "entiers", et personne ne peut me dire ma définition est fausse!


@ Nicholas Knight - tant que vous pouvez avoir assez de gens pour être d'accord avec vous ... Consensus est la clé ici.


@Nicholas - Vous ne pouvez pas contester ceci. Perl, PHP, Ruby et de nombreuses autres langues utilisent le terme "tableau" pour leurs types de collecte commandés, mais "tableau" classique (en C) est assez différent (les fonctions POP / Push / Shift sont impossibles pour les tableaux sur la pile et extrêmement difficile et inefficace pour les matrices allouées en tas). Et php "tableaux" sont vraiment des hashtables qui utilisent simplement des chiffres.


@Nicholas: correct. Une définition n'est que "droite" ou "incorrecte" dans le contexte d'un cadre particulier de concepts. Si vous choisissez de définir vos termes de manière bizarre qui est «OK» tant que vous êtes logiquement cohérent à ce sujet. Ne vous attendez pas à ce que d'autres personnes vous comprennent ... ou même la peine d'essayer :-)


@Nicholas: Il existe un consensus assez fort et répandu sur ce que sont des cordes et quels sont les nombres entiers. Vous êtes en effet libre de concevoir une langue qui sous-tendait la convention, mais il est peu probable qu'il soit populaire. En outre, même s'il existe un consensus général sur ce qu'une chaîne est et comment elle devrait se comporter, elle est toujours obscure autour des bords. Comparez la sortie de 'Imprimer "2" + "3"' dans Perl et en Python.


Quel est le point de fermer ces choses? Aimez-vous simplement ruiner les jours des gens? Que "dupliquer" est une question complètement différente!


Un tableau est simplement une collection de données dans lesquelles vous pouvez facilement accéder à chaque élément en faisant référence à un index. Par exemple, 5 personnes debout dans une rangée seraient équivalentes à un tableau car vous pouvez vous référer à chaque individu de la ligne comme n ° 1, n ° 2, etc. Un tableau est assez similaire à celui en informatique.


8 Réponses :


5
votes

Array | əRā |

nom

1 un affichage impressionnant ou une plage d'un type particulier de chose: Il y a une vaste gamme de littérature sur le sujet | un éventail de choix de choix .

2 un arrangement commandé, en particulier

  • un arrangement de troupes.
    1. mathématiques : un arrangement de quantités ou de symboles dans des rangées et des colonnes; une matrice.
    2. os calculant : un ensemble commandé d'éléments connexes.
    3. loi : une liste des jurés empanelés.

      3 Poétique / littéraire Élaboré ou beaux vêtements: il a été vêtu d'une matrice fine . verbe

      1. [trans. ] (Usu. BE les forces montées contre lui.
      2. [trans. ] (Usu. être arrayé dans) habiller quelqu'un dans (les vêtements spécifiés): ils étaient turés en robe nationale hongroise.
      3. [trans. ] Droit Empanel (un jury). Origine moyenne anglaise (dans les sens [préparation] et [lieu de préparation]): de l'ancien français ISI (Noun), Areer (verbe), basé sur une ad- 'vers' + une base germanique signifiant «préparer».

5 commentaires

Heh, c'est drôle, et d'une manière ou d'une autre ... Parfait ...


J'ai le même dictionnaire! Néanmoins, point pris.


Quelle est la définition réelle d'un dictionnaire?


@TOM: Un dictionnaire a une définition précise qui est bien comprise. Un tableau ne le fait pas. C'est pourquoi cette question existe sur les tableaux et non des dictionnaires.


Je ne pense pas que cela mérite tant de upvotes ...



5
votes

C'est ou devrait être, tout sur abstraction

Il y a en fait une bonne question cachée là-bas, un très bon, et cela soulève une pierre de cale de langue que j'ai eue depuis longtemps.

Et ça aggrave, pas mieux.

OK: Il y a quelque chose de faiblement et largement défectueux de Fortran a raison que mes langues préférées comme Ruby ne se trompent toujours pas: elles utilisent une syntaxe différente pour les appels de fonction, les tableaux et les attributs. Exactement comment résumé est-ce? Dans Fortran Fonction (1) a la même syntaxe que le tableau (1) , vous pouvez donc changer l'une à l'autre sans modifier le programme. (Je sais, pas pour des missions, et dans le cas de Fortran, c'était probablement un accident de personnages de carte de poing Goofy et non rien de délibéré.)

Le point est, je ne suis vraiment pas sûr que xy , x [y] et x (y) doit avoir différent syntaxe. Quel est l'avantage de la fixation d'une abstraction particulière à une syntaxe spécifique? Pour faire plus d'emplois pour les programmeurs IDE travaillant sur les transformations de refactoring?

avoir dit tout cela, il est facile de définir tableau . Dans sa première forme normale, il s'agit d'une séquence contiguë d'éléments en mémoire accédée via un décalage numérique et à l'aide d'une syntaxe spécifique à la langue. Dans des formes normales supérieures, il s'agit d'un attribut d'un objet qui répond à un message typiquement numérique.


4 commentaires

Je pense que votre point est perdu sur moi, ici. Qui est une honte parce que ça sonne intéressant. Selon vous, quelle est la bonne question cachée? Aussi, je ne vois pas complètement comment ce que vous dites sur la syntaxe concerne (je suis sûr que ça fait! Mais je ne le vois pas en ce moment). Votre définition de la matrice a été notée, merci de répondre.


Eh bien, je discute d'une syntaxe unifiée pour l'envoi de messages aux objets, afin de découpler une utilisation à partir de la mise en œuvre et de rendre les objets polymorphes dans un sens différent. Cela concerne la définition de la matrice, il a commencé comme une simple cartographie des abstractions de vecteur et de matrice à Lvalues, comme c les appelle, mais maintenant l'opérateur [] peut parfois être redéfini (peut-être mettre en œuvre un Matrice ratase, ou autre chose) et maintenant, je ne vois donc pas une différence entre appeler une fonction, accéder à un attribut ou indexer un tableau. Ils sont tous sur l'envoi de messages aux objets.


+1 parce que tu me dois repenser moi-même avec ma conception "langage idéal".


Je tiens à souligner que dans le clojure, les vecteurs sont en réalité des fonctions de leurs indices et des cartes sont des fonctions de leurs clés.



0
votes

Un tableau est un conteneur et les objets qu'il ne contiennent aucune relation, à l'exception de la commande; Les objets sont stockés dans un espace continu de manière abstraite (niveau élevé, bien sûr que le niveau bas peut être continu aussi), de sorte que vous pourriez y accéder par une machine à sous [x, y, z ...]. Par exemple, par tableau [2,3,5,7,1], vous pouvez obtenir 5 à l'aide de la machine à sous [2] (emplacement [3] dans certaines langues).

Pour une liste, un conteneur également, chaque objet ( puits, chaque titulaire d'objet, tel que la fente ou le nœud ), il contient des indicateurs qui "point" à d'autres objets et ceci est la relation principale; en général à la fois élevé ou bas niveau, l'espace n'est pas continu, mais peut être continu; Ainsi, l'accès à la fente [x, y, z ...] n'est pas recommandé. Par exemple, par | -2-3-5-7-1- |, vous devez faire un voyage de premier objet au 3ème pour obtenir 5.


0 commentaires

3
votes

Si vous ignorez comment les langages de programmation sont des matrices et des listes de langages de programmation, et ignorez les détails de la mise en œuvre (et les caractéristiques de performance qui en résultent) des abstractions, les concepts de matrice et de liste sont indiscernables.

Si vous introduisez les détails de la mise en œuvre (toujours indépendant du langage de programmation) Vous pouvez comparer des structures de données telles que des listes liées, des listes de réseau, des tableaux réguliers, des tableaux de rattrapage et ainsi de suite. Mais alors vous ne comparez plus des tableaux et des listes de choses en soi.

La façon dont je le vois, vous ne pouvez parler qu'à une distinction entre les tableaux et les listes dans le contexte d'un langage de programmation. Et bien sûr, vous parlez alors de tableaux et de listes comme assisté par cette langue . Vous ne pouvez pas généraliser à aucune autre langue.

En bref, je pense que cette question est basée sur une fausse prémisse et n'a aucune réponse utile.

Edit: En réponse aux commentaires d'Ollie:

Je ne dis pas qu'il n'est pas utile d'utiliser les mots "tableau" et "liste". Ce que je dis, c'est que les mots ne sont pas et ne peuvent pas avoir de définitions précises et distinctes ... sauf dans le contexte d'un langage de programmation spécifique. Pendant que vous souhaitez que les deux mots aient une signification distincte, c'est un fait qu'ils ne le font pas. Juste jeter un coup d'oeil à la façon dont les mots sont réellement utilisés. En outre, essayer d'imposer un nouvel ensemble de définitions sur le monde est condamné à échouer.

Mon point sur la mise en œuvre est que lorsque nous comparons et contrastaons les différentes implémentations de tableaux et de listes, nous faisons exactement cela. Je ne dis pas que ce n'est pas une chose utile à faire. Ce que je dis, c'est que lorsque nous comparons et contrastent les différentes implémentations, nous ne devrions pas tout faire raccrocher si nous leur appelons des tableaux ou des listes ou autre. Nous devrions plutôt utiliser des termes que nous pouvons être d'accord sur ... ou ne pas utiliser de termes du tout.

Pour moi, "Array" signifie "Collection ordonnée de choses qui est probablement efficace indexable" et "liste" signifie "Collection ordonnée de choses pouvant être efficacement indexable". Mais il existe des exemples de tableaux et de listes qui vont contre la tendance; par exemple. Les matrices PHP d'une part et des arraylistes Java d'autre part. Donc, si je veux être précis ... dans un contexte de langage-agnostique, je dois parler de "tableaux de type C" ou de "listes liées" ou d'une autre terminologie qui indique clairement la structure de données que je veux vraiment dire. Les termes "array" et "liste" sont sans usage si je veux être clair.


5 commentaires

Il n'y a pas de réponse est une réponse légitime et utile pour moi. Mais je ne suis pas d'accord avec beaucoup de ce que vous dites avant cela, donc je vous vote, désolé.


@Ollie: Spécifiquement, qu'est-ce que vous êtes en désaccord avec ... et justifier.


Ces mots "tableau" et "liste" existent - ou doivent exister - pour désigner les caractéristiques et les limites de différentes structures de données. Vous avez raison de dire que les tableaux et la liste sont identiques lorsque vous supprimez les détails de la mise en œuvre, mais je pense que cela manque le point. Ce sont les détails de la mise en œuvre que je me soucie de. Après tout, la motivation pour avoir différentes structures de données est presque uniquement performante, sinon nous n'utiliserions que des tables de hachage pour tout.


@Ollie - Les détails de la mise en œuvre sont pas langue-agnostique. Vous avez raccroché sur la sémantique.


Je ne suis pas d'accord. Les détails de la mise en œuvre sont un type de langue-agnostique. Si quelque chose prend du temps constant dans une structure et un délai linéaire dans un autre, cela ne va pas d'importer ce que la syntaxe ressemble. C'est une simplification mais pas la simplification excessive.



3
votes

de Foldoc :

Array

1. << I> Programmation > une collection d'éléments de données typées identiques distingué par leurs indices (ou «souscriptes»). Le nombre des dimensions, un tableau peut avoir dépend de la langue mais est généralement illimité.

Un tableau est une sorte de Type de données agrégé . Un seul variable ordinaire (un " scalaire ") pourrait être considéré comme un tableau zéro dimension. Un tableau unidimensionnel est également connu En tant que " vecteur ".

Une référence à un élément de tableau est écrit quelque chose comme A [i, j, k] où a est le nom de la matrice et je, j et k sont le indices. C La langue est particulière en ce que chaque index est Écrit dans des crochets séparés, par exemple. Un [i] [j] [k]. Cela exprime le fait que, en C, un tableau N-dimension est en fait un Vecteur, chacun des éléments est un réseau dimensionnel N-1.

Les éléments d'un tableau sont généralement stockés contiguës. Les langues diffèrent quant à l'indice le plus à gauche ou le plus à droite Varie le plus rapidement, c'est-à-dire que chaque ligne soit stockée contiguë ou chaque colonne (pour un tableau 2D).

Les matrices sont appropriées pour stocker des données qui doivent être consultées dans une commande imprévisible, contrairement à listes qui sont mieux quand accessible séquentiellement. Les indices de tableau sont entiers , généralement numéros naturels , alors que les éléments de Un Array associatif est identifié par des chaînes.

2. << I> Architecture > A Array de processeur , à ne pas confondre avec Un processeur de tableau .

Notez également que dans certaines langues, quand ils disent "tableau", ils signifient réellement " Array associatif ":

Array associatif << I> Programmation > (ou "hachage", "carte", "Dictionnaire") Ana href="http://frofroc.org/array" Rel="nofollow Noreferrer"> Array où le indices ne sont pas seulement Les entiers mais peuvent être cordes arbitraires.

awk et ses descendants (par exemple, PERL ) a associatif Les tableaux qui sont implémentés en utilisant codage de hachage pour plus vite chercher.


3 commentaires

Je peux vous montrer des contre-exemples aux deux exemples de tableaux et listes utilisées dans la définition citée. Par exemple, des tableaux rares ne sont pas stockés contiguës et des arraylistes Java (ou équivalents) sont conçus pour un accès aléatoire. Outre ceux-ci sont des propriétés des implémentations de tableau / liste, pas des concepts sous-jacents.


Les tableaux rares ne sont pas très fréquents cependant.


Stephen: Il dit que "les éléments d'un tableau sont généralement stockés contigueusement". L'interface de liste de Java indique que les opérations "[Positionnels] peuvent s'exécuter dans du temps proportionnellement à la valeur d'index de certaines implémentations ... [Ainsi] itération sur les éléments d'une liste est généralement préférable à l'indexation de celui-ci", ce qui est à peu près ce que c'est ce qui précède . Le fait qu'une implémentation particulière de la liste (qui a un "tableau" dans son nom!) A o (1) l'accès aléatoire n'invalide pas l'affirmation selon laquelle, en général, "liste" signifie quelque chose qui est destiné à être consulté de manière séquentielle.



3
votes

Un tableau est une collection ordonnée d'éléments de données indexés par ENTERGER. Il n'est pas possible d'être certain de rien de plus. Votez pour cette réponse Vous croyez que c'est le seul résultat raisonnable de cette question.


3 commentaires

Ceci est techniquement correct, mais cela ne reçoit pas mon vote car la plupart des gens auraient un modèle mental différent. Malheureusement, il existe de nombreux modèles mentaux (contradictoires). Aucune définition ne recevrait mon vote parce que je ne pense pas qu'il peut y avoir un consensus. À la base de cela, les définitions concernent le consensus / la compréhension commune, pas la popularité.


Nous pouvons être certains que un tableau est une collection ordonnée, en particulier dans le sens mathématique qu'il est indexé par des entiers.


Hmm, mais en PHP, un tableau peut avoir un indice de chaîne. Je suppose donc que le consensus s'arrête avant cet attribut.



1
votes

Je dirais que les valeurs réel stockent les valeurs dans la mémoire contiguë . Tout ce que d'autre est appelé un tableau car il peut être utilisé comme une matrice, mais ils ne sont pas vraiment ("tableaux" dans PHP ne sont certainement pas réels tableaux (non associatif)). Les vecteurs et tels sont extensions de tableaux, ajout de fonctionnalités supplémentaires.


0 commentaires

2
votes

Un tableau:

  1. est une collection finie d'éléments
  2. Les éléments sont commandés, et c'est leur seule structure
  3. éléments du même type
  4. Accès aléatoire efficace soutenu
  5. n'a aucune attente d'insertions efficaces
  6. peut ou peut ne pas prendre en charge ANNED

    (1) différencie des tableaux de choses comme des itérateurs ou des générateurs. (2) Différente les réseaux des ensembles. (3) Différente les tableaux de choses comme des tuples où vous obtenez une chaîne int et une chaîne. (4) Différente des tableaux d'autres types de listes. Peut-être que ce n'est pas toujours vrai, mais l'attente d'un programmeur est que l'accès aléatoire est une durée constante. (5) et (6) sont juste là pour nier des exigences supplémentaires.


0 commentaires