栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

用Java表示100K X 100K矩阵

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用Java表示100K X 100K矩阵

听起来您需要一个稀疏矩阵。其他人已经提出了可以满足您需求的良好的第三方实施方案。

根据您的应用程序,您可以不使用第三方矩阵库,而只需使用Map作为矩阵数据的后备存储即可。有点儿…

public class SparseMatrix<T> {    private T defaultValue;    private int m;    private int n;    private Map<Integer, T> data = new TreeMap<Integer, T>();    /// create a new matrix with m rows and n columns    public SparseMatrix(int m, int n, T defaultValue) {        this.m = m;        this.n = n;        this.defaultValue = defaultValue;    }    /// set value at [i,j] (row, col)    public void setValueAt(int i, int j, T value) {        if (i >= m || j >= n || i < 0 || j < 0)  throw new IllegalArgumentException(         "index (" + i + ", " +j +") out of bounds");     data.put(i * n + j, value);    }    /// retrieve value at [i,j] (row, col)    public T getValueAt(int i, int j) {        if (i >= m || j >= n || i < 0 || j < 0)  throw new IllegalArgumentException(         "index (" + i + ", " +j +") out of bounds");        T value = data.get(i * n + j);        return value != null ? value : defaultValue;    }}

一个说明SparseMatrix用法的简单测试用例为:

public class SparseMatrixTest extends TestCase {    public void testMatrix() {        SparseMatrix<Float> matrix =  new SparseMatrix<Float>(100000, 100000, 0.0F);        matrix.setValueAt(1000, 1001, 42.0F);        assertTrue(matrix.getValueAt(1000,1001) == 42.0);        assertTrue(matrix.getValueAt(1001,1000) == 0.0); }   }

这不是最有效的方法,因为矩阵中的每个非默认条目都存储为对象。根据您期望的实际值数量,此方法的简单性可能胜过集成第三方解决方案(并可能会处理其许可-
再次​​取决于您的情况)。

在上面的SparseMatrix实现中添加诸如乘法之类的矩阵运算应该很简单(并留给读者练习;-)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/438552.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号