Vitaminc.net on CSDN

范维肖ID:lovewangshu
8779次访问,排名11263(1)好友6人,关注者4
lovewangshu的文章
原创 20 篇
翻译 0 篇
转载 0 篇
评论 2 篇
维生素C.net的公告
人才频道最新招聘信息(C#):

Books Reading:


最近评论
venjiang:大型值类型 是啥意思?
Jack:建议用用CodeSmith更方便一些
文章分类
收藏
    相册
    ghq
    Link
    维生素C.net@博客园
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 利用数学方法来大大降低一个逻辑判断实现的难度的例子收藏

    新一篇: IE7中的RSS功能和Windows RSS Platform的简单介绍

    这是我的毕业设计(一个名叫viBlogging的blog系统)中需要的一个功能:在用户注册时根据输入的密码来显示密码强度(模仿passport的,不过是使用Atlas)。
    对于密码强度,分为弱、中、强三等级,我的判断规则是:

    1。如果密码的位数在3~4位之间,如果只含有字母,那么强度为弱。
    2。如果密码的位数在3~4位之间,,如果还含有数字,那么强度也为弱。
    3。如果密码的位数在3~4位之间,如果含有非字母数字的字符,那么强度为中。
    4。如果密码位数在5~7之间,只含有字母的强度为弱
    5。如果密码位数在5~7之间,同时还有数字的强度为中。
    6。如果密码位数在5~7之间,同时还有非字母数字字符的强度为强。
    7。如果密码长度大于7,如果只含有字母,那么强度为中。
    8。如果密码长度大于7,如果还含有数字的话强度为中。
    9。如果密码长度大于7,如果含有非字母数字字符的话,强度为强。

    如果此时昨晚规则的分析后就着手写代码的话,那要写一堆if嵌套了。这样做的话,很可能会使得逻辑陷入混乱,很有可能一些情况就被忽略过去了。更为严重的是,这样写严重降低了代码的可读性。如果我必须用这样的方式来写,那我首先会去写unit test,其次再附详细的doc或注释来说明。

    Okay,那我们进一步来分析一下。我们上述的9个条件都是由密码长度密码复杂度两部分来结合判断出来的。那么我们可以拆分一下,如下图所示(请大家先只看第一个表格):(我点"insert image from gallery"后显示访问的资源不存在,无法从博客园这插入图片了,所以在首页可能看不到有图片)

    o_viblogging password strength checking rule.PNG

    我们现在写两个函数,分别计算长度和复杂度对应的强度,并返回。这里我们用{0,1,2}和{0,1,3}来表示(为什么后者是{0,1,3}在后面会讲到)那么我们可以很容易把上面的9个规则总结成第一个表格来表示。

    到这里为止,我可以分别使用i和j来表示拆分后的强度的表示,好,现在我们可以去写清晰一点的if..else嵌套或if..switch嵌套了,这里我们可以用标识符了,采用了简单的分而治之的思想,整个规则也被简化为了7步了(读者可以自己考虑一下),思路清晰了许多。

    但是目前为止,我们还是没有脱离嵌套条件分支语句的尴尬和不便

    Okay,我们继续对这个逻辑的返回结果作分析:
    强度:情况1,情况2 = {(i1,j1),(i2,j2),....} § [(i+j)min,(i+j)max]

    Strong: F,I = {(!0,3)} § [4,5]
    Medium: G,E,H,C = {(2,0),(!0,1),(3,0)} § [2,3]
    Weak: A,B,D = {(0,!3),(1,0)} § [0,1]

    好,这样结果就很清楚了,当返回的i+j在>3时,那么强度肯定是strong的,如果小于2,那么肯定是weak的,剩下的就是Medium的了。这样只要写一个switch就完成任务了(我只在有双分支的时候用if,2个以上的都用switch,学过编译原理的应该知道它比if效率高,可是.net中他俩有什么性能区别我不知道,但是如果不出意外,应该还是比if效率高吧)。

    此文仅在提供一种分解问题和归类问题各部分结果的小方法,当然也有“运气成分”(这就是为什么用{0,1,3}不用{0,1,2}的原因)。抛砖引玉,希望能学到更好的解决办法。
     

    发表于 @ 2007年01月22日 18:41:00|评论(loading...)|编辑

    旧一篇: 效率!数和字符串的转换

    评论:没有评论。

    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © 维生素C.net