`您可能认为非常简单,只需要用熟悉Tree的操作就可以。可是不然,而且这道题目还是考验一个程序员良好基本功的一道非常好的题目。为什么这样说呢?启动我已经完成的程序做一个简单的测试你就可以体会!
1) 启动我的程序(main.vi),在“载入员工”TabPage中选中“显示导入过程”,点击“载入”,选择in50.txt(50位员工信息),在询问“移除组织中已存在人员”时选择“移除”(后面测试都同样选择),您会发现效果还不错吧!
2) 您再试试选择载入in100.txt(100位员工信息),是不是有些皱眉了?(有些儿慢了L);
3) 再试试in200.txt、in500.txt、in1000.txt……,如果您能够耐心的把in4000.txt导入完成,我愿向您致以11[1]T的敬意!(十分敬意太少了,T=108万)
4) 接下来,您将“显示导入过程”去掉,再试试导入in4000.txt,感觉到了快速顺畅吗?J
对,你发现了,是性能! labview提供的Tree在数据量稍大时,性能急剧下降!!!
那怎么办?LabVIEW没有提供其它的具有树形层次的存储控件!
……
我以为,其它题目或许需要更多的是对LabVIEW控件、UI的熟悉,而这道题目更注重的是算法的设计,而算法才是一个程序员是否出色的体现。
作者:何凌 这里利用LabVIEW的Register变量和分离链地址法实现了一个类似于HashTable的员工信息存储,从而可以实现在限定范围内(5000员工)的快速搜索――复杂度为O(1),另外在存储员工的信息中加上直接下级员工的编号,就可以实现树型人员组织结构的遍历搜索。 作者体会心得 1) 在code前,考虑如何测试所编写的程序(或者说是验证编程的思路)并建立其相应的测试代码是非常有益的而且可以带来长期的效果,无论将来你做了什么改变,都可以验证你的修改是否正确,是否影响以前的设计; 通过LabVIEW8.x提供的类(lvclass)控制vi的访问权限,既有利于保护你的设计避免不正确参数调用,又简化接口易于使用且可。(如EmployeeHashTable类中保护GetSetEmployee.vi,而公开InsertEmployee.vi、SearchEmployee.vi等调用);
算法是一个程序员是否出色的体现。
专家点评:
a.功能很强大,可以看出花了很多心血在算法上,非常好。算法上还有一点瑕疵,例如在删除一个员工的同时没有办法自动建立其他员工的上下级关系,必须删除全部下级员工,不是非常合理。此外,界面设计过于简单,应该加强.
b.程序运用了自己的算法来提高Tree控件显示的速度和资源分配,这个非常值得肯定和鼓励。
c.基本实现所有规定的功能,在所有参赛者中唯一熟
练使用面向对象设计方式开发程序的工程师,很不错!程序体现了作者非常扎实的数据结构功底,值得大家学习。工程管理也做得非常好,体现了作者在软件工程方面也有很深入的研究,该代码是很好的学习范例。
d.算法的创新是独特之处(hashtable算法建立),可见作者在数据结构方面的熟练掌握.此程序是很多专家会员学习典范.
`
50
|
|
|
|
很好很强大!
|
|
|
|
|