| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2714 人关注过本帖
标题:求:一个好像很简单的问题,愣是想不到一个很简单的算法?
只看楼主 加入收藏
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:火星
等 级:版主
威 望:37
帖 子:646
专家分:2483
注 册:2018-3-13
收藏
得分:0 
也没啥好晦涩的
1. copy to array aaa ...  复制某一行几个字段的值到一数组,这里偷懒写成 fields like 'a?',若实际字段名无规律,改成完成的字段名列表,多打些字母而已
2. dimension aaa[...]  相当于行转列,以便后面用 append from array 将数据附加到临时表 temp 的 ax 字段中
最后交给 sql-select 统计每个值的出现次数,这些好像也不用解释了

当然,如果数据是:【王母,大姐,二姐,三姐,四姐,五姐,六姐,七妹】我不知谁该排第一
或者:【张三,李四,王五,赵六,张三,李四,王五,赵六】谁又该排第一

[此贴子已经被作者于2023-3-13 16:04编辑过]


这家伙很懒,啥也没留下
2023-03-13 15:54
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9809
专家分:26987
注 册:2012-2-5
收藏
得分:0 
以下是引用csyx在2023-3-13 15:54:27的发言:

也没啥好晦涩的
1. copy to array aaa ...  复制某一行几个字段的值到一数组,这里偷懒写成 fields like 'a?',若实际字段名无规律,改成完成的字段名列表,多打些字母而已
2. dimension aaa[...]  相当于行转列,以便后面用 append from array 将数据附加到临时表 temp 的 ax 字段中
最后交给 sql-select 统计每个值的出现次数,这些好像也不用解释了

当然,如果数据是:【王母,大姐,二姐,三姐,四姐,五姐,六姐,七妹】我不知谁该排第一
或者:【张三,李四,王五,赵六,张三,李四,王五,赵六】谁又该排第一

算法规则问题没说清楚

坚守VFP最后的阵地
2023-03-13 16:31
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:347
专家分:326
注 册:2013-10-4
收藏
得分:0 
以下是引用csyx在2023-3-13 15:54:27的发言:

2. dimension aaa[...]  相当于行转列


哈哈哈哈,就是“行转列”,我一时转不过弯来!
数据拿到手时,我一直就没想清楚:这个……列数据如何group by?结果一直就陷在这死胡同里出不来啦。

非常感谢!
2023-03-13 16:45
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:347
专家分:326
注 册:2013-10-4
收藏
得分:0 
以下是引用csyx在2023-3-13 15:54:27的发言:

如果数据是:【王母,大姐,二姐,三姐,四姐,五姐,六姐,七妹】我不知谁该排第一
或者:【张三,李四,王五,赵六,张三,李四,王五,赵六】谁又该排第一


这个无所谓,只需找出第一个第一,并列第一者就忽略呗,反正不违背初衷:
找出最大次数的重复者,并统计重复率。
2023-03-13 17:19
sam_jiang
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:747
专家分:1114
注 册:2021-10-13
收藏
得分:0 
CLEAR
Create Cursor test ( ;
     a1 V(10),a2 V(10),a3 V(10),a4 V(10),a5 V(10),a6 V(10),a7 V(10),a8 V(10) ;
     ,rate Y,maxa V(10))
Insert into test (a1,a2,a3,a4,a5,a6,a7,a8) values ( ;
    "七仙女","黄大仙","黄大仙","黄大仙","黄小仙","黄大仙","黄大仙","王母娘娘")
Insert into test (a1,a2,a3,a4,a5,a6,a7,a8) values ( ;
    "七仙女","黄大仙","七仙女","黄大仙","七仙女","七仙女","黄小仙","王母娘娘")
Insert into test (a1,a2,a3,a4,a5,a6,a7,a8) values ( ;
    "黄小仙","黄大仙","黄小仙","黄大仙","黄小仙","七仙女","黄小仙","王母娘娘")
Insert into test (a1,a2,a3,a4,a5,a6,a7,a8) values ( ;
    "王母娘娘","王母娘娘","黄大仙","黄大仙","黄小仙","王母娘娘","王母娘娘","王母娘娘")
GO top
FOR n=1 TO RECCOUNT()
    SCATTER FIELDS a1,a2,a3,a4,a5,a6,a7,a8 TO array1
    ctext=""
    FOR i=1 TO 8
        ctext=ctext+array1(i)
    ENDFOR
    nmaxtimes=0
    FOR i=1 TO 8
        ntimes=OCCURS(array1(i),ctext)
        nmaxtimes=MAX(nmaxtimes,ntimes)
    ENDF
    i=0
    DO WHILE .t.
        IF i>8
            EXIT
        ELSE
            i=i+1   
            ntimes=OCCURS(array1(i),ctext)
            IF ntimes=nmaxtimes
                REPLACE rate WITH (nmaxtimes/8)
                REPLACE maxa WITH array1(i)
                EXIT
            ELSE
                LOOP
            ENDIF
        ENDIF
    ENDDO
    SKIP     
ENDFOR
LIST
2023-03-13 20:41
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:347
专家分:326
注 册:2013-10-4
收藏
得分:0 
非常感谢sam_jiang和诸位网友的帮助!

玩大一点点,为这算法增加一点点通用性或难度:

假设:
A1...A18
皆为整型数值字段
求:
获取重复次数最多的一个字段值,及其重复次数。

这一回,若打算再勉强用OCCURS(),恐怕就必须先Str(),然后才能OCCURS()啦。
不知还有没有能上天入地的奇门遁甲法门?

2023-03-13 21:30
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10552
专家分:42996
注 册:2014-5-20
收藏
得分:0 
以下是引用cssnet在2023-3-13 21:30:08的发言:

非常感谢sam_jiang和诸位网友的帮助!

玩大一点点,为这算法增加一点点通用性或难度:

假设:
A1...A18
皆为整型数值字段
求:
获取重复次数最多的一个字段值,及其重复次数。

这一回,若打算再勉强用OCCURS(),恐怕就必须先Str(),然后才能OCCURS()啦。
不知还有没有能上天入地的奇门遁甲法门?

条件好像不够充分?
18个字段 ..... 最多的一个字段值,这“18个”与“一个”是什么关系。
试举例说明

[此贴子已经被作者于2023-3-13 23:15编辑过]

2023-03-13 23:14
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:347
专家分:326
注 册:2013-10-4
收藏
得分:0 
以下是引用吹水佬在2023-3-13 23:14:22的发言:

条件好像不够充分?
18个字段 ..... 最多的一个字段值,这“18个”与“一个”是什么关系。
试举例说明


哈哈哈哈,纯属信口胡诌的,说得也不严谨。
例如,假设一行记录是一位学生各科的分数:
98,95,74,92,65,92,92,77,92,88,92,……
统计当中出现最多的一个分数值,以及出现的次数。
上例可能是:92,5次。

2023-03-13 23:27
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10552
专家分:42996
注 册:2014-5-20
收藏
得分:0 
以下是引用cssnet在2023-3-13 23:27:01的发言:

哈哈哈哈,纯属信口胡诌的,说得也不严谨。
例如,假设一行记录是一位学生各科的分数:
98,95,74,92,65,92,92,77,92,88,92,……
统计当中出现最多的一个分数值,以及出现的次数。
上例可能是:92,5次。

这的意思与我在6楼给的结果不是一样吗?
这与字段多少无关,明显就是一个数据分类统计的问题。
如果数据较复杂和数据量大,数据结构再能优化一下,统计算法应该可以更简单些,不用倒来倒去。
2023-03-14 05:25
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10552
专家分:42996
注 册:2014-5-20
收藏
得分:0 
以下是引用cssnet在2023-3-13 23:27:01的发言:
例如,假设一行记录是一位学生各科的分数:
98,95,74,92,65,92,92,77,92,88,92,……
统计当中出现最多的一个分数值,以及出现的次数。
上例可能是:92,5次。

只是分类统计分数值,可以直接用数组统计,简单快速。
2023-03-14 05:35
快速回复:求:一个好像很简单的问题,愣是想不到一个很简单的算法?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016566 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved