Java - ¿Por qué llamamos a una matriz un "vector"?

20

Estoy leyendo un libro sobre Programación Java y quiero confirmar que entiendo la definición de la palabra "vector". Wikipedia dice que el vector es "Una matriz unidimensional", fuente http://en.wikipedia.org/wiki/Vector .

¿No sería más simple llamar a la matriz simplemente una matriz? ¿Hay alguna razón por la que necesitemos usar un lenguaje tan sofisticado como "vector"? ¿Hay alguna diferencia entre una matriz y un vector?


ingrese la descripción de la imagen aquí

Fuente: Cracking the Coding Interview, cuarta edición, por Gayle McDowell, página 47.

FAQ
Q - ¿Por qué no publicaste esto en english.stackexchange.com?
R - Porque creo que solo las personas orientadas a la informática tendrán una buena respuesta.

davidjhp
fuente
1
Los vectores no son lo mismo que ArrayLists, principalmente debido a la sincronización incorporada. Más información aquí: stackoverflow.com/questions/2986296/…
Jeroen Vannevel
Fuera de tema: el término "vector" no solo se usa en Java. 1. La biblioteca C ++ tiene std::vector<…>("matrices" de tamaño dinámico). 2. El CLR (.NET runtime) también distingue entre "matrices" y "vectores", siendo este último un caso especial del primero, es decir, unidimensionales, basados ​​en cero). Esa distinción es importante porque hay optimizaciones especiales para los vectores. 3. En matemáticas, una n -tupla de números reales también a veces se llama "vector".
stakx
1
@JeroenVannevel Creo que creó la confusión entre la clase Vector y el concepto de vector que puede considerarse como una matriz unidimensional.
C.Champagne
OT, si quieres una respuesta de la gente de informática, ¿por qué publicar aquí y no en cs.stackexchange? ¿Y por qué la bandera de Java? Por lo que recuerdo de mi clase de programación, hay una matriz y luego hay una lista vinculada. A excepción de la matriz, los contenedores (vector, lista, mapa, montón, etc.) se implementan como una lista vinculada.
imel96
2
¿Por qué llamamos a un vector matriz?
m3th0dman

Respuestas:

35

En el uso típico, una "matriz" puede significar una matriz unidimensional o una matriz multidimensional. Además, en matemáticas, una matriz es una matriz bidimensional, mientras que un vector es una matriz unidimensional.

Greg Hewgill
fuente
8
Fuera de tema: en matemáticas, ¿es un "escalar" una matriz de 0 dimensiones?
stakx
66
@stakx: Sí, eso es exactamente correcto. Por lo general, un escalar es solo un escalar, en realidad nadie lo llamaría "matriz de 0 dimensiones". Pero la idea es correcta.
Greg Hewgill
2
Es más exacto decir que todos son tensores. De Wolfram Mathworld: "Los tensores son generalizaciones de escalares (que no tienen índices), vectores (que tienen exactamente un índice) y matrices (que tienen exactamente dos índices) a un número arbitrario de índices". (Rowland, Todd y Weisstein, Eric W. "Tensor". De MathWorld - A Wolfram Web Resource. Mathworld.wolfram.com/Tensor.html )
SOFe
Por lo que vale, en matemáticas un vector no es una matriz unidimensional. Un vector es un elemento de un espacio vectorial, es decir, un conjunto en el que los elementos se pueden agregar y multiplicar por escalares.
mlainz
El espacio vectorial más famoso es R ^ n, el conjunto de "matrices" de números con suma y multiplicación por elementos. El conjunto de funciones reales también es un espacio vectorial, pero generalmente las personas no piensan en las funciones como matrices. Una matriz de caracteres no sería un espacio vectorial, ya que no hay una elección obvia de suma y multiplicación. En la jerga matemática, una matriz es una tupla o una secuencia finita. Ver en.wikipedia.org/wiki/Vector_(mathematics_and_physics) para más ejemplos de tuplas que no son vectores.
mlainz
10

Los vectores no son exactamente matrices. No los clásicos de todos modos. Son matrices dinámicas. Se pueden cambiar de tamaño según sea necesario en lugar de ser de un tamaño fijo. Por lo tanto, son similares a ArrayLists pero no son exactamente lo mismo.

Las listas de matrices difieren de los vectores en que los vectores sincronizan operaciones individuales, que es algo que no desea para propósitos de concurrencia, en particular según Jon Skeet . Por lo tanto, Vector ha quedado en desuso a favor de ArrayList, pero algunos todavía lo llaman Vector.

El nombre se deriva originalmente del término matemático para una matriz unidimensional. Esto a pesar de que la estructura en realidad es una n-tupla .

Ingeniero mundial
fuente
2
Creo que usted creó la confusión entre la clase Vector y el concepto de vector que puede considerarse como una matriz unidimensional y es una nota específica para Java.
C.Champagne
@ C.Champagne Usó un ejemplo de Java, así que eso es lo que le di. He agregado la definición para la construcción matemática, que por cierto tampoco es técnicamente un "vector".
Ingeniero mundial
2
Estoy con @ C.Champagne. Si se referían a Vector (la clase), el texto habría usado un límite V. Usaron una v minúscula que indica la definición clásica (no la clase) de un vector.
Plataforma
Um, los vectores se llaman vectores en matemáticas . ¿Qué quieres decir con "técnicamente tampoco es un" vector "?
Andres F.
@AndresF. Un conjunto de números como una matriz o un "Vector" sería una n-tupla, según tengo entendido, porque es una colección discreta de valores.
Ingeniero mundial el
4

Por lo general, vector y matriz son lo mismo y se usan indistintamente cuando se programa. Eso es en la mayoría de los lugares, por lo que no debe preocuparse mucho por eso la mayor parte del tiempo.

Dicho esto, el lenguaje es impreciso y a veces tenemos palabras que tienen diferentes significados en diferentes contextos que terminan significando lo mismo, o una palabra que tiene dos o más significados diferentes.

En C, una matriz es una serie de elementos de datos del mismo tipo que se almacenan en la memoria de forma contigua. Java heredó ese significado. No es lo mismo que una Lista o un Vector, ya que las matrices son más básicas que esas.

Un vector es una construcción matemática definida como un objeto que puede agregarse a otro objeto del mismo tipo o multiplicarse por cualquier número real (o complejo) que resulte en otro vector del mismo tipo. También tiene algunas otras propiedades que son muy útiles.

Un vector tiene dimensión . Es el número mínimo de vectores diferentes que deben combinarse para obtener todos los vectores posibles de ese tipo. La velocidad y la aceleración son vectores tridimensionales porque el espacio tiene 3 direcciones de base y al agregar múltiplos de esas tres direcciones de base puede obtener cualquier posición en el espacio. La posición en un plano es un vector bidimensional, y los números individuales son vectores unidimensionales.

Una forma de representar un vector de dimensión n es mediante el uso de una matriz de n elementos, cada uno de los cuales representa la cantidad de cada vector base que debe agregar para llegar a su vector.

Como puede representar un vector usando una matriz de elementos, con el tiempo, los dos conceptos se equipararon. Entonces, en muchos lugares, simplemente son lo mismo y en algunos idiomas las matrices se llaman vectores.

Otro caso en el que una palabra tiene dos significados diferentes es, por ejemplo, dimensión . La definición de Wikipedia de un vector como una matriz unidimensional es un ejemplo. No estás hablando de dimensión vectorial aquí. Estás hablando de la representación por computadora de la estructura de datos. Un vector tridimensional se puede representar mediante una matriz "1-dimensional" de tamaño 3. 3 números en línea. Una matriz 3x3 puede representarse mediante una matriz "bidimensional", que es lo que los programadores llaman una matriz de matrices. Sin embargo, una matriz 3x3 también es un vector matemático de dimensión 9 (ya que tiene todas las propiedades de un vector) y tiene 9 números. Confuso, ¿eh?

De todos modos, creo que la respuesta es simplemente: no te preocupes. Todo depende del contexto. Las dos palabras tienen orígenes diferentes, pero en el contexto de las estructuras de datos, cuando dicen vector significan exactamente matriz .

Andre Manoel
fuente
No creo que esto sea cierto. En casi toda la documentación que he encontrado en Array implica un tamaño fijo, Vector implica que la estructura puede ser (pero no necesariamente) de tamaño dinámico. Las definiciones matemáticas de los términos son increíblemente engañosas en el contexto de la programación.
Chuu
-1

Las respuestas anteriores describen por qué esta clase es diferente de una "matriz", y sospecho que la razón por la que se usa un nombre diferente es porque los programadores reciben ayuda al tener un espacio de nombres bien organizado, en otras palabras, si se habla de un "Vector" es aclare exactamente a qué clase se refiere, mientras que si todas las clases similares fueran simplemente matrices, entonces no sería completamente claro.

adrianmcmenamin
fuente
-1

Creo que el término "vector" vino de std :: vector de C ++. Apareció antes de Java y C #.

Denis Gladkiy
fuente
3
Por favor (fuertemente) considere agregar una referencia externa para respaldar su opinión.
-1

Es solo una edición descuidada.

Las primeras versiones de Java no incluían ArrayList. En lugar de ArrayList, se usó Vector. ArrayList se agregó más tarde y ahora se usa en lugar de Vector para la mayoría de los propósitos. Espero que el libro se haya escrito antes de agregar ArrayList, y que cuando se actualizó el texto, esta referencia al vector no.

Le sugiero que evite este tipo de libro "aprenda todo en diez minutos". Generalmente se escriben de manera rápida y descuidada. Este nivel de conocimiento no le conseguirá un trabajo en una tienda seria.

En su lugar, busque libros bien revisados ​​por usuarios reconocidos de la tecnología cubierta y lea para comprender.

Kevin Cline
fuente
1
¿"Las primeras versiones ... tenían"? Y lo que es java.util.Vector?
Restablece a Monica - M. Schröder
1
En desuso es lo que es java.util.Vector. :-)
Brian Knoblauch
-1

El término vector proviene de ingeniería / física. Los vectores representan líneas de 2 y 3 dimensiones que tienen una dirección. Por ejemplo, supongamos que un proyectil tiene una velocidad horizontal de 20 m / sy una velocidad vertical de 10 m / s. Entonces representaría esto como (20,10). Está volando en una especie de diagonal a la derecha, así que ahora vea cómo los vectores de velocidad matemática se convierten en matrices, también conocidos como vectores.

WebMonster
fuente
-2

No llamamos vectores de matrices, ya sea que haya entendido mal su fuente o que la fuente haya entendido mal Java, o ambos.
Una matriz es una estructura de datos bastante diferente de un Vector, que es diferente de una Lista nuevamente (que utiliza su código pegado).

Por supuesto, un vector matemático podría implementarse en Java usando cualquiera de los tres mecanismos, y bajo el capó cualquiera o ambos, el Vector y la Lista, podrían implementarse usando matrices.

jwenting
fuente