请教:随意数值分组并且按需选择
总共24个数据,如下:ID号: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
数据 : 10 21 30 21 20 35 10 10 35 21 30 20 21 10 20 30 15 30 20 21 10 35 20 35
ID号对应的是地址, 不可变; 数据对应的是可以输入的任意数值, 现请教一套算法 :ID和数据必须保持锁定,ID号的数量上可以设定的,比如15个,下面相应的数据也就变成了15个,将相同的数据分成一组,如上面例子,
我的思路是数据10 送入数组 tab_data10【】,相应的地址送入tab_addr10【】;但是判断上较复杂,求更好的算法,有程序加莫元。 地址是连续的吗?不管个数是多少都是从1开始的吗?
那就只需要一个数组tab_data10[]就行了,数组中的序号就对应着ID。
tab_data10就代表ID为1的数据
tab_data10就代表ID为2的数据
...
lcw_swust 发表于 2013-12-20 15:11
地址是连续的吗?不管个数是多少都是从1开始的吗?
那就只需要一个数组tab_data10[]就行了,数组中的序号就 ...
需要将相同的数据归类,相同数据的ID未必是连续的! 本帖最后由 lcw_swust 于 2013-12-20 16:29 编辑
langbaiyue 发表于 2013-12-20 15:49
需要将相同的数据归类,相同数据的ID未必是连续的!
哦,这样啊。
看这样行不:
定义一个结构体:
第一个字节表示数据
第二个字节表示有相同数据的ID的总数
第三个字节开始就是逐个的ID号(数组)
参考:变长结构体:http://blog.sina.com.cn/s/blog_532f78a40100t9ad.html
只要总的ID号个数固定,那么就只需要定义一个固定长度的数组作为缓冲区,
在缓冲区中建立一个挨着一个的结构体即可。(这样能避免malloc、free) lcw_swust 发表于 2013-12-20 16:27
哦,这样啊。
看这样行不:
定义一个结构体:
感谢!先看一下可行性! 最常规的方法,二分法排序数据组,然后for循环ID数,搞定!
如果要更简便的,我还没有想到,今晚想想,看是否存在更简单的方法! mikal 发表于 2013-12-20 17:32
最常规的方法,二分法排序数据组,然后for循环ID数,搞定!
如果要更简便的,我还没有想到,今晚想想,看 ...
惭愧 数学快忘光了 ,昨天把算法改成了FOR循环分类数据和对应地址,正在试! langbaiyue 发表于 2013-12-21 08:26
惭愧 数学快忘光了 ,昨天把算法改成了FOR循环分类数据和对应地址,正在试! ...
其实,我看了 lcw_swust 的方法,应该比我提出的要好。
首先确定数据结构体,然后for下ID数的次数。这样就直接满足你的要求了。
而我说的二分法+for,估计程序开销要大很多。
当然前期ID存放是连续的,不连续的话,那就把它改成连续的。 看你用啥做,C#的话,自带的数据类不要太好用更不用说还有LINQ~
(顺便,你这是hash表的节奏,跑个哈希算法是最实用的~ lcw_swust 发表于 2013-12-20 16:27
哦,这样啊。
看这样行不:
定义一个结构体:
你好 按照你的思路,没搞定,我试其他的办法,感觉很繁琐,
ID12 3 4 5 6 7 8
值 58 2 9 6 5 8 9
不知能不能抽些时间以上面8组数据 写个范例呢?
感谢!
页:
[1]