| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6271 人关注过本帖, 2 人收藏
标题:华山论剑 之 [矩阵]
只看楼主 加入收藏
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
结帖率:100%
收藏(2)
已结贴  问题点数:100 回复次数:76 
华山论剑 之 [矩阵]
应施鹏兄弟的要求就矩阵模块的实现开贴交流,希望众英雄以代码展现自己的思想与风格。

在论坛里不可能有什么物质奖励,能得到的只有大家的认可,而认可度的体现之一即专家分。

这一贴的分数只为吸引大家瞩目,最后将平分给关注者。

而对于实际参与者,只要代码完整实现了矩阵操作,并得到大家的认可,我将以个人名义奖励100专家分。

注意,是“每位”100专家分

这可以算作一次团队开发,成员是论坛所有有兴趣参与的人。既然是个团队项目,就不能任由个人意愿去随意发挥。

现在讨论一下模块的接口标准。下面是初步设定,可以继续讨论。但定稿后,参与者必需严格按接口要求编写模块。

1.模块的编写语言限定为C语言(毕竟这是在C论坛里),所以也就用不到类的概念。矩阵数据的存储类型为结构。

    这里规定结构的名称为MATRIX。
    矩阵元素的数据类型为double。
    由于这次讨论源于fourleaves对三元组行逻辑链接的讨论,所以要求邻接表(或其它矩阵压缩算法)实现,对于二维数组的实现不予考虑(这样的实现奖励专家分)。
    当然,如果有人能自动识别矩阵的稠密度从而能自动切换压缩矩阵与非压缩矩阵,将给予500专家分的奖励。
    MATRIX结构的内部成员定义不作要求。我们不提倡外部程序直接操作MARIX,而是应该通过相应的操作函数来完成。

2.矩阵操作函数接口定义。

    MATRIX * Matrix_creat(int rows, int columns);//创建rows行columns列矩阵,元素初始值为0
    void Matrix_free(MATRIX * mat);//销毁mat矩阵
    int Matrix_rows_len(MATRIX * mat);//获取矩阵mat的行数,mat为空指针时返回0
    int Matrix_cols_len(MATRIX * mat);//获取矩阵mat的列数,mat为空指针时返回0
    int Matrix_set(MATRIX * mat, int row, int column, double value);//设置mat矩阵第row行第column列的元素值为value,操作成功返回0,否则返回一个非0值
    double Matrix_get(MATRIX * mat, int row, int column);//获取mat矩阵第row行第column列的元素值
    MATRIX * Matrix_add(MATRIX * mat1, MATRIX * mat2);//计算两个矩阵相加,返回和矩阵。当两个矩阵不能作加法运算时返回NULL
    MATRIX * Matrix_mul(MATRIX * mat1, MATRIX * mat2);//计算两个矩阵相乘,注意是mat1左乘mat2。如果不能作乘法运算返回NULL
    MATRIX * Matrix_mul_real(MATRIX * mat, double a);//计算矩阵与实数相乘
    MATRIX * Matrix_dot_mul(MATRIX * mat1, MATRIX * mat2);//计算两个矩阵的点乘。如果不能作运算返回NULL
    MATRIX * Matrix_trans(MATRIX * mat);//返回mat的转置矩阵


先这么多吧。由于时间仓促水平有限,可能有不合理的地方,欢迎各位参与讨论并给出修改或补充意见。
   
   
搜索更多相关主题的帖子: 风格 接口 开发 
2012-08-06 19:40
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:7 
这个问题问得不错,我不是很熟悉这方面的东西,容我研究研究。
2012-08-06 19:46
demonleer
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:483
专家分:1225
注 册:2012-6-4
收藏
得分:7 
哈哈,昨天跟你商量开贴的时候我就忘记跟你说顺便把函数原型都给定下来,没想到杨大哥已然准备了函数原型。

各位英雄给力啊,待我酝酿酝酿
2012-08-06 20:26
信箱有效
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:9
帖 子:1102
专家分:4268
注 册:2012-6-19
收藏
得分:7 
这个问题问得不错,我不是很熟悉这方面的东西,容我研究研究。
2012-08-06 20:28
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 3楼 demonleer
矩阵是个很实用的工具,值得用点心做好。基本上这个标准是我边发贴边构思的,肯定有不足之处,多讨论交流。

另外函数名称觉得还舒服么,我这英语也就四级水平,一直有提高英语水平的良好愿望,可惜心有余而力不足。有好的意见尽管提。

重剑无锋,大巧不工
2012-08-06 20:39
demonleer
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:483
专家分:1225
注 册:2012-6-4
收藏
得分:0 
以下是引用beyondyf在2012-8-6 20:39:43的发言:

矩阵是个很实用的工具,值得用点心做好。基本上这个标准是我边发贴边构思的,肯定有不足之处,多讨论交流。

另外函数名称觉得还舒服么,我这英语也就四级水平,一直有提高英语水平的良好愿望,可惜心有余而力不足。有好的意见尽管提。


名称很不错啊,我得研究研究稀疏矩阵是怎么回事,以前实验室倒是有个师兄在搞这方面,我明天请教请教他。
2012-08-06 20:43
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
也许将 MATRIX 改为 SPARSE_MATRIX 更合适一些,或者直接叫 SPARSE 怎么样?

毕竟邻接表只有在矩阵足够“稀疏”时才有优势。如果矩阵很稠还不如直接用二维数组存储,操作也更简单。

我们可以考虑分别实现两种矩阵及相应操作。

重剑无锋,大巧不工
2012-08-06 21:03
demonleer
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:483
专家分:1225
注 册:2012-6-4
收藏
得分:0 
以下是引用beyondyf在2012-8-6 21:03:46的发言:

也许将 MATRIX 改为 SPARSE_MATRIX 更合适一些,或者直接叫 SPARSE 怎么样?

毕竟邻接表只有在矩阵足够“稀疏”时才有优势。如果矩阵很稠还不如直接用二维数组存储,操作也更简单。

我们可以考虑分别实现两种矩阵及相应操作。


SPARSE这个翻译很专业很准确啊,十字链表,三元组以前还真没见过,真是孤陋寡闻啊。

我记得在线性代数还是图论里有学过邻接矩阵,在图论里学过邻接表,还有有向图无向图,都还给老师了。

矩阵是得好好研究研究,这个题目有意思。
2012-08-06 21:12
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:7 
真不觉得这玩意有什么意义。。
2012-08-06 21:15
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 9楼 Devil_W
乖,别捣乱。等哥们儿有时间再和你玩那个QQ客户端。

重剑无锋,大巧不工
2012-08-06 21:20
快速回复:华山论剑 之 [矩阵]
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026497 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved