Re: 答复: [cpp] 请问一下 如何判断一个8位数是否是有效日期

云风 cloudwu at gmail.com
Fri Sep 22 22:02:31 CST 2006


把月和日分离出来判断,要多做一次除法,多做一次比较。而查表方面,查 12 和 1231 的表效率是一样的。而且直接把月/日的组合用
>1231 剔除,可以提高处理大量数据的速度。如果是在大量的平均分布的随机数据中挑出日期合法数据,这个方案要比分离年月日来判断要快的多。

内存方面,多一个预创建的 1K 的数组并不大。

至于可不可取,要看需求。我不认为是"很不可取的"。
我相信,如果需要处理大量无规则数字的日期合法性校验,我的算法可以快一个数量级。

在 06-9-22,analyst<qiaojie at gmail.com> 写道:
> 云风的方法很不可取,代码又罗嗦又浪费内存。最简单有效的方法还是构造一个记录每月天数的数组,这样代码最简洁内存也很节省。孟岩还要搞什么hash表,已经属于恶搞了。
>
>
> 在06-9-22,孟岩 <myan at csdn.net> 写道:
> > 把这个tradeoff推向极致,还可以做一个稀疏疏组,或带有false缺省值的hash,事先
> > 把有效日期全填到keys里面,设value为true。然后把这个8位数拿来作为key查一下
> > value,平均一次查找就可以判断是否有效日期。"有效日期"的范围越小,这种方案
> > 效果越好。
> >
> > -----邮件原件-----
> > 发件人: cpp-bounces at codingnow.com [mailto:cpp-bounces at codingnow.com] 代表
> > Chen Shuo
> > 发送时间: 2006年9月22日 7:12
> > 收件人: C++ Discuss Group
> > 主题: Re: [cpp] 请问一下 如何判断一个8位数是否是有效日期
> >
> > Space-time tradeoff, 漂亮 !
> >
> > On 9/21/06, 云风 <cloudwu at gmail.com> wrote:
> > > 创建一个 bool 数组 [1232] 填入是否是有效日期的状态。
> > > 把后四位取出来,看是不是 >1231 ,然后在前个数组中检查是否是有效日期
> > > 再检查前 4 位的年份是否有效
> > > 最后,如果日期是 0228, 再检查一下,是不是闰年。
> > >
> > > 在 06-9-21,Carl Liu<xxliu at cn.henyep.com> 写道:
> > > >
> > > >
> > > >
> > > >
> > > > 请问一下 如何判断一个8位数是否是有效日期, 如int nDate = 20060921。
> > > > 我打算将前4位、4~6位,7~8位分别取出来对比有效的年、月、日。 请问有没有更
> > 好一点的方法。
> > > >
> > > >
> > > >
> >
> > _______________________________________________
> > Cpp mailing list
> > Cpp at codingnow.com
> > http://codingnow.com/mailman/listinfo/cpp
> >
> > _______________________________________________
> > Cpp mailing list
> > Cpp at codingnow.com
> > http://codingnow.com/mailman/listinfo/cpp
> >
>
>
> _______________________________________________
> Cpp mailing list
> Cpp at codingnow.com
> http://codingnow.com/mailman/listinfo/cpp
>
>


-- 
http://blog.codingnow.com



More information about the Cpp mailing list