Формат файла, который вы указали для плотной матрицы. Матрица 10х10 с 100 элементами плотная. Разреженная матрица имеет меньше чем n * m элементов, и все «отсутствующие» элементы предполагаются равными 0. Смысл этого в том, чтобы матрицы, которые почти все равны нулю (что происходит во многих приложениях), будут использовать меньше пространство. Но использование формата разреженной матрицы для хранения плотной матрицы потребует гораздо больше места, чем простой массив.
Один распространенный формат файла с разреженной матрицей называется MatrixMarket и выглядит очень похоже на то, что вы описали. Первая строка имеет три значения, # строк, # столбцов, # ненулевых элементов (называемых nnz
). Тогда у вас есть nnz строк фактических элементов в триплете: (row #) (column #) (value)
Если ваша разреженная матрица находится в аналогичном формате, то вам не нужна никакая разреженная матрица в памяти. Просто отсканируйте значения и заполните свой плотный массив напрямую.
Если вы хотите иметь разреженную матрицу в памяти, есть несколько вариантов ее хранения. Тройняшки - это самое простое, и это просто версия файла MatrixMarket в памяти. 3 массива или 1 массив структур.
Наиболее распространенная структура для операций линейной алгебры - Сжатые разреженные столбцы (CSC) или Сжатые разреженные строки (CSR). Я позволю вам разобраться с этим, но если вы хотите, чтобы реализация C играла с вами, вам следует взглянуть на Tim 100 * * * * * * * * * * * * * * *. Так же и MatLAB хранит разреженные матрицы. Тим был одним из тех, кто написал эту часть MatLAB.