编程人何某简单说明和体会心得:
题目说明
公司员工问题是本次测量竞赛中难度最小的一道题目,您可能认为非常简单,只需要用熟悉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等调用);