惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
Netflix TechBlog - Medium
V
Vulnerabilities – Threatpost
Google Online Security Blog
Google Online Security Blog
Hugging Face - Blog
Hugging Face - Blog
L
LINUX DO - 热门话题
云风的 BLOG
云风的 BLOG
P
Proofpoint News Feed
D
Docker
C
Cyber Attacks, Cyber Crime and Cyber Security
MyScale Blog
MyScale Blog
P
Palo Alto Networks Blog
T
Tenable Blog
P
Privacy International News Feed
Google DeepMind News
Google DeepMind News
小众软件
小众软件
Cisco Talos Blog
Cisco Talos Blog
aimingoo的专栏
aimingoo的专栏
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
A
Arctic Wolf
C
Cybersecurity and Infrastructure Security Agency CISA
C
Cisco Blogs
T
Threat Research - Cisco Blogs
NISL@THU
NISL@THU
The Hacker News
The Hacker News
Project Zero
Project Zero
AWS News Blog
AWS News Blog
Simon Willison's Weblog
Simon Willison's Weblog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Threatpost
V
Visual Studio Blog
The GitHub Blog
The GitHub Blog
The Cloudflare Blog
Last Week in AI
Last Week in AI
Jina AI
Jina AI
Cyberwarzone
Cyberwarzone
The Register - Security
The Register - Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
Vercel News
Vercel News
D
Darknet – Hacking Tools, Hacker News & Cyber Security
MongoDB | Blog
MongoDB | Blog
U
Unit 42
Scott Helme
Scott Helme
A
About on SuperTechFans
WordPress大学
WordPress大学
F
Fortinet All Blogs
大猫的无限游戏
大猫的无限游戏
G
GRAHAM CLULEY
Latest news
Latest news
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
S
Schneier on Security

博客园 - 沧海一声笑

关于UltraWinGrid选中行只读设置 关于chrome 插件PageMonitor 安装及使用步骤 关于UNICODE字符串的匹配问题 关于string的indexof方法的试验 C# 字符转ASCII码,ASCII码转字符 [转一下] 抉择 随记一下 关于域用户的AD验证 关于命令模式的一些理解 关于异步委托的部分理解 基于深度优先搜索的蜘蛛程序 观察者模式的简单实现与讨论 下拉框自动回发! 国庆前生活学习计划 2007年总结 看完色戒有感 年前工作计划 Psytopic性格测试! 求助? 关于购买开发用途笔记本的配置 及推荐品牌和型号! 谢谢! 转帖:真爱 就不要等
关于字符串效率问题
沧海一声笑 · 2009-08-14 · via 博客园 - 沧海一声笑

   最近开始着手研究一下字符串的效率问题,大致了解了一下常规提高性能的方法。现在考虑以前碰到的一个题目:有一个很长的字符串,需要统计其中字母的出现频率。
我的大致思路是:
     1  不管怎么样,都得循环一遍,最好能保证循环一遍就统计完
     2  在循环的时候,涉及到对比的情况
         比如,循环碰到字符f,起码f当前的次数有个存储的地方,另外就是要更新当前的出现次数,首先在缓存的地方找到对应的位置
     按照我的想法,主要在2里面提高效率了。正常写法,每循环一个字符,然后在对比26遍(假设主要小写字母,然后更新当前字符出现的频率!
     目前我想到的就是用哈希表,相当于直接定位,统计! 程序性能如下:
                                
     大约是 543w的字符长度,用了375毫秒,测试代码如下:

       public static void Test()
        {
            DateTime a
=DateTime.Now;
            Console.WriteLine(
string.Concat("开始",a.ToString("yyyy-MM-dd hh:mm:ss")));
            
int lenght;
            
string strFilePath="c:\\11.txt";
            StreamReader reader
=null

            reader

=new StreamReader(strFilePath);string str =reader.ReadToEnd();//增加点长度
            str = string.Concat(str, str, str, str, str, str, str, str, str, str, str, str, str, str, str, str, str, str, str, str, str, str, str, str, str, str, str, str, str, str, str, str, str, str, str, str, str, str, str, str, str, str, str, str, str);
            lenght
=str.Length;
            System.Collections.Hashtable ha 
= new System.Collections.Hashtable();for (int k = 0; k < 26;k++)
                ha.Add(
97+k, 0);
       
            
for (int k = 0; k < str.Length; k++)
            {
                
if (ha.ContainsKey(Asc(str[k].ToString())))
                    ha[Asc(str[k].ToString())] 
= int.Parse(ha[Asc(str[k].ToString())].ToString()) + 1
            }
int max=int.Parse(ha[97].ToString());
            
string cs = "a";
           
            
for (int k = 0; k < 26; k++)
            {
                
if (int.Parse(ha[97+k].ToString()) > max)
                {
                    max 
= int.Parse(ha[97 + k].ToString());
                    cs 
= Chr(97 + k);
                }
            }

            DateTime b

=DateTime.Now;
            Console.WriteLine(
string.Concat("结束:", b.ToString("yyyy-MM-dd 24hh:mm:ss")));

            Console.WriteLine(

string.Concat("总长为", lenght.ToString(), "的字符串中出现次数最多的字符是", cs, "次数为", max.ToString(), "用时", b.Subtract(a).Milliseconds.ToString(), "毫秒"));
            Console.ReadLine();
        }


     估计应该还有更好得算法。