读书人

排序提取的算法

发布时间: 2012-03-29 12:53:12 作者: rapoo

求一个排序提取的算法
一个文件(大约40M)
文件里面每一行都是一个网址

如一个文件:
http://forum.csdn.net/PointForum/Forum/PostTopic.aspx
http://forum.csdn.net/
http://csdn.net/
....

求:显示文件里面重复最多的10个网址,的算法!!!

速度要快!


格式如下:
------------------------------------
重复次数最多的10名
http://csdn.net/ 重复1000次
http://forum.XXXX.net/ 重复800次
http://XX.net/ 重复500次
.....


我比较笨,请写具体思路,或代码,谢谢



其实这个就类似“51啦”网页流量统计

[解决办法]

C# code
public class TCount    {       private string _Url;       public string Url {           get { return _Url; }           set { _Url = value; }       }       private int _Count;       public int Count {           get { return _Count; }           set { _Count = value; }       }       public TCount(string _Url, int _Count) {           this._Url = _Url;           this._Count = _Count;       }    }    public class DoCount {        private string _FilePath;        public string FilePath {            get { return _FilePath; }            set { _FilePath = value; }        }        public DoCount(string _FilePath) {            this._FilePath = _FilePath;        }        /// <summary>        /// 读取数据,并统计        /// </summary>        /// <returns></returns>        public IList<TCount> CountUrl() {            IList<TCount> IT = new List<TCount>();            StreamReader sr = new StreamReader(this._FilePath);            while (sr.ReadLine()!=null) {                IT = ReCorrectCount(IT, sr.ReadLine());            }            sr.Close();            return IT;        }        private IList<TCount> ReCorrectCount(IList<TCount> IT, string url) {            int i = 0;            bool blnIn = false; //用于标识url是否已存在于IT中            foreach(TCount T in IT){                if (T.Url == url) { //如果存在,则更新统计数                    IT[i].Count += 1;                    blnIn = true;                    break;                }                i++;            }            if (!blnIn)//如果不存在则添加新项                IT.Add(new TCount(url, 1));            return IT;        }    } 

读书人网 >C#

热点推荐