Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Inter-ard en 17 Julio 2013, 01:31 am



Título: PORQUE ES MEJOR TRABAJAR CON VECTORES Y NO CON MATRICES????
Publicado por: Inter-ard en 17 Julio 2013, 01:31 am
trabaje un proyecto con vectores, pero quisiera saber porque es mas dificil con matrices?, yo matrices de verdad que no entendi.


Título: Re: PORQUE ES MEJOR TRABAJAR CON VECTORES Y NO CON MATRICES????
Publicado por: amchacon en 17 Julio 2013, 02:04 am
¿Ein?

Eso dependerá del proyecto en cuestión, y por supuesto la dificultad es siempre subjetiva.


Título: Re: PORQUE ES MEJOR TRABAJAR CON VECTORES Y NO CON MATRICES????
Publicado por: Inter-ard en 17 Julio 2013, 02:23 am
si, pero cual es la razon por la que la matriz es mas complicada?


Título: Re: PORQUE ES MEJOR TRABAJAR CON VECTORES Y NO CON MATRICES????
Publicado por: amchacon en 17 Julio 2013, 02:43 am
si, pero cual es la razon por la que la matriz es mas complicada?
No tiene ninguna complicación  :huh:


Título: Re: PORQUE ES MEJOR TRABAJAR CON VECTORES Y NO CON MATRICES????
Publicado por: Oblivi0n en 17 Julio 2013, 02:44 am
Los accesos a memoria en un vector son consecutivos (mas rapidos), en una matriz no.



Título: Re: PORQUE ES MEJOR TRABAJAR CON VECTORES Y NO CON MATRICES????
Publicado por: Inter-ard en 17 Julio 2013, 03:17 am
gracias por esas respuestas, es que fue de un ensayo para el cual me estoy preparando


Título: Re: PORQUE ES MEJOR TRABAJAR CON VECTORES Y NO CON MATRICES????
Publicado por: Inter-ard en 17 Julio 2013, 05:13 am
quien mas me puede comentar algo :huh: :huh: :huh: :huh:


Título: Re: PORQUE ES MEJOR TRABAJAR CON VECTORES Y NO CON MATRICES????
Publicado por: fehnet en 17 Julio 2013, 11:06 am
Los accesos a memoria en un vector son consecutivos (mas rapidos), en una matriz no.



El acceso a una matriz es exactamente igual al que se usa para acceder a un vector, los dos se almacenan como una matriz unidimensional y se accede a cada elemento a partir de un desplazamiento desde el primer elemento. No entiendo por qué dices que el acceso no es el mismo.


Título: Re: PORQUE ES MEJOR TRABAJAR CON VECTORES Y NO CON MATRICES????
Publicado por: aguml en 17 Julio 2013, 11:12 am
Pues yo tenia entendido que un vector y una matriz son exactamente lo mismo  :huh:


Título: Re: PORQUE ES MEJOR TRABAJAR CON VECTORES Y NO CON MATRICES????
Publicado por: eferion en 17 Julio 2013, 11:16 am
Pues yo tenia entendido que un vector y una matriz son exactamente lo mismo  :huh:

Un vector tiene una sola dimensión y una matriz tiene dos... dado que la memoria es lineal no pueden ser iguales.


Título: Re: PORQUE ES MEJOR TRABAJAR CON VECTORES Y NO CON MATRICES????
Publicado por: fehnet en 17 Julio 2013, 11:26 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




Título: Re: PORQUE ES MEJOR TRABAJAR CON VECTORES Y NO CON MATRICES????
Publicado por: Oblivi0n en 17 Julio 2013, 18:20 pm
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.



Título: Re: PORQUE ES MEJOR TRABAJAR CON VECTORES Y NO CON MATRICES????
Publicado por: amchacon en 17 Julio 2013, 19:00 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).


Título: Re: PORQUE ES MEJOR TRABAJAR CON VECTORES Y NO CON MATRICES????
Publicado por: eferion en 17 Julio 2013, 19:16 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
  1. 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
...


Título: Re: PORQUE ES MEJOR TRABAJAR CON VECTORES Y NO CON MATRICES????
Publicado por: ecfisa en 17 Julio 2013, 19:20 pm
Hola.

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

Row major order (http://en.wikipedia.org/wiki/Row-major_order)
Ordering of C++ Arrays (http://msdn.microsoft.com/en-us/library/8ccd1wzb%28v=vs.80%29.aspx)

Saludos :)


Título: Re: PORQUE ES MEJOR TRABAJAR CON VECTORES Y NO CON MATRICES????
Publicado por: aguml en 20 Julio 2013, 02:46 am
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.


Título: Re: PORQUE ES MEJOR TRABAJAR CON VECTORES Y NO CON MATRICES????
Publicado por: Caster en 20 Julio 2013, 02:48 am
Un vector y un array unidimensional son lo mismo, una matriz es bidimensional.


Título: Re: PORQUE ES MEJOR TRABAJAR CON VECTORES Y NO CON MATRICES????
Publicado por: flony en 21 Julio 2013, 02:32 am
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