Мы можем представить две крайности:
- В одном крайнем случае вы предполагаете, что большая доля элементов отлична от нуля, поэтому вы просто сохраняете значение каждого отдельного элемента (без оптимизации для разреженности)не нужно хранить дополнительную информацию о расположении элементов и получить общий размер mn .
- С другой стороны, вы предполагаете, что небольшая доля элементов не равна нулюТаким образом, вы храните только ненулевые элементы, но теперь вам также необходимо сохранить их позиции (строки и столбцы) и получить общий размер 3 x (где x - это числоненулевые значения).
Йельский формат является компромиссом между этими двумя, где мы предполагаем, что число ненулевых элементов больше, чем число строк, 1 , но мало по сравнению собщее количество элементов;поэтому мы сохраняем указатель 2 для каждой строки, а затем сохраняем значение и позицию каждого элемента в его строке, давая общий размер m + 2 x .
Имея более двух измерений, вы можете продолжать идти на тот же компромисс;вам просто нужно выбрать правильное измерение или правильную комбинацию измерений, чтобы число ненулевых элементов было меньше, чем число строк / гиперстрок / и т. д.
Например, для m × n × p массив, проиндексированный ( i , j , k ), выиметь два варианта компромисса: 3
- Если ожидается, что число ненулевых элементов превысит небольшую долю mn ,но намного меньше, чем mnp , тогда для каждого i и j вы можете хранить указатель на одномерный «срез» элементов, которые имеют этот i и j .Для каждого ненулевого элемента в этом срезе вы сохраняете его значение и k для общего размера mn + 2 x .
- Если ожидается, что число ненулевых элементов будет больше, чем небольшая доля m , но намного меньше, чем mn , то для каждого i можно сохранитьуказатель на двумерный «фрагмент» элементов, которые имеют это i .Для каждого ненулевого элемента в этом срезе вы сохраняете его значение, j и k , для общего размера m + 3 x.
В более широком смысле, d -мерный массив будет иметь d -1 компромиссных опций.,,или всего 2 d опций, если вы учитываете каждый возможный выбор размеров отдельно.
Примечания:
- Я пишу здесь «строки», но вы также можете делать то же самое по столбцам.
- Не обязательно «указатель» в очень строгом смысле;вы можете просто сохранить общее количество всех ненулевых элементов во всех предыдущих строках.
- Не считая того факта, что вы можете использовать разные измерения;Если вы можете использовать формат Yale для строк или столбцов, вы можете использовать эти параметры для любого размера измерений.