Java - Pourquoi appelons-nous un tableau un «vecteur»?

20

Je lis un livre sur la programmation Java et je veux confirmer que je comprends la définition du mot "vecteur". Wikipedia dit que le vecteur est "un tableau unidimensionnel", source http://en.wikipedia.org/wiki/Vector .

Ne serait-il pas plus simple d'appeler le tableau simplement un tableau? Y a-t-il une raison pour laquelle nous devons utiliser un langage aussi sophistiqué que "vecteur"? Y a-t-il une différence entre un tableau et un vecteur?


entrez la description de l'image ici

Source: Cracking the Coding Interview, 4e édition, par Gayle McDowell, page 47.

FAQ
Q - Pourquoi n'avez-vous pas posté ceci sur english.stackexchange.com?
R - Parce que je pense que seules les personnes orientées vers l'informatique auront une bonne réponse.

davidjhp
la source
1
Les vecteurs ne sont pas identiques aux ArrayLists, notamment en raison de la synchronisation intégrée. Plus d'informations ici: stackoverflow.com/questions/2986296/…
Jeroen Vannevel
Hors sujet: Le terme "vecteur" n'est pas seulement utilisé en Java. 1. La bibliothèque C ++ a std::vector<…>("tableaux" de taille dynamique). 2. Le CLR (runtime .NET) fait également la distinction entre les "tableaux" et les "vecteurs", ces derniers étant un cas particulier des premiers, à savoir les unidimensionnels, à base zéro). Cette distinction est importante car il existe des optimisations spéciales pour les vecteurs. 3. En mathématiques, un n- tuple de nombres réels est parfois appelé "vecteur".
stakx
1
@JeroenVannevel Je pense que vous avez fait la confusion entre la classe Vector et le concept de vecteur qui peut être considéré comme un tableau unidimensionnel.
C.Champagne
OT, si vous voulez une réponse des informaticiens, pourquoi poster ici et non sur cs.stackexchange? Et pourquoi le drapeau java? D'après ce dont je me souviens de ma classe de programmation, il y a un tableau, puis une liste de liens. À l'exception du tableau, les conteneurs (vecteur, liste, carte, tas, etc.) sont implémentés en tant que liste liée.
imel96
2
Pourquoi appelons-nous un vecteur un tableau?
m3th0dman

Réponses:

35

Dans un usage typique, un "tableau" peut signifier soit un tableau unidimensionnel, soit un tableau multidimensionnel. De plus, en mathématiques, une matrice est un tableau à 2 dimensions tandis qu'un vecteur est un tableau à 1 dimension.

Greg Hewgill
la source
8
Hors sujet: en mathématiques, un "scalaire" est-il un tableau à 0 dimensions?
stakx
6
@stakx: Oui, c'est exactement ça. Habituellement, un scalaire est juste un scalaire, personne ne l'appellerait réellement un "tableau à 0 dimensions". Mais l'idée est bonne.
Greg Hewgill
2
Il est plus exact de dire qu'ils sont tous des tenseurs. De Wolfram Mathworld: "Les tenseurs sont des généralisations de scalaires (qui n'ont pas d'indices), de vecteurs (qui ont exactement un indice) et de matrices (qui ont exactement deux indices) vers un nombre arbitraire d'indices." (Rowland, Todd et Weisstein, Eric W. «Tensor». De MathWorld - Une ressource Web Wolfram. Mathworld.wolfram.com/Tensor.html )
SOFe
Pour ce qui vaut, en mathématiques, un vecteur n'est pas un tableau à 1 dimension. Un vecteur est un élément d'un espace vectoriel, c'est-à-dire un ensemble dans lequel des éléments peuvent être ajoutés et multipliés par des scalaires.
mlainz
L'espace vectoriel le plus célèbre est R ^ n, l'ensemble des "tableaux" de nombres avec addition et multiplication par élément. L'ensemble des fonctions réelles est également un espace vectoriel, mais généralement les gens ne considèrent pas les fonctions comme des tableaux. Un tableau de caractères ne serait pas un espace vectoriel, car il n'y a pas de choix évident d'addition et de multiplication. Dans le jargon mathématique, un tableau est un tuple ou une séquence finie. Voir en.wikipedia.org/wiki/Vector_(mathematics_and_physics) pour plus d'exemples de tuples qui ne sont pas des vecteurs.
mlainz
10

Les vecteurs ne sont pas exactement des tableaux. Pas classiques de toute façon. Ce sont des tableaux dynamiques. Ils peuvent être redimensionnés selon les besoins plutôt que d'être de taille fixe. Ils sont donc similaires aux ArrayLists mais pas tout à fait les mêmes.

Les listes de tableaux diffèrent des vecteurs en ce que les vecteurs synchronisent les opérations individuelles, ce que vous ne voulez pas à des fins de concurrence, en particulier par Jon Skeet . Ainsi, Vector a été déconseillé au profit d'ArrayList, mais certains l'appellent toujours Vector.

Le nom est à l'origine dérivé du terme mathématique pour une matrice à 1 dimension. Ceci en dépit du fait que la structure est en fait un n-tuple .

Ingénieur du monde
la source
2
Je pense que vous avez fait la confusion entre la classe Vector et le concept de vecteur qui peut être considéré comme un tableau unidimensionnel et leur note spécifique à Java.
C.Champagne
@ C.Champagne Il a utilisé un exemple Java donc c'est ce que je lui ai donné. J'ai ajouté la définition de la construction mathématique, qui n'est d'ailleurs pas techniquement un "vecteur" non plus.
World Engineer
2
Je suis avec @ C.Champagne. S'ils signifiaient Vector (la classe), le texte aurait utilisé un cap V. Ils ont utilisé un v en minuscule qui indique la définition classique (pas la classe) d'un vecteur.
Rig
Um, les vecteurs sont appelés vecteurs en mathématiques . Que voulez-vous dire par "pas techniquement un" vecteur "non plus"?
Andres F.
@AndresF. Un ensemble de nombres comme un tableau ou un "vecteur" serait un n-tuple si je comprends bien car il s'agit d'une collection discrète de valeurs.
World Engineer
4

Habituellement, le vecteur et le tableau sont la même chose et sont utilisés de manière interchangeable lors de la programmation. C'est dans la plupart des endroits, donc vous ne devriez pas vous en soucier la plupart du temps.

Cela dit, le langage est imprécis et nous avons parfois des mots qui ont des significations différentes dans des contextes différents qui finissent par signifier la même chose, ou un mot ayant deux ou plusieurs significations différentes.

En C, un tableau est une série d'éléments de données du même type qui sont stockés en mémoire de manière contiguë. Java a hérité de ce sens. Ce n'est pas la même chose qu'une liste ou un vecteur, car les tableaux sont plus basiques que ceux-ci.

Un vecteur est une construction mathématique définie comme un objet qui peut être ajouté à un autre objet du même type, ou être multiplié par un nombre réel (ou complexe) résultant en un autre vecteur du même type. Il possède également quelques autres propriétés très utiles.

Un vecteur a une dimension . C'est le nombre minimum de vecteurs différents qui doivent être combinés pour obtenir tous les vecteurs possibles de ce type. La vitesse et l'accélération sont des vecteurs tridimensionnels car l'espace a 3 directions de base et en ajoutant des multiples de ces trois directions de base, vous pouvez obtenir n'importe quelle position dans l'espace. La position dans un plan est un vecteur à deux dimensions et les nombres individuels sont des vecteurs à une dimension.

Une façon de représenter un vecteur de dimension n consiste à utiliser un tableau de n éléments, chacun représentant la quantité de chaque vecteur de base que vous devez ajouter pour accéder à votre vecteur.

Étant donné que vous pouvez représenter un vecteur à l'aide d'un tableau d'éléments, avec le temps, les deux concepts ont été équivalents. Donc, dans de nombreux endroits, ils sont tout simplement la même chose et dans certains langages, les tableaux sont appelés vecteurs.

Un autre cas où un mot a deux sens différents est, par exemple, la dimension . La définition wikipedia d'un vecteur comme un tableau à 1 dimension est un exemple. Vous ne parlez pas ici de dimension vectorielle. Vous parlez de la représentation informatique de la structure des données. Un vecteur tridimensionnel peut être représenté par un tableau "unidimensionnel" de taille 3. 3 nombres en ligne. Une matrice 3x3 peut être représentée par un tableau "bidimensionnel", ce que les programmeurs appellent un tableau de tableaux. Pourtant, une matrice 3x3 est aussi un vecteur mathématique de dimension 9 (car elle a toutes les propriétés d'un vecteur) et a 9 nombres. Confus, hein?

Quoi qu'il en soit, je pense que la réponse est simplement: ne vous inquiétez pas. Tout dépend du contexte. Les deux mots ont des origines différentes, mais dans le contexte des structures de données, quand ils disent vecteur, ils signifient exactement tableau .

Andre Manoel
la source
Je ne pense pas que ce soit vrai. Dans presque toute la documentation que j'ai parcourue sur Array implique une taille fixe, Vector implique que la structure peut être (mais pas nécessairement) dimensionnée dynamiquement. Les définitions mathématiques des termes sont incroyablement trompeuses dans le contexte de la programmation.
Chuu
-1

Les réponses ci-dessus décrivent pourquoi cette classe est différente d'un "tableau" - et je soupçonne que la raison pour laquelle un nom différent est utilisé est que les programmeurs sont aidés par un espace de noms bien organisé - en d'autres termes, si vous parlez d'un "vecteur", c'est clairement quelle classe vous voulez dire, alors que si toutes les classes similaires n'étaient que des tableaux, ce ne serait pas tout à fait clair.

adrianmcmenamin
la source
-1

Je pense que le terme "vecteur" vient du std :: vector de C ++. Il est apparu avant Java et C #.

Denis Gladkiy
la source
3
Veuillez (fortement) envisager d'ajouter une référence externe pour étayer votre opinion.
-1

C'est juste une édition bâclée.

Les premières versions de Java n'incluaient pas ArrayList. Au lieu d'ArrayList, Vector a été utilisé. ArrayList a été ajouté plus tard et est maintenant utilisé à la place de Vector dans la plupart des cas. Je suppose que le livre a été écrit avant l'ajout de ArrayList, et que lorsque le texte a été mis à jour, cette référence au vecteur ne l'était pas.

Je vous suggère d'éviter ce genre de livre «apprenez tout en dix minutes». En règle générale, ils sont écrits rapidement et avec négligence. Ce niveau de connaissances ne vous permettra pas d'obtenir un emploi dans un magasin sérieux.

Au lieu de cela, cherchez des livres bien évalués par des utilisateurs reconnus de la technologie couverte et lisez pour comprendre.

Kevin Cline
la source
1
"Les premières versions ... avaient"? Et c'est quoi java.util.Vector?
Rétablir Monica - M. Schröder
1
Obsolète est ce que java.util.Vector est. :-)
Brian Knoblauch
-1

Le terme vecteur vient de l'ingénierie / physique. Les vecteurs représentent des lignes bidimensionnelles et tridimensionnelles qui ont une direction. Par exemple, disons qu'un projectile a une vitesse horizontale de 20 m / s et une vitesse verticale de 10 m / s. Donc, vous représenteriez alors ceci comme (20,10). Il vole en quelque sorte en diagonale à droite, alors voyez maintenant comment les vecteurs de vitesse mathématique deviennent des tableaux alias vecteurs.

WebMonster
la source
-2

Nous n'appelons pas les vecteurs de tableaux, soit vous avez mal compris votre source, soit la source Java mal comprise, ou les deux.
Un tableau est une structure de données assez différente d'un vecteur, qui est à nouveau différent d'une liste (que votre code collé utilise).

Bien sûr, un vecteur mathématique pourrait être implémenté en Java en utilisant l'un des trois mécanismes, et sous le capot l'un ou l'autre ou le vecteur et la liste pourraient être implémentés en utilisant des tableaux.

jwenting
la source