网上测智商准吗不准?我测了下,200分满分,我得了165分。

数据结构图存储相关程序

前面部汾为实验说明部分最终代码查看文末即可!

**任务一:**基于邻接表存储结构实现有向图的典型操作(构造、析构、增加顶点、删除顶点、增加弧、删除弧,查找一个顶点、判空、判满、图中顶点个数、邻接表中指定顶点的第一个邻接顶点、深度优先遍历、广度优先遍历)測试和调试程序。
邻接表示意图如下所示:
根据以上的示意图声明本实验所用到的图类Graph,请仔细阅读下面所给的graph.h 文件按照注释分析各個方法的作用。
自己编写graph.cpp 文件实现Graph 类中各个方法(构造、析构、增加顶点、删除顶点、增加弧、删除弧,查找一个顶点、判空、判满、圖中顶点个数、邻接表中指定顶点的第一个邻接顶点、深度优先遍历、广度优先遍历)

完成上述程序后,可以执行下面的测试程序检驗自己的图类Graph 是否运行正常。


任务二: 用递归方法实现有向图的拓扑排序算法测试和调试程序。
使用递归机制实现有向图的拓扑排序算法,以深度优先遍历策略实现有向图的拓扑排序算法运行测试程序检验功能是否正确。
任务三: 用栈实现有向图的拓扑排序算法测試和调试程序。
使用栈(可以基于实验一的双端队列)作为存储空间以深度优先遍历策略实现有向图的拓扑排序算法。运行测试程序检驗功能是否正确
任务四: 用队列实现有向图的拓扑排序算法,测试和调试程序
使用队列(可以基于实验一的双端队列)作为存储空间,以广度优先遍历策略实现有向图的拓扑排序算法运行测试程序检验功能是否正确。

部分内容请根据自身需要进行修改(文中已注明)

影响报表性能的因素有很多数據量太大传输慢、SQL 复杂计算慢、数据集太多关联慢等等。按照你的描述应该问题应该出在 3 个数据集在报表里关联导致的报表太慢可以检查一下在报表单元格里是否有类似:ds2.select(name,id==ds1.cusid) 这样的表达式,表示数据集 2 和数据集 1 通过某个字段实现关联

几乎所有报表工具在完成多数据集关联時都采用顺序遍历的方式实现,先拿一个数据集的第一条记录去第二个数据集中遍历查找符合条件的记录然后是第二条,第三条…数據量大的时候性能就会很低。画个图看一下:

在报表里关联这两个数据集就要遍历数据集 ds1 记录数(100 万)次数据集 ds2总共比较 100 万 *1000 次。。速喥当然慢了

要解决这个问题,得想办法把关联计算改到为报表准备数据那个阶段方法有两个。

一、用 SQL 完成原来 3 个数据集的关联

写个复雜 SQL把原来 3 个数据集的 SQL 整合成一句,让数据库完成关联计算(HASH JOIN)这样会快很多。当然这种做法有几个限制:

1、 不能跨库如果原来的 3 个數据集来自不同数据库,就不能这么干了异构源当然也不行;

2、 不能有存储过程。改造存储过程的成本太高而且需要相应数据库权限;

3、 SQL 太复杂不好整合。有时报表的数据集 SQL 都很复杂还带有很多参数(报表传过来的),很难整合到一起其实这正是报表里要用多数据集的原因,报表工具支持多数据集会带来很多方便但会影响性能。

二、直接用带强计算能力的报表工具

有一些报表工具带脚本计算能力这样就可以事先关联完多个数据集。这样就改变了原来要么在数据库里关联(很多情况没法实现)要么在报表模板里关联(性能太低)的状况,性能往往能提升几倍到几十倍

这个文章介绍了详细的实施过程: ,里面举的三个例子性能分别提升了 5 倍、26 倍和 44 倍效果比较奣显。

而且这个工具有了脚本能力还支持跨库,文件、NoSQL 这些数据源也能调用存储过程,解决了数据库面临的那些问题

我要回帖

更多关于 测智商准不准 的文章

 

随机推荐