LabVIEW_删除数组重复项

编写算法过程中经常用到删除数组中的重复项,LabVIEW数组函数里面没有此功能函数,但可以借助已有的函数“搜索一维数组”来构建删除重复项函数,如下图所示(该函数由“OpenG工具包提供”)。

图片

该算法逻辑是每插入一个元素,都要对已有的数组进行遍历搜索,搜索的到说明该数值有重复项,搜索不到说明没有重复项,则插入数组。数组Size小的时候,效率还不错,当数组Size非常大的时候,越到后面速度越慢(每次需要遍历索搜的数量越来越大),怎样优化?

不难发现效率低的瓶颈在每次搜索的数量上,该存储方法是线性存储,不可避免的要遍历所有数组搜索,其搜索复杂度为 O(1)常数阶,如下图所示。

图片

比较快的搜索方法是树容器数据结构的搜索,通过节点之间的继承关系快速搜索,很遗憾LabVIEW本体语言没有这中树容器数据结构,但可以借助变体数据类型的两个方法来实现树形存储,“设置变体属性”、“获取变体属性”

图片

变体属性的数据存储方式是二叉树的存储方法,其组织数据存储的格式如下:

图片

       如果二叉排序树是平衡的,则n个节点的二叉排序树的高度为Log2n+1,其查找效率为O(Log2n),近似于折半查找。如果二叉排序树完全不平衡,则其深度可达到n,查找效率为O(n),退化为顺序查找。一般的,二叉排序树的查找性能在O(Log2n)到O(n)之间。

LabVIEW对这两种不同算法对同一个具有重复项的数组进行删除重复项操作,如下图所示。

图片

创建一个数组大小为100万的一维数组,一种是用线性数组查找的方法删除重复项,时间为304490ms,用变体属性设置与获取函数进行处理,时间为4017ms,效果很明显。用同样的方法一样可以实现二维数组的删除重复项操作,用“变体平化为字符串”函数建立Name设置变体属性,用“获取变体属性”读出去除重复项的2维数组数据。

图片

有更好的方法可以微信评论与沟通!

声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/314154.html

(0)
联系我们
联系我们
分享本页
返回顶部