读书人

稀疏矩阵有关问题

发布时间: 2012-09-14 23:00:49 作者: rapoo

稀疏矩阵问题
问题描述:
某大学存储某个学期的学生成绩。该大学有10000名学生和该学期开设了500门课程,一个自然的实现方法是用二维数组Gards,该数组的行编号(行索引)是学生编号;列编号(列索引)是课程编号。学生编号和学生基本情况的联系通过二维数组students表示;课程编号和课程基本情况的联系通过二维数组classes表示。
数组Gards的每个元素存储每个学生在完成一门课程后获得的成绩。设学生成绩是实数,需要四个字节来存储,则整个Gards数组所占用的空间是:
10000学生*500课程*4字节≈20M字节
但在一般情况下,一个学生一个学期学习6门课程,即表的每一列只有6个单元被成绩占用,而其余的494个单元即98.4%都空着,浪费了。

















上述只是一个学期的成绩保存,如果要保存所有学生每个学期的成绩,仍然采用上述的方式,则存储空间的浪费是非常惊人的。
为了既能方便地增加、查找学生的成绩,又能方便地查找某门课程的选修学生,更主要的是能够节省约90%的存储空间,要采用十字链表的方式来保存学生成绩。实现要求:
应设计一个菜单,具有插入学生成绩、查询学生成绩、按课程查询选修的学生和退出系统等最基本的功能。

[解决办法]


这个是从Dancing Links论文中摘出的图,十字链表大约就是这样的形式。
[解决办法]
我的做法是多维转一维,然后存储非空索引和非空值对。
哈希K-V存储,O(1)查找
[解决办法]
用不着稀疏矩阵,将学生的科目也用一个6维数组表示嘛!
(( score(i,j),j=1,6),i=1,10000)每个学生的6门课成绩;
((course(i,j),j=1,6),i=1,10000)每个学生的课程,是1~500门课中的一门。
[解决办法]
http://blog.csdn.net/dizuo/archive/2011/04/25/6361077.aspx
你看有没有用、
[解决办法]
三元组顺序表比较容易实现,就是:
行号 列号 成绩
设计个简单索引表查找也说得过去。

读书人网 >软件架构设计

热点推荐