算法讨论

Fox1536 2014-05-08 05:05:24
不知道如何下手 T.T
现有data数据 120比特为一帧,一共1000000帧
如何去除其中重复帧?
输出余下数据
8比特一帧为例
如:
11111111
11111110
11111101
11111111 《重复
11111100
输出:
11111111
11111110
11111101
11111100
各位不吝赐教啊!
...全文
206 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
showjim 2014-05-09
  • 打赏
  • 举报
回复
引用 13 楼 adadadgt 的回复:
大概。。。没看懂,麻烦稍微解释下
System.Collections.Generic.HashSet<T>是用来去重的一个数据结构,它依赖于GetHashCode与Equals两个函数。 int128用来存储你的120b,分4个int32。 不知道你的原始数据是怎样的,所以不知道int128应该如何具体定义,但是思路应该一样。
showjim 2014-05-08
  • 打赏
  • 举报
回复
        struct int128 : IEquatable<int128>
        {
            public uint Int0;
            public uint Int1;
            public uint Int2;
            public uint Int3;
            public bool Equals(int128 other)
            {
                return ((Int0 ^ other.Int0) | (Int1 ^ other.Int1) | (Int2 ^ other.Int2) | (Int3 ^ other.Int3)) == 0;
            }
            public override int GetHashCode()
            {
                return (int)(Int0 ^ Int1 ^ Int2 ^ Int3);
            }
            public override bool Equals(object obj)
            {
                return Equals((int128)obj);
            }
        }
            new System.Collections.Generic.HashSet<int128>(...);
jmcooler 2014-05-08
  • 打赏
  • 举报
回复
distinct ?你试试就知道了,效率特低 必须排序 + 查询
jmcooler 2014-05-08
  • 打赏
  • 举报
回复
简单可行的就是 Hashtable,就算你 15 Byte 一帧,你只需要对该帧实现一个 IEqualityComparer,并在构造 Hashtable 时,传入该比较器的实例。 如果你非要追求其他数据结构和算法,像 wddw1986 讲的,每帧为 4 个整数,有 16 Byte,够用了,倒不用建立图。 平衡二叉树,红黑树,Hashtable 都行
jmcooler 2014-05-08
  • 打赏
  • 举报
回复
Dictionary 还不如 hashtable 你的帧如果是 BYTE 的话,可以直接使用 hashtable Hashtable tab = new Hashtable(); 假定每次要加入的帧为: BYTE frame if( !tab.Contains( frame ) ) tab.Add( frame ); 这个效率稍差,最好的办法是: try { tab.Add( frame ) ) catch( Exception ) { }
wanghui0380 2014-05-08
  • 打赏
  • 举报
回复
采用Btree做索引
cheng2005 2014-05-08
  • 打赏
  • 举报
回复
没细算,给出一个粗略的方法。 将15byte拆成4个int(或者拆成5个也可以) 一帧 = i1,i2,i3,i4 相当于做一个图形 在图形里面从i1开始查找是否存在一条路径可以到i4,如果存在这条路径说明此帧已存在,不存在说明此帧第一次出现,将路径加入图形。 感觉分成没帧分成5帧会更优一点,每一个节点的下级节点数最大可能就是2^24次方,而事实上你只有20次方的数据,也就是说每一个节点的下一节点数应该远远不会到这么高的级别,每一个节点能到几万或者几十万的级别就撑死了。查找过程应该很快。
by_封爱 版主 2014-05-08
  • 打赏
  • 举报
回复
数组么 distinct就可以了啊. ...
liweibing2000 2014-05-08
  • 打赏
  • 举报
回复
引用Dictionary字典类有去重复功能。
cheng2005 2014-05-08
  • 打赏
  • 举报
回复
看错了,原来是15Byte一帧。 那也就是2^120个值,这个值好大啊。容我想想
cheng2005 2014-05-08
  • 打赏
  • 举报
回复
一帧才一个Byte,也就是256个值。 见一个256长度的bool数组,初始化都置为false。 一帧一帧处理,碰到false的就该为true输出,碰到true的就忽略。

111,125

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧