Algoritmos y Estructura de Datos

Matrices poco densas Estáticas


Las matrices poco densas son aquellas en las que la mayoría de los elementos son cero. Es decir, hay pocas entradas no nulas en la matriz en comparación con el número total de entradas. Las matrices poco densas son comunes en aplicaciones en las que se representan grafos o redes, ya que muchos grafos tienen un número mucho mayor de vértices que de aristas.


Las matrices estáticas son aquellas que no cambian después de su creación. Es decir, una vez que se ha definido una matriz estática, no se pueden agregar ni eliminar entradas de ella. En cambio, las matrices dinámicas son aquellas que pueden cambiar durante la ejecución de un programa, agregando o eliminando entradas.


Para matrices poco densas estáticas, una forma eficiente de representarlas es mediante una matriz de adyacencia, en la que cada entrada representa una arista en el grafo. Esto permite un acceso rápido a cualquier entrada de la matriz mediante índices y es adecuado para grafos de tamaño mediano o pequeño. Sin embargo, para grafos muy grandes o con muchas aristas, puede ser más eficiente utilizar otras estructuras de datos, como listas de adyacencia.


A continuacion el codigo para c++:

                    
  1. #include <iostream>
  2. using namespace std;
  3. const int MAX_V = 100; // Número máximo de vértices
  4. // Estructura para almacenar una matriz de adyacencia
  5. struct MatrizAdyacencia {
  6. int V; // Número de vértices
  7. int E; // Número de aristas
  8. int matriz[MAX_V][MAX_V]; // Matriz de adyacencia
  9. // Constructor para inicializar la matriz
  10. MatrizAdyacencia(int V) {
  11. this->V = V;
  12. this->E = 0;
  13. for (int i = 0; i < V; i++) {
  14. for (int j = 0; j < V; j++) {
  15. matriz[i][j] = 0;
  16. }
  17. }
  18. }
  19. // Método para agregar una arista entre los vértices u y v con peso w
  20. void agregarArista(int u, int v, int w) {
  21. matriz[u][v] = w;
  22. E++;
  23. }
  24. // Método para obtener el peso de la arista entre los vértices u y v
  25. int obtenerPesoArista(int u, int v) {
  26. return matriz[u][v];
  27. }
  28. // Método para verificar si hay una arista entre los vértices u y v
  29. bool hayArista(int u, int v) {
  30. return matriz[u][v] != 0;
  31. }
  32. // Método para eliminar la arista entre los vértices u y v
  33. void eliminarArista(int u, int v) {
  34. matriz[u][v] = 0;
  35. E--;
  36. }
  37. // Método para obtener el grado de un vértice (es decir, el número de aristas que tienen
  38. un vértice como extremo)
  39. int obtenerGradoVertice(int v) {
  40. int grado = 0;
  41. for (int i = 0; i < V; i++) {
  42. if (matriz[v][i] != 0) grado++;
  43. if (matriz[i][v] != 0) grado++;
  44. }
  45. return grado;
  46. }
  47. };
  48. int main() {
  49. // Crear una matriz de adyacencia 4x4 para representar un grafo con 4 vértices
  50. MatrizAdyacencia matriz(4);
  51. // Agregar algunas aristas
  52. matriz.agregarArista(0, 1, 10);
  53. matriz.agregarArista(1, 2, 20);

Link de apoyo

  • Matriz poco densa regular
  • MATRICES POCO DENSAS - Metodos de Programación
  • MATRICES POCO DENSAS