Notas de clase: matrices multidimensionales, almacenamiento comprimido de matrices, tablas generalizadas

Tabla lineal: una secuencia finita de elementos de datos del mismo tipo.
Expanda los tipos de elementos:
matrices (multidimensionales): los elementos de datos en la tabla lineal pueden ser tablas lineales, pero todos los elementos tienen el mismo tipo.
Tabla generalizada: los elementos de datos en la tabla lineal pueden ser tablas lineales y los tipos de elementos pueden ser diferentes.
Definición de una matriz: una matriz es un conjunto ordenado de elementos de datos del mismo tipo, cada elemento está limitado por n (n ≥ 1) relaciones lineales, y la matriz se denomina matriz n-dimensional.
Las características de la matriz : el elemento en sí puede tener una determinada estructura y pertenecer al mismo tipo de datos; la matriz es una recopilación de datos con un formato y número fijos.
Generalizaciones de matrices de tablas lineales
Las matrices bidimensionales son tablas lineales cuyos elementos de datos son tablas lineales.
Operación básica de la matriz
1. Acceso: dado un conjunto de subíndices, lea los elementos de matriz correspondientes;
2. Modificar: dado un conjunto de subíndices, almacene o modifique los elementos de matriz correspondientes.
Las operaciones de acceso y modificación corresponden esencialmente a un solo tipo de matrices de direccionamiento de operaciones
que no tienen operaciones de inserción y eliminación, no necesitan reservar espacio y son adecuadas para el almacenamiento secuencial.
La estructura de almacenamiento y el direccionamiento de la
matriz
1. La matriz unidimensional establece el rango de subíndice de la matriz unidimensional en el intervalo cerrado [l, h], cada elemento de la matriz ocupa c unidades de almacenamiento, entonces la dirección de almacenamiento de cualquier elemento ai puede ser La fórmula se determina:
Loc (ai) = Loc (al) + (i-l) × c
Segundo, la matriz bidimensional
1, de acuerdo con el
conjunto de direccionamiento de fila de prioridad de almacenamiento, el número de fila de la matriz bidimensional es l1 a h1, el número de columna es l2 a h2.
El número de elementos delante de aij = el número de filas enteras × el número de elementos en cada línea + el número de elementos delante de aij en esta fila = (i -l1) × (h2 -l2 + 1) + (j -l2),
Loc (aij) = Loc (al1l2) + ((i-l1) × (h2-l2 + 1) + (j-l2)) × c
2. Direccionamiento para el almacenamiento de prioridad de columna
Establezca la matriz bidimensional en n filas ym columnas.
Deje que la matriz comience la posición de almacenamiento LOC (0, 0) = a, cada elemento ocupa 1 unidad de almacenamiento, luego la dirección de almacenamiento de a [i] [j]: LOC (i, j) = a + (j × n + i) × l
Conjunto tridimensional tridimensional
El número de elementos en cada dimensión es m1, m2, m3. Los subíndices de cada dimensión comienzan desde 0 y se almacenan en páginas / filas / columnas. La dirección de almacenamiento de los elementos del conjunto con subíndices i1, i2, i3:
LOC (i1, i2, i3) = a + (i1 × m2 × m3 + i2 × m3 + i3) × l
matriz de almacenamiento comprimido
Matriz especial: muchos elementos con el mismo valor en la matriz y su distribución tiene una cierta regularidad.
Matriz dispersa: hay muchos elementos cero en la matriz.
La idea básica del almacenamiento comprimido es: ⑴ asignar solo un espacio de almacenamiento para múltiples elementos con el mismo valor; ⑵ no asignar espacio de almacenamiento para cero elementos.
Almacenamiento de compresión de matriz especial
1.
Características de matriz simétrica : aij = aji
solo almacena los elementos de la parte triangular inferior.
Las filas y columnas están numeradas a partir de 1: el número de secuencia de aij en una matriz unidimensional = i × (i-1) / 2 + j, porque el subíndice de una matriz unidimensional comienza desde 0, por lo que el subíndice k de aij en una matriz unidimensional = i × (i-1) / 2 + j-1
Las filas y columnas están numeradas a partir de 0: el número de secuencia de aij en una matriz unidimensional = i × (i + 1) / 2 + j + 1, porque el subíndice de una matriz unidimensional comienza desde 0, entonces aij está debajo de la matriz unidimensional El índice k = i × (i + 1) / 2 + j
Para el elemento aij (i≥j) en el triángulo inferior, la relación entre el índice k e i, j en una matriz unidimensional es:
k = i × (i -1) / 2 + j-1.
El elemento aij en el triángulo superior (i <j), porque aij = aji, entonces puede acceder al elemento aji correspondiente, a saber: k = j × (j-1) / 2 + i -1.
2. La matriz triangular
almacena solo los elementos del triángulo superior (o triángulo inferior).
Almacenamiento: el elemento triangular inferior, solo una constante por encima de la diagonal.
Matriz triangular inferior
La relación correspondiente entre el subíndice k e i, j en una matriz unidimensional de cualquier elemento aij en la matriz:
k = i × (i-1) / 2 + j-1, cuando i≥j,
k = n × (n + 1) / 2, cuando i <j.
3. Matriz diagonal (matriz de cinta) Matriz
diagonal: todos los elementos distintos de cero se concentran en el área de la tira centrada en la diagonal principal, excepto la diagonal principal y el número de diagonales por encima y por debajo de ella. Excepto por el elemento, todos los demás elementos son cero.
Método de almacenamiento de compresión uno: método de matriz bidimensional
bts = aij, t = i-1, s = j-i + 1
utiliza una matriz unidimensional para almacenar elementos distintos de cero en la diagonal, con el orden de las filas como orden principal, aij La dirección k en una matriz unidimensional: k = 2i + j-3
El almacenamiento comprimido de
la matriz dispersa expresa cada elemento distinto de cero en la matriz dispersa como: (número de fila, número de columna, valor del elemento distinto de cero) -terno Grupo
define un triplete:

template <class T>
struct element
{
     int row, col;
     T item
};

Tabla de tríada: el conjunto de tripletes correspondientes a los elementos distintos de cero de la matriz dispersa se organiza en una tabla lineal en orden de prioridad de fila. Definición de estructura de almacenamiento de
tabla de secuencia de tríada
:

const int MaxTerm=100;     
template <class T>     
struct SparseMatrix     
{    T data[MaxTerm];
     int mu, nu, tu;
};


Lista de enlaces cruzados Definición de nodos de lista de enlaces cruzados

template<class T>
class OLNode
{
public:
    int row,col;  
    T element;  
    OLNode<T>*right,*down;
public:
    OLNode(){right=NULL;down=NULL;}
};

Tabla generalizada Tabla
generalizada (lista): una secuencia finita de n (≥0) elementos de la tabla, escrita como: LS = (a0, a1, a2, ..., an-1)
LS es el nombre de la tabla, ai es el elemento de la tabla, es Puede ser una tabla (llamada subtabla) o un elemento de datos (llamado átomo). n es la longitud de la tabla. La tabla generalizada con n = 0 es una tabla vacía.
El concepto básico de la
tabla generalizada Longitud: el número de elementos directos en la
tabla generalizada LS ; profundidad: el nivel máximo de anidamiento de paréntesis en la tabla generalizada LS.
Encabezado de la tabla: cuando la tabla generalizada LS no está vacía, el primer elemento se denomina encabezado del LS;
pie de página: la tabla generalizada compuesta por los elementos restantes, excepto el encabezado de la tabla generalizada LS.
La diferencia entre la tabla generalizada y la tabla lineal Los
componentes de la tabla lineal son elementos individuales estructuralmente inseparables. Los componentes de la tabla generalizada pueden ser elementos individuales o tablas estructuradas. La tabla lineal es una tabla generalizada especial. Debe ser una tabla lineal, no necesariamente una estructura lineal.
El funcionamiento básico de la tabla generalizada
(1) Encuentre el encabezado de la tabla GetHead (L): el primer elemento de la tabla generalizada no vacía, que puede ser un elemento único o una
subtabla (2) Encuentre la cola de la tabla GetTail (L): no Una tabla generalizada vacía es una tabla compuesta de elementos distintos del elemento de encabezado. El final de la tabla debe ser
el almacenamiento
de una tabla generalizada. Debido a que los tipos de elementos de datos en la tabla generalizada no son uniformes, es difícil almacenarlos en una estructura de almacenamiento secuencial.
Generalizada estructura de almacenamiento de tabla - de notación craneocaudal
nodos de tabla: memoria de tabla generalizada; elementos de unión: unidad de elemento de almacenamiento
definido estructura de unión

enum Elemtag {Atom, List};  
template <class T>
struct GLNode {
    Elemtag tag;     
    union {       
        T data;        
        struct        
        {
             GLNode *hp, *tp;        
        } ptr;                                 
    }; 
};

Las características de la tabla generalizada
son secuenciales (un predecesor directo y un sucesor directo),
tienen una longitud (= el número de elementos en la tabla), tienen una
profundidad (= el número de paréntesis en la tabla),
recursiva (puede ser su propia subtabla) y
pueden compartir (Puede ser compartido por otras tablas generalizadas)

48 artículos originales publicados · Me gusta 25 · Visita 2453

Supongo que te gusta

Origin blog.csdn.net/qq_43628959/article/details/102791312
Recomendado
Clasificación