Java - dlaczego nazywamy tablicę „wektorem”?

20

Czytam książkę o programowaniu w Javie i chcę potwierdzić, że rozumiem definicję słowa „wektor”. Wikipedia twierdzi, że wektor to „jednowymiarowa tablica”, źródło http://en.wikipedia.org/wiki/Vector .

Czy nie byłoby łatwiej nazwać tablicę po prostu tablicą? Czy jest jakiś powód, dla którego potrzebujemy używać tak wymyślnego języka jak „wektor”? Czy istnieje różnica między tablicą a wektorem?


wprowadź opis zdjęcia tutaj

Źródło: Cracking the Coding Interview, wydanie 4, Gayle McDowell, strona 47.

FAQ
P - Dlaczego nie opublikowałeś tego na polish.stackexchange.com?
Odp .: Ponieważ uważam, że tylko ludzie zorientowani na informatykę będą mieli dobrą odpowiedź.

davidjhp
źródło
1
Wektory nie są takie same jak ArrayLists, a mianowicie z powodu wbudowanej synchronizacji. Więcej informacji tutaj: stackoverflow.com/questions/2986296/…
Jeroen Vannevel,
Off-topic: Termin „wektor” nie jest używany tylko w Javie. 1. Biblioteka C ++ ma std::vector<…>(„tablice” o dynamicznym rozmiarze). 2. CLR (środowisko uruchomieniowe .NET) rozróżnia również „tablice” i „wektory”, przy czym ten ostatni jest szczególnym przypadkiem tych pierwszych, mianowicie jednowymiarowych, opartych na zerach. To rozróżnienie jest ważne, ponieważ istnieją specjalne optymalizacje dla wektorów. 3. W matematyce n- liczba liczb rzeczywistych jest czasami nazywana „wektorem”.
stakx
1
@JeroenVannevel Myślę, że wprowadziłeś zamieszanie między klasą Vector a koncepcją wektora, którą można uznać za tablicę jednowymiarową.
C.Champagne
OT, jeśli chcesz odpowiedzi od informatyków, po co pisać tutaj, a nie na cs.stackexchange? A dlaczego flaga Java? Z tego, co pamiętam z mojej klasy programistycznej, jest tablica, a następnie lista połączona. Z wyjątkiem tablicy, kontenery (wektor, lista, mapa, sterta itp.) Są implementowane jako lista połączona.
imel96
2
Dlaczego nazywamy wektor tablicą?
m3th0dman,

Odpowiedzi:

35

W typowym zastosowaniu „tablica” może oznaczać tablicę jednowymiarową lub tablicę wielowymiarową. Ponadto, w matematyce, A macierz jest 2-wymiarową tablicę podczas gdy wektor jest 1-wymiarową macierz.

Greg Hewgill
źródło
8
Off-topic: Czy w matematyce „skalar” jest macierzą 0-wymiarową?
stakx
6
@stakx: Tak, dokładnie tak. Zwykle skalar to po prostu skalar, nikt tak naprawdę nie nazwałby go „macierzą 0-wymiarową”. Ale pomysł jest słuszny.
Greg Hewgill
2
Dokładniej jest powiedzieć, że wszystkie są tensorami. Z Wolfram Mathworld: „Tensory to uogólnienia skalarów (które nie mają indeksów), wektorów (które mają dokładnie jeden indeks) i macierzy (które mają dokładnie dwa indeksy) do dowolnej liczby indeksów”. (Rowland, Todd i Weisstein, Eric W. „Tensor.” From MathWorld - A Wolfram Web Resource. Mathworld.wolfram.com/Tensor.html )
SOFe
Co jest warte, w matematyce wektor nie jest tablicą jednowymiarową. Wektor jest elementem przestrzeni wektorowej, to znaczy zbiorem, w którym elementy mogą być dodawane i mnożone przez skalary.
mlainz
Najbardziej znaną przestrzenią wektorową jest R ^ n, zbiór „tablic” liczb z dodawaniem i mnożeniem elementów. Zbiór funkcji rzeczywistych jest również przestrzenią wektorową, ale zwykle ludzie nie uważają funkcji za tablice. Tablica znaków nie byłaby przestrzenią wektorową, ponieważ nie ma oczywistego wyboru dodawania i mnożenia. W żargonie matematycznym tablica jest krotką lub skończoną sekwencją. Zobacz en.wikipedia.org/wiki/Vector_(mathematics_and_physics), aby uzyskać więcej przykładów krotek, które nie są wektorami.
mlainz
10

Wektory nie są dokładnie tablicami. W każdym razie nie klasyczne. Są to tablice dynamiczne. Można je zmieniać w razie potrzeby, zamiast mieć stały rozmiar. Są zatem podobne do ArrayLists, ale nie do końca takie same.

ArrayLists różnią się od wektorów tym, że wektory synchronizują poszczególne operacje, co nie jest potrzebne do celów współbieżności, w szczególności dla Jona Skeeta . Dlatego Vector został wycofany na korzyść ArrayList, ale niektórzy nadal nazywają go Vector.

Nazwę pierwotnie pochodzi od terminu matematycznego na matrycy 1 wymiarów. Dzieje się tak pomimo tego, że struktura faktycznie jest n-krotką .

Inżynier świata
źródło
2
Myślę, że wprowadziłeś zamieszanie między klasą Vector a koncepcją wektora, którą można uznać za tablicę jednowymiarową i notatkę specyficzną dla Javy.
C.Champagne
@ C.Champagne Użył przykładu Java, więc mu to dałem. Dodałem definicję konstrukcji matematycznej, która, nawiasem mówiąc, nie jest technicznie „wektorem”.
Inżynier światowy,
2
Jestem z @ C.Champagne. Gdyby mieli na myśli Vector (klasę), tekst użyłby wielkich liter V. Użyli małej litery v, która wskazuje klasyczną (nie klasową) definicję wektora.
Rig
Um, wektory nazywane są wektory w matematyce . Co masz na myśli mówiąc, że „nie jest to technicznie” wektor?
Andres F.,
@AndresF. Rozumiem, że zestaw liczb takich jak tablica lub „Wektor” byłby n-krotką, ponieważ jest to dyskretny zbiór wartości.
Inżynier świata
4

Zwykle wektor i tablica są tym samym i są używane zamiennie podczas programowania. Tak jest w większości miejsc, więc przez większość czasu nie powinieneś się tym przejmować.

To powiedziawszy, język jest nieprecyzyjny i czasami mamy słowa, które mają różne znaczenia w różnych kontekstach, które ostatecznie oznaczają to samo lub jedno słowo mające dwa lub więcej różnych znaczeń.

W C tablica to seria elementów danych tego samego typu, które są przechowywane w pamięci w sposób ciągły. Java odziedziczyła to znaczenie. To nie to samo, co lista lub wektor, ponieważ tablice są bardziej podstawowe niż te.

Wektor jest konstrukt matematyczny określa się jako obiekt, który może być dodany do innego obiektu tego samego typu lub może być pomnożony przez dowolny rzeczywistym (lub kompleks) liczby w wyniku innego wektora samego typu. Ma także kilka innych właściwości, które są bardzo przydatne.

Wektor ma wymiar . Jest to minimalna liczba różnych wektorów, które należy połączyć, aby uzyskać każdy możliwy wektor tego typu. Prędkość i przyspieszenie są wektorami trójwymiarowymi, ponieważ przestrzeń ma 3 kierunki podstawowe, a poprzez dodanie wielokrotności tych trzech kierunków podstawowych można uzyskać dowolną pozycję w przestrzeni. Pozycja w płaszczyźnie to wektor dwuwymiarowy, a poszczególne liczby to wektory jednowymiarowe.

Jednym ze sposobów przedstawienia wektora wymiaru n jest użycie tablicy n elementów, z których każdy reprezentuje ile każdego wektora bazowego należy dodać, aby dostać się do wektora.

Ponieważ można przedstawić wektor za pomocą tablicy elementów, z czasem oba pojęcia zostały zrównane. W wielu miejscach są po prostu tym samym, aw niektórych językach tablice nazywane są wektorami.

Innym przypadkiem, w którym jedno słowo ma dwa różne znaczenia, jest na przykład wymiar . Przykładem jest definicja Wikipedii wektora jako tablicy jednowymiarowej. Nie chodzi tu o wymiar wektorowy. Mówisz o komputerowej reprezentacji struktury danych. Trójwymiarowy wektor może być reprezentowany przez „1-wymiarową” tablicę o rozmiarze 3. 3 cyfry w linii. Macierz 3x3 może być reprezentowana przez tablicę „2-wymiarową”, którą programiści nazywają tablicą tablic. Jednak macierz 3x3 jest również matematycznym wektorem wymiaru 9 (ponieważ ma wszystkie właściwości wektora) i ma 9 liczb. Mylące, co?

W każdym razie myślę, że odpowiedź jest prosta: nie martw się. Wszystko zależy od kontekstu. Te dwa słowa mają różne pochodzenie, ale w kontekście struktur danych, gdy mówią wektor , oznaczają dokładnie tablicę .

Andre Manoel
źródło
Nie sądzę, że to prawda. W prawie całej dokumentacji, z którą natknąłem się na Array, wynika stały rozmiar, Vector oznacza, że ​​struktura może być (ale niekoniecznie jest) dynamicznie zmieniana. Matematyczne definicje terminów są niezwykle mylące w kontekście programowania.
Chuu
-1

Powyższe odpowiedzi opisują, dlaczego ta klasa różni się od „Array” - i podejrzewam, że powodem użycia innej nazwy jest to, że programistom pomaga dobrze zorganizowana przestrzeń nazw - innymi słowy, jeśli mówimy o „Vector”, to jest to wyjaśnij dokładnie, co masz na myśli, podczas gdy gdyby wszystkie podobne klasy były jedynie tablicami, nie byłoby to w pełni jasne.

adrianmcmenamin
źródło
-1

Myślę, że termin „wektor” pochodzi od std :: vector C ++. Pojawił się przed Javą i C #.

Denis Gladkiy
źródło
3
(Zdecydowanie) zastanów się nad dodaniem zewnętrznego odniesienia w celu utworzenia kopii zapasowej swojej opinii.
-1

To tylko niechlujna edycja.

Wczesne wersje Java nie zawierały ArrayList. Zamiast ArrayList zastosowano Vector. ArrayList został dodany później i dla większości celów jest teraz używany zamiast Vector. Oczekuję, że książka została napisana przed dodaniem ArrayList i że kiedy tekst został zaktualizowany, to odniesienie do wektora nie było.

Sugeruję unikanie tego rodzaju książki „naucz się wszystkiego za dziesięć minut”. Zasadniczo są one pisane szybko i niechlujnie. Ten poziom wiedzy nie zapewni ci pracy w poważnym sklepie.

Zamiast tego poszukaj dobrze recenzowanych książek uznanych użytkowników danej technologii i przeczytaj je dla zrozumienia.

Kevin Cline
źródło
1
„Wczesne wersje… miały”? A co to jest java.util.Vector?
Przywróć Monikę - M. Schröder
1
Przestarzałe jest to, co java.util.Vector. :-)
Brian Knoblauch,
-1

Termin wektor pochodzi z inżynierii / fizyki. Wektory reprezentują linie 2 i 3 wymiarowe, które mają kierunek. Załóżmy na przykład, że pocisk ma prędkość poziomą 20 m / s i prędkość pionową 10 m / s. Zatem przedstawilibyśmy to jako (20,10). Leci w pewnym sensie po przekątnej w prawo, więc zobaczmy teraz, jak wektory prędkości matematycznych stają się tablicami, czyli wektorami.

WebMonster
źródło
-2

Nie nazywamy wektorów tablic, ani źle zrozumiałeś swoje źródło, ani źródło źle zrozumiał Javę, albo jedno i drugie.
Tablica jest zupełnie inną strukturą danych niż Vector, która różni się ponownie od Listy (której używa wklejony kod).

Oczywiście wektor matematyczny może być zaimplementowany w Javie za pomocą jednego z trzech mechanizmów, a pod maską można zastosować zarówno Vector, jak i Listę za pomocą tablic.

jwenting
źródło