c# – 如何对一堆N x M二进制矩阵进行排序,使得最相似的是双链表中的邻居?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 如何对一堆N x M二进制矩阵进行排序,使得最相似的是双链表中的邻居?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1691字,纯文字阅读大概需要3分钟。
内容图文
![c# – 如何对一堆N x M二进制矩阵进行排序,使得最相似的是双链表中的邻居?](/upload/InfoBanner/zyjiaocheng/800/6c28168d08574c5f81e931fc6d572b95.jpg)
如何对一堆N x M二进制矩阵进行排序,以使最相似的二进制矩阵是双链表中的邻居?
我有一组2d二进制矩阵,我需要有效地对某些数据结构中的矩阵集进行排序,以使那些彼此最相似的矩阵在数据结构中彼此“相邻”.我不认为地图结构会有效,因为我有近40,000个需要高效查找的矩阵.
我对两个矩阵之间距离的公式是
getSimilarity(matrix toCompare)
//initialize variable "sum" to 0
//for each rowT in this and each rowC in toCompare
//sum += max(rowT,rowC) - bitwiseAnd(rowT,rowC)
// return sum
我甚至不需要你给我一个数据结构,我需要的是一种比较两个矩阵的方法,它使得类似矩阵的结果尽可能地彼此聚集.
编辑:12/19/12 1:52 PM
我的行代表用户属性,我的列代表页面属性.每个矩阵表示用户具有哪些属性,同时还具有特定页面属性(例如,用户的年龄小于42且他们访问过第4页)
解决方法:
我注意到你在矩阵上的相似度运算符定义了一个metric space.那就是:
>当且仅当M1 = M2时,D(M1,M2)= 0
>对于任何M1,M2,D(M1,M2)≥0.
> D(M1,M2)= D(M2,M1),和
> D(M1,M3)≤D(M1,M2)D(M2,M3)(triangle inequality)
因此,您可以想象存储所有数据的一种方法是在度量空间树中,这是一种用于在度量空间中存储对象的数据结构,可以轻松查找所有元素“接近”某些初始值元件.
您的数据具有额外的优势,即它是一个离散的度量空间,这意味着您提供的距离函数始终输出一个完整的答案.也就是说,你在距离1.5处不会有两个矩阵,也不能在距离π处得到两个矩阵
因此,您可能希望将矩阵存储在BK-tree中.BK树通常用于存储字符串,但更常见的是可以将元素存储在任何离散度量空间中.这使得可以合理有效地对各个矩阵进行最近邻搜索(通常无需查看集合中的所有矩阵),但不可否认,它不会通过所有元素对双向链表进行处理.
直观地,BK树的结构如下.选择您选择的矩阵作为“根节点”.然后,将集合中的每个矩阵与根矩阵进行比较,并根据它们与根矩阵的距离将它们分配到子树中.然后以相同的方式递归地细分每个子树.由于三角不等式,您可以使用简单的递归算法在BK树中搜索附近的矩阵.
希望这可以帮助!
内容总结
以上是互联网集市为您收集整理的c# – 如何对一堆N x M二进制矩阵进行排序,使得最相似的是双链表中的邻居?全部内容,希望文章能够帮你解决c# – 如何对一堆N x M二进制矩阵进行排序,使得最相似的是双链表中的邻居?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。