| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1196 人关注过本帖
标题:求帮我脑洞大开。
只看楼主 加入收藏
复旦
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:81
专家分:124
注 册:2018-10-29
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
求帮我脑洞大开。
有这么一个题目。

图片附件: 游客没有浏览图片的权限,请 登录注册


有三种方法。
1.1)定义新的strClass类,并重载比较类的比较函数
2)使用map<strClass,int>进行统计

2.1)将所有的字符串的字母排序
2)使用map<string,int>进行统计

3.
图片附件: 游客没有浏览图片的权限,请 登录注册


那么有其他更有效的办法吗?
谢谢!
搜索更多相关主题的帖子: 比较 map int 统计 排序 
2018-11-12 01:28
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:20 
程序代码:
unsigned encode( const char* s )
{
    unsigned result = 0;
    for( size_t i=0; i!=5; ++i )
        result |= 1u << (s[i]-'A');
    return result;
}

int main( void )
{
    unsigned count[252] = {};
    for( 那一百万个字符串 )
        ++count[encode(字符串)];
}

2018-11-12 08:57
复旦
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:81
专家分:124
注 册:2018-10-29
收藏
得分:0 
上面的encode的功能是什么?
2018-11-12 12:10
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:0 
回复 3楼 复旦
看你自己贴的“方案三”
2018-11-12 12:42
复旦
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:81
专家分:124
注 册:2018-10-29
收藏
得分:0 
除了三个方案之外别的可以替代或者更好的方法吗?
2018-11-12 22:01
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:0 
以下是引用复旦在2018-11-12 22:01:24的发言:

除了三个方案之外别的可以替代或者更好的方法吗?
我不是回答你了吗,我连代码都给了。
我的算法中只是用了和“方案三”一样的编码而已,下次你看完了再问吧
2018-11-13 08:31
复旦
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:81
专家分:124
注 册:2018-10-29
收藏
得分:0 
有点懂了。 每一个字符串换成英语字母总高度(“x”-"a")。
很优秀的办法了。
        result |= 1u << (s[i]-'A');
这个式我不太懂。 能说明一下吗?
2018-11-13 17:46
复旦
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:81
专家分:124
注 册:2018-10-29
收藏
得分:0 
研究了一会。
unsigned的最大值是2^64吧。(我的系统是64位的。)
这里位操作是在2进制上用的还是16进制上用的?

做的时候,再写一个decode函数,然后用decode和count[]输出,这样吧?

2018-11-13 18:13
快速回复:求帮我脑洞大开。
数据加载中...
 
   



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

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