PORQUE ES MEJOR TRABAJAR CON VECTORES Y NO CON MATRICES????

Iniciado por Inter-ard, 17 Julio 2013, 01:31 AM

0 Miembros y 1 Visitante están viendo este tema.

fehnet

Cita de: eferion en 17 Julio 2013, 11:16 AM
Un vector tiene una sola dimensión y una matriz tiene dos... dado que la memoria es lineal no pueden ser iguales.


voy a intentar poner un ejemplo...

int vector[2] = {1, 2}
int matriz[2][2] {1, 2, 3, 4};

Primer caso en la memoria
| 1 | 2 |

Segundo caso (matriz):
| 1 | 2 | 3 | 4 |

En el vector para acceder al segundo elemento se hace vector[1]

En la matriz para acceder al tercer elemento (3), se accede mediante matriz[1][0], pero realmente se almaena de forma lineal, y el compilador a partir de los subindices i, j, sabe cuantas posiciones tienen que avanzar a partir del primer elemento, es decir:

El desplazamiento es:
(i * número de elementos columna) + j



Oblivi0n

Depende del compilador se almacenan de forma lineal o no.

C# tiene un modo de definir las matrices para que se almacenen de forma lineal matriz[x,y].
Se ve clara la diferencia respecto a matriz
  • [y];

    Un vector es como antes se comentaba : int vector[2] = {1,2}

    Mientras que una matriz es int vector[2][2] = {{1,2},{3,4}};

    Es mas rapido trabajar con vectores principalmente porque producen menos fallos de pagina, y el acceso es ligeramente mas rapido.


amchacon

Cita de: Oblivi0n en 17 Julio 2013, 18:20 PM
Depende del compilador se almacenan de forma lineal o no.
Perdona pero no, cualquier compilador actual convierte tu matriz en un vector unidimensional. Por esa razón tienes que indicar el número de columnas cuandos pasas una matriz como parámetro a una función.

Otra cosa son las matrices "dinámicas" que creas con malloc/new. Se suelen hacer con un array de punteros (y ahí si hay perdida de rendimiento porque tienes que redireccionar dos veces).
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

eferion

Cita de: amchacon en 17 Julio 2013, 19:00 PM
Perdona pero no, cualquier compilador actual convierte tu matriz en un vector unidimensional. Por esa razón tienes que indicar el número de columnas cuandos pasas una matriz como parámetro a una función.

Otra cosa son las matrices "dinámicas" que creas con malloc/new. Se suelen hacer con un array de punteros (y ahí si hay perdida de rendimiento porque tienes que redireccionar dos veces).

eso mismo.

En concreto Oblivi0n, una matriz de .net tal que:

Código (csharp) [Seleccionar]
int[,] arr4 = new int [2,3] { {1,2,3}, {4,5,6} };

Reserva la memoria de forma lineal, no podía ser de otra forma, y tal que los elementos van en el siguiente orden: 1, 2, 3, 4, 5, 6 ... por tanto, para acceder a un elemento de la segunda fila necesitas hacer un salto... las matrices tienen tantos niveles de indirección como dimensiones posean.

Vector: 1 dimensión -> 1 nivel de indirección
Matriz típica: 2 dimensiones -> 2 niveles de indirección
...

ecfisa

Hola.

Siempre interpreté que las matrices se almacenan del modo que dice amchacon.

Row major order
Ordering of C++ Arrays

Saludos :)

aguml

pues en todos los libros que he leido por ejemplo esto: char cadena(5) =("hola"); (perdonen lo de los parentesis pero el movil no tiene corchetes ni nada parecido)  >:(  . Segun los libros eso es un array de caracteres o vector, o matriz unidimensional. Usan cualquiera de esas definiciones para referirse a eso. Ahora con lo que decis ya no se que pensar.

Caster

Un vector y un array unidimensional son lo mismo, una matriz es bidimensional.

flony

la matriz y un vector se leen igual sea el procesador que sea, y sea el compilador que sea, ahora la diferencia es que un vector es una matriz que tiene como particularidad que tiene  una sola fila...pero no por eso deja de ser una matriz, y las matrices en un compilador las lee como un vector ejem
Citar[1][1]; [1][2]........[m][n-1], [m][n]/quote]
para decirlo en criollo agarra la matriz y la deja hecha un vector con la particularidad de que deben decirse exactamente donde van
si un problema no tiene solucion entonces no es un problema...es algo inevitable