Java - Por que chamamos uma matriz de "vetor"?

20

Estou lendo um livro sobre programação em Java e quero confirmar que entendi a definição da palavra "vetor". A Wikipedia diz que o vetor é "Uma matriz unidimensional", fonte http://en.wikipedia.org/wiki/Vector .

Não seria mais simples chamar a matriz simplesmente de matriz? Existe alguma razão pela qual precisamos usar uma linguagem sofisticada como "vetor"? Existe uma diferença entre uma matriz e um vetor?


insira a descrição da imagem aqui

Fonte: Cracking the Coding Interview, 4ª Edição, por Gayle McDowell, página 47.

Perguntas frequentes
P - Por que você não publicou isso em english.stackexchange.com?
A - Porque acho que apenas as pessoas orientadas para a ciência da computação terão uma boa resposta.

davidjhp
fonte
1
Vetores não são os mesmos que ArrayLists, principalmente devido à sincronização interna. Mais informações aqui: stackoverflow.com/questions/2986296/…
Jeroen Vannevel 5/13
Fora do tópico: O termo "vetor" não é usado apenas em Java. 1. A biblioteca C ++ possui std::vector<…>("matrizes" de tamanho dinâmico). 2. O CLR (.NET runtime) também distingue entre "matrizes" e "vetores", o último sendo um caso especial do primeiro, ou seja, unidimensional e baseado em zero). Essa distinção é importante porque há otimizações especiais para vetores. 3. Na matemática, um n- número de números reais também é chamado de "vetor".
stakx
1
@JeroenVannevel Acho que você fez a confusão entre a classe Vector e o conceito de vetor, que pode ser considerado como uma matriz unidimensional.
C.Champagne
OT, se você deseja receber respostas de pessoas da ciência da computação, por que postar aqui e não no cs.stackexchange? E por que a bandeira do java? Pelo que me lembro da minha aula de programação, há uma matriz e uma lista vinculada. Exceto pela matriz, os contêineres (vetor, lista, mapa, heap etc.) são implementados como lista vinculada.
Imel96
2
Por que chamamos um vetor de matriz?
M3th0dman 6/08/13

Respostas:

35

No uso típico, uma "matriz" pode significar uma matriz unidimensional ou uma matriz multidimensional. Além disso, em matemática, uma matriz é uma matriz bidimensional, enquanto um vetor é uma matriz unidimensional.

Greg Hewgill
fonte
8
Fora de tópico: em matemática, um "escalar" é uma matriz 0-dimensional?
stakx
6
@stakx: Sim, isso é exatamente correto. Normalmente, um escalar é apenas um escalar, ninguém o chamaria de "matriz 0-dimensional". Mas a ideia está certa.
precisa saber é o seguinte
2
É mais preciso dizer que todos são tensores. De Wolfram Mathworld: "Tensores são generalizações de escalares (que não têm índices), vetores (que possuem exatamente um índice) e matrizes (que possuem exatamente dois índices) para um número arbitrário de índices". (Rowland, Todd e Weisstein, Eric W. "Tensor". De MathWorld - A Wolfram Web Resource. Mathworld.wolfram.com/Tensor.html )
SOFe
Para o que vale, em matemática, um vetor não é uma matriz unidimensional. Um vetor é um elemento de um espaço vetorial, ou seja, um conjunto no qual os elementos podem ser adicionados e multiplicados por escalares.
mlainz 9/04
O espaço vetorial mais famoso é R ^ n, o conjunto de "matrizes" de números com adição e multiplicação por elementos. O conjunto de funções reais também é um espaço vetorial, mas geralmente as pessoas não pensam nas funções como matrizes. Uma matriz de caracteres não seria um espaço vetorial, pois não há uma escolha óbvia de adição e multiplicação. No jargão da matemática, uma matriz é uma tupla ou uma sequência finita. Consulte en.wikipedia.org/wiki/Vector_(mathematics_and_physics) para obter mais exemplos de tuplas que não são vetores.
mlainz 9/04
10

Vetores não são exatamente matrizes. Não clássicos de qualquer maneira. Eles são matrizes dinâmicas. Eles podem ser redimensionados conforme necessário, em vez de serem de tamanho fixo. Portanto, eles são semelhantes aos ArrayLists, mas não são iguais.

As ArrayLists diferem dos vetores, pois os vetores sincronizam operações individuais, algo que você não deseja para fins de simultaneidade, em particular por Jon Skeet . Assim, Vector foi preterido em favor de ArrayList, mas alguns ainda o chamam de Vector.

O nome é originalmente derivado do termo matemático para uma matriz unidimensional. Isso apesar da estrutura ser realmente uma n-tupla .

Engenheiro Mundial
fonte
2
Eu acho que você criou a confusão entre a classe Vector e o conceito de vetor, que pode ser considerado como uma matriz unidimensional, e nota nota específica para o Java.
C.Champagne
@ C.Champagne Ele usou um exemplo de Java e foi isso que eu dei a ele. Eu adicionei a definição para a construção matemática, que aliás também não é tecnicamente um "vetor".
World Engineer
2
Estou com @ C.Champagne. Se eles quisessem dizer Vector (a classe), o texto usaria um capitulo V. Eles usavam um v minúsculo que indica a definição clássica (não a classe) de um vetor.
Rig
Hum, vetores são chamados vetores em matemática . O que você quer dizer com "tecnicamente também não é um 'vetor'"?
Andrés F.
@AndresF. Um conjunto de números como uma matriz ou um "Vetor" seria uma n-tupla é o meu entendimento, porque é uma coleção discreta de valores.
World Engineer
4

Normalmente, vetor e matriz são a mesma coisa e são usados ​​de forma intercambiável na programação. Isso acontece na maioria dos lugares, então você não deve se preocupar muito com isso na maioria das vezes.

Dito isto, a linguagem é imprecisa e, às vezes, temos palavras que têm significados diferentes em contextos diferentes que acabam significando a mesma coisa, ou uma palavra com dois ou mais significados diferentes.

Em C, uma matriz é uma série de elementos de dados do mesmo tipo que são armazenados na memória de forma contígua. Java herdou esse significado. Não é o mesmo que uma Lista ou um Vetor, pois as matrizes são mais básicas que essas.

Um vetor é uma construção matemática definida como um objeto que pode ser adicionado a outro objeto do mesmo tipo ou multiplicado por qualquer número real (ou complexo), resultando em outro vetor do mesmo tipo. Também possui algumas outras propriedades que são muito úteis.

Um vetor tem dimensão . É o número mínimo de vetores diferentes que precisam ser combinados para obter todos os vetores possíveis desse tipo. Velocidade e aceleração são vetores tridimensionais porque o espaço tem três direções de base e, adicionando múltiplos dessas três direções de base, você pode obter qualquer posição no espaço. A posição em um plano é um vetor bidimensional e números individuais são vetores unidimensionais.

Uma maneira de representar um vetor de dimensão n é usar uma matriz de n elementos, cada um representando quanto de cada vetor base você precisa adicionar para chegar ao seu vetor.

Como você pode representar um vetor usando uma matriz de elementos, com o tempo, os dois conceitos foram equacionados. Então, em muitos lugares, eles simplesmente são a mesma coisa e, em alguns idiomas, matrizes são chamadas vetores.

Outro caso em que uma palavra tem dois significados diferentes é, por exemplo, dimensão . A definição da Wikipedia de um vetor como uma matriz unidimensional é um exemplo. Você não está falando da dimensão vetorial aqui. Você está falando sobre a representação por computador da estrutura de dados. Um vetor tridimensional pode ser representado por uma matriz "unidimensional" do tamanho 3. 3 números na linha. Uma matriz 3x3 pode ser representada por uma matriz "bidimensional", que é o que os programadores chamam de matriz de matrizes. No entanto, uma matriz 3x3 também é um vetor matemático da dimensão 9 (já que possui todas as propriedades de um vetor) e possui 9 números. Confuso, não é?

Enfim, acho que a resposta é simples: não se preocupe. Tudo depende do contexto. As duas palavras têm origens diferentes, mas no contexto das estruturas de dados, quando dizem vetor, elas significam exatamente matriz .

Andre Manoel
fonte
Eu não acho que isso seja verdade. Em quase toda a documentação que eu corri pela Matriz implica tamanho fixo, Vector implica que a estrutura pode ser (mas não necessariamente é) dimensionada dinamicamente. As definições matemáticas dos termos são incrivelmente enganosas no contexto da programação.
Chuu 30/05
-1

As respostas acima descrevem por que essa classe é diferente de uma "Matriz" - e eu suspeito que o motivo de um nome diferente ser usado é porque os programadores são ajudados por ter um espaço para nome bem organizado - em outras palavras, se você falar sobre um "Vetor", é esclareça exatamente qual classe você quer dizer, embora se todas as classes semelhantes fossem meramente matrizes, isso não seria totalmente claro.

adrianmcmenamin
fonte
-1

Eu acho que o termo "vetor" veio do std :: vector do C ++. Apareceu antes de Java e C #.

Denis Gladkiy
fonte
3
Por favor, considere adicionar uma referência externa para apoiar sua opinião.
-1

É apenas uma edição desleixada.

As versões anteriores do Java não incluíam ArrayList. Em vez de ArrayList, Vector foi usado. ArrayList foi adicionado mais tarde e agora é usado em vez de Vector para a maioria dos propósitos. Espero que o livro tenha sido escrito antes da adição de ArrayList e que, quando o texto foi atualizado, essa referência ao vetor não era.

Sugiro que você evite esse tipo de livro "aprenda tudo em dez minutos". Geralmente eles são escritos de forma rápida e desleixada. Esse nível de conhecimento não garante um emprego em uma loja séria.

Em vez disso, procure livros bem revisados ​​por usuários reconhecidos da tecnologia abordada e lidos para entender.

Kevin Cline
fonte
1
"As primeiras versões ... tinham"? E o que é java.util.Vector?
Reinstate Monica - M. Schröder (
1
Preterido é o que é java.util.Vector. :-)
Brian Knoblauch 08/08
-1

O termo vetor vem de engenharia / física. Os vetores representam linhas dimensionais 2 e 3 que têm uma direção. Por exemplo, digamos que um projétil tenha velocidade horizontal de 20 m / se velocidade vertical de 10 m / s. Então você representaria isso como (20,10). Está voando na diagonal direita, agora veja como os vetores de velocidade matematicamente se tornam matrizes, também conhecidos como vetores.

WebMonster
fonte
-2

Nós não chamamos vetores de matrizes, você entendeu mal sua fonte ou a fonte não entendeu Java, ou ambos.
Uma matriz é uma estrutura de dados bastante diferente de um Vector, que é diferente de uma Lista novamente (que seu código colado usa).

É claro que um vetor matemático poderia ser implementado em Java usando um dos três mecanismos, e sob o capô um ou ambos, o Vector e a Lista, poderiam ser implementados usando matrizes.

jwenting
fonte