posts - 7,  comments - 64,  trackbacks - 0
  2010年12月10日
    我想写一个爬虫程序。现在需要存放访问过的URL。如果用数据库存放则太慢,若放在默认的SET容器中,当到达一定数量时会使程序崩溃。
现在我想把文件直接映射成set<string>容器的空间。也就是set申请的内存全部在我所指定的文件中。
另外程序可用4G空间中有2G是系统保留的。如果进行文件映射后,是不是也只能访问2G的空间?
最后,我想问问,如果我进行了文件映射,同时又从实际内存中申请了一快内存,如何保证映射的地址和从内存中申请的地址不重复呢?
请大家帮帮忙,最后有源码或网站参考。
posted @ 2010-12-10 16:18 HIT@ME 阅读(1939) | 评论 (6)编辑 收藏
  2009年9月3日

我现在需要统计一篇文章中的单词数量,并排序输出。
格式

单词1 500
单词2 499
单词3 300
.....
...
..
.

现在的思路是
第一步:先将单词读入到map<string,size_t> ssmap;当中;这样每次扫描到一个新单词后都可以++ssmap[str];来统计单词数;
第二步:将map中的内容拷贝到vector<pair<string*,size_t> > vec;当中,之后对vec用sort进行排序。(之所以要用string*是因为不希望发生string的拷贝构造,以免浪费时间)。
第三步:将vec输出。

试验了一下上述方法可以正确执行。
但我想应该有更快的方法,请各位赐教一下!


呵呵,谢谢大家这么积极。

字符串长度没有限制,这个从一个分词程序对文章进行分词处理以后的结果。单词可能是“的,了”这种单个字,也可能是“中华人民共和国”这种字符串。还有可能遇到像“\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\...(n个)”这种比较变态的符号。

posted @ 2009-09-03 16:05 HIT@ME 阅读(1894) | 评论 (16)编辑 收藏
  2009年8月20日
     摘要: 最近在百度知道上回答了一道问题,并为他封装了一个类来解决。大意是不开辟新的数组同时排序两个数组。
http://zhidao.baidu.com/question/112777967.html

之后想要给这个类添加iterator好直接使用sort之类的函数,经过1个多小时的忙碌(能力有限,可以鄙视一下),终于实现了random_access_iterator.
  阅读全文
posted @ 2009-08-20 10:06 HIT@ME 阅读(1787) | 评论 (4)编辑 收藏
  2009年8月18日
     摘要: 闲来无事,给一个虚拟文件磁盘的驱动加上了一个GUI。有兴趣的可以看看。(技术含量不高)  阅读全文
posted @ 2009-08-18 13:32 HIT@ME 阅读(2238) | 评论 (4)编辑 收藏
  2009年6月30日

记得以前在一本书上看过boost::shared_ptr的回带来一定的效率损失,但是并不大.今天闲来无事,编译了一个BOOST并简单测试了一下,看看到底有多少性能损失.测试代码和结果如下:

比较函数
template <class T>
class compareP
{
public:
        bool operator() (const T lh,const T rh) const
        {
                return *lh<*rh;
        }

};


boost:
int _tmain(int argc, _TCHAR* argv[])
{
        DWORD oldtime = GetTickCount();
        typedef map<boost::shared_ptr<string>,size_t,compareP<boost::shared_ptr<string> > > container_type;
        typedef container_type::iterator iterator;
        container_type container;
        for (size_t i(0) ; i<500000 ; ++i)
        {
                boost::shared_ptr<string> pstr(new string);
                char buffer[32];
                *pstr = itoa(i,buffer,10);
                container[pstr]=0;
        }
        cout<<GetTickCount() - oldtime <<endl;
return EXIT_SUCCESS;
}

boost结果:
2000
2015
2015
2016
2017


指针:
int _tmain(int argc, _TCHAR* argv[])
{
        DWORD oldtime = GetTickCount();
        typedef map<string*,size_t,compareP<string*> > container_type;
        typedef container_type::iterator iterator;
        container_type container;
        for (size_t i(0) ; i<500000 ; ++i)
        {
                string *pstr = new string;
                char buffer[32];
                *pstr = itoa(i,buffer,10);
                container[pstr]=0;
        }
        cout<<GetTickCount() - oldtime <<endl;
return EXIT_SUCCESS;
}

指针结果:
937
938
954
953
953

执行速度已经相差一倍了.自动内存管理的代价啊!~~~~
环境:Q8200 2.33GHZ 4G内存

以上只是简单的测试,仅拱参考


补充说明:

很多朋友流言说在MAP中存放string*没有意义。可是我上一个项目就需要这么做。

试想我现在有10篇文档,现在需要统计每篇文档当中每个字出现的次数,还需要统计全部文章中全部字出现的次数。为了保证效率,应当保证每个字在内存当中只留一份拷贝(因为以后有可能统计每个词,甚至每句话出现的次数)。要实现这个功能,是否还有更好的算法?


还有朋友流言说指针版没有销毁string指针。可是在这个程序中执行cout<<GetTickCount() - oldtime <<endl;之前shared_ptr也没有释放资源。所以资源的释放不会造成误差。

luck朋友的方法最为有效,把比较函数变成:

bool operator() (const T &lh,const T &rh) const

        {

                return *lh<*rh;

        }

下面是shared_ptr执行5次的时间:

968

969

985

969

969


下面是string*执行5次的时间:

859

875

860

859

860


看来即使是小对象也不能放松!当很多小对象发生构造和析构时所耗费的时间还是不容小视的!~

posted @ 2009-06-30 21:09 HIT@ME 阅读(3711) | 评论 (14)编辑 收藏
  2009年6月12日
     摘要: 大学毕业了!!上来感叹一下!并拿出自己的毕业设计分享一下。
这个小东西是用了一个星期完成的。BUG肯定不少,大家凑合着看一下吧。感觉有趣的就拿去玩玩。
说说基本思路。
1.对文件进行分词处理
2.通过统计训练文档当中的词频方差,构造评判矩阵
3.之后在构造待分类文档的评判向量
4.用评判向量和构造矩阵相乘,选出最接近的分类。
程序文件:
  阅读全文
posted @ 2009-06-12 21:38 HIT@ME 阅读(1373) | 评论 (2)编辑 收藏
  2008年12月29日
2008.12.29
   昨天晚上终于把象棋的棋盘画出来了!
   今天则需要把棋子初始化,之后放到象棋开局的位置上。(这个工作也顺利完成了)
   现在的工作是如何在CplayDlg类上面移动棋子。现在的思路是在棋盘类当中加入一个二维数组,将屏幕坐标和棋盘的逻辑坐标一一对应,以方便查找。然后将选定棋子move到新的位置,再调用OnPaint();
   顺便说一下现在程序当中的类
   CplayDlg----MFC生成的主要类
   CCheckerman----自己写的棋子类。主要方法就是MOVE。
   CChessboard----自己写的棋盘类。负责画出棋盘,并且建立屏幕坐标和棋盘逻辑坐标的对应关系~!
目前界面做到这个程度了。30号先回学校考试。之后听完今年的维也纳音乐会再来继续做吧~!

顺便说一下。这个棋盘是我自己一笔一笔用VC画出来的。真费劲啊!还有那些棋子的素材也来之不易。我把一个象棋游戏当中的资源给拔下来了!又需要素材或者源程序的朋友请邮件联系!~


ps:这个游戏的四大目标
   1、实现双人同机对战
   2、实现双人网络对战
   3、实现人机对战
   4、加入后台数据库实现用户注册和积分等功能。注册部分希望可以独立的使用Ruby on Rails写出来!

小弟初学乍练。不到之处多多包涵!



2008.12.31
   在2008年最后一天的下午,我又想写一写这个想起程序了。
  目前遇到的问题是由于使用DrawIconEx等函数实现棋子的移动效果的时候屏幕会出现闪烁!请问各位如何防止这种情况的出现呢?换句话说就是在调用OnPaint函数的时候,只刷新当前棋子位置的屏幕,而其他部分则不刷新!
  第二个问题是我想用GDI+来显示ICO图像。可是却失败了,源码如下……
                Image image(L"C:\\Users\\Administrator\\Desktop\\ico128.ico");
                CRect rect;
                GetWindowRect(&rect);
                Graphics graphics(hdc);
                graphics.DrawImage(&image, 0, 0,rect.Width(),rect.Height());
 但是当把imang参数变为L"C:\\Users\\Administrator\\Desktop\\i200831313448532_2.jpg就能显示出来。不知道是不是GDI+不支持ICO格式呢?(我又检查了一遍,路径没有问题!);
  请各位老大赐教一下吧!~

posted @ 2008-12-29 00:30 HIT@ME 阅读(2754) | 评论 (18)编辑 收藏
仅列出标题  
<2024年3月>
252627282912
3456789
10111213141516
17181920212223
24252627282930
31123456

常用链接

留言簿(5)

随笔档案

test

搜索

  •  

最新评论

阅读排行榜

评论排行榜