独立思想是最宝贵的

多写原创的文章
posts - 6, comments - 60, trackbacks - 0, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

公告

2011年12月16日

摘要: 有一道买电影票的问题网上发布的答案都是错误的,误人子弟,却没有人指正出来,余甚感痛心。在此写出我的解法。 题目:有2n个人排队进电影院,票价是50美分。在这2n个人当中,其中n个人只有50美分,另外n个人有1美元(纸票子)。愚蠢的电影院开始卖票时1分钱也没有。问: 有多少种排队方法 使得 每当一个拥有1美元买票时,电影院都有50美分找钱注: 1美元=100美分拥有1美元的人,拥有的是纸币,没法破成2个50美分 网上的答案一般是:本题可用递归算法,但时间复杂度为2的n次方,也可以用动态规划法,时间复杂度为n的平方,实现起来相对要简单得多,但最方便的就是直接运用公式:排队的种数=(2n)!/[n.阅读全文

posted @ 2011-12-16 11:35 漂流的鱼 阅读(90) 评论(0) 编辑

2011年12月15日

      有一道很有意思的题目:三个小伙子同时爱上了一 个姑娘,为了决定他们谁能娶这个姑娘,他们决定用枪进行一次决斗。小李的命中率是30%,小黄比他好些,命中率是50%,最出色的枪手是小林,他从不失 误,命中率是100%。由于这个显而易见的事实,为公平起见,他们决定按这样的顺序:小李先开枪,小黄第二,小林最后。然后这样循环,直到他们只剩下一个 人。那么这三个人中谁活下来的机会最大呢?他们都应该采取什么样的策略?


      网上有很多人在讨论但没有一个是经过严格推敲的,我在这里把看法写出来,欢迎大家讨论。


      先说策略,肯定是小李和小黄合力把小林打死符合他们两个人的最大化利益,这里不解释,如果有不同意的把你的答案贴出来看与我的答案相比他们2个人的生存率更大。小林肯定是首先对小黄动手因为对他威胁最大。


      先计算小林的,比较简单(谁让他成众矢之的):小李第一次没打死他,小黄也没成功,小李第二次还是没打死他,概率为 0.7*0.5*0.7=0.245。


      小李和小黄的计算很麻烦,他们两都没把握一次打死对方,导致会多次PK,这里先设置一个简单的情况计算好2者的概率,后面直接引用结果即可。


      分解出小题目:小李和小黄PK,小李的命中率是30%,小黄比他好些,命中率是50%,问小李先开枪的情况下生存率如何,小黄先开枪的情况下又如何。解答如下,A)小李先开枪,小李的生存率为0.3+0.7*0.5*0.3+0.7*0.5*0.7*0.5*0.3+0.7*0.5*0.7*0.5*0.7*0.5*0.3+......。解释一下,每一个+号都代表一种情况,第一组是小李一枪就打死了小黄概率为0.3;;第二组是小李没打中(0.7)乘以小黄也没打中(0.5)乘以小李第二轮打死小黄(0.3),所以是0.7*0.5*0.3;;后面一组就是更多一轮的情况,小李生存下来的情况有N多种,越到后面概率越小。根据计算公式,当n<1时有:n+n^2+n^3+n^4+...... = n/(1+n)。可以得出小李的生存率是0.461,小黄是0.539。       B)小黄先开枪与上类似,可算得小黄的生存率为0.5+0.5*0.7*0.5+0.5*0.7*0.5*0.7*0.5+0.5*0.7*0.5*0.7*0.5*0.7*0.5+...... = 0.769,小李是0.231。


      好,上面把小问题说清楚了咱们继续讲,对于小黄有这么几种情形,A)小李打死小林,剩下小李小黄PK,小黄先开枪,概率为0.3。    B)小李没打死小林,小黄把小林打死了,小李小黄PK,小李先开枪,概率为0.7*0.5。   套用上面的概率A) 0.3*0.769  ;B)  0.7*0.5*0.539 。 二者合并是0.419


      所以最终答案应该是小黄0.419,小林0.245,剩下小李是0.336


      为验证答案在计算下小李的,看是否与上面的一致。小李有这么几种情形,A)小李打死小林,剩下小李小黄PK,小黄先开枪,概率为0.3。    B)小李没打死小林,小黄把小林打死了,小李小黄PK,小李先开枪,概率为0.7*0.5。   C)小李没打死小林,小黄也没打死小林,小林一枪把小黄毙了,剩下小李只有30%的概率能打死小林,否则就over了。小李生存率为0.7*0.5*0.3 = 0.105    套用上面的概率A) 0.3*0.231  ;B)  0.7*0.5*0.461  C) 0.105。 三者合并是0.336和上面结果一致。


=============================上面的答案是错的,看了devil_lei的评论后有新的概率====================

       因为小李可以选择放空枪,这样算法变了:


       小林的生存率提高了,变成0.5*0.7=0.35

       小黄的压力变大了:0.5*0.539=0.27   (50%的概率把小林打死,然后跟小李PK胜率0.539)

       小李的概率也变大了:0.5*0.3 + 0.5*0.461=0.381    (前面一组是跟小林PK,后面一组是跟小黄PK,都是小李先出枪)


       呵呵,枪法最差的生存率最高,就是比较阴险,第一枪居然放空枪。


      


      

       

posted @ 2011-12-15 15:35 漂流的鱼 阅读(5152) 评论(52) 编辑

2011年10月27日

摘要: 首先声明这2个无刷新级联下拉框的jquery插件完全是自己原创的,经过严格的测试,正确使用不会出现bug。灵活性方面考虑了比较多的方面,提供了几个重要的配置方便在各类环境下使用,欢迎各位童鞋使用,源码完全开放。开发这个插件的缘于前段时间维护一个4级级联下拉框被里面200行代码及复杂的结构和bug所郁闷(之所以这么多代码是因为该级联下拉框有时只出现2个或3个),想到这类的需求其实经常都能遇到,jquery里没有这样比较好的插件,索性自己开发个。源代码并不复杂,稍微复杂的地方在第二个插件使用了缓存,造成理解起来十分困难,后面会做些解释。 插件一:适合在不与服务器进行AJAX交互情况使用,需预先将.阅读全文

posted @ 2011-10-27 11:29 漂流的鱼 阅读(316) 评论(3) 编辑

2011年8月1日

      前些天使用Jquery.validate插件时遇到这么一个难题:在修改密码的弹出层中使用验证但又不能影响页面上其他区域的验证。翻阅了很多文档(包括官方的)都没有解决方案,现有的解决方案都是解决已知要验证的多个区域,这样的解决方案可看这篇文章(http://www.cnblogs.com/Cheese_Ren/archive/2009/04/30/1447166.html)。但是遇到弹出层里要验证,同时不破坏未知的底层页的验证上面的方法就解决不了(这也是因为asp.net整个页面只有一个form表单造成的)。

      我这里提供的方案实际上是个取巧的方法:先将form表单旧的验证规则另存到一个对象中,然后验证当前需要验证的控件,最后在把验证规则替换成第一步中保存好的对象。比如说:网站右上角有个修改密码功能,点击之后是弹出层,里面是输入新密码,用户可以不修改密码直接关闭这个层做别的动作,这时不能影响原有页面的验证。那么可以使用如下的代码:

 1 var newSetting = {
2 rules: {
3 txtOldPWD: { required: true },
4 txtNewPWD: { required: true },
5 txtNewPWD2: { required: true }
6 },
7
8 messages: {
9 txtOldPWD: { required: "请输入原密码" },
10 txtNewPWD: { required: "请输入新密码" },
11 txtNewPWD2: { required: "请输入新密码" }
12 }
13 };
14
15 var validator = $('form').validate();
16 var oldSet = { messages: validator.settings.messages, rules: validator.settings.rules };
17 $.extend(validator.settings, newSetting);
18
19 var valid = validator.form();
20 $.extend(validator.settings, oldSet);
21 if (!valid)
22 return false;

由于js中对象是引用类型因此不能直接把$('form').validate()放到变量中,否则后面新规则会一起把该变量的值修改,我这里使用var oldSet = { messages: validator.settings.messages, rules: validator.settings.rules };这样的方式确保创建的是一个新对象。20行代码则是把验证规则替换回去以便保持旧页面验证规则。

      上面这段JS应该是在弹出层的提交按钮的click事件中执行才对。

posted @ 2011-08-01 14:21 漂流的鱼 阅读(1331) 评论(0) 编辑

2011年7月27日

摘要: 今天想做个repeater用xml做数据源的东西,上网查了下资料还真是少,于是就自己动起手来,其实是很简单那。关键就是明白数据控件中Container.DataItem的含义和用法即可阅读全文

posted @ 2011-07-27 13:51 漂流的鱼 阅读(168) 评论(5) 编辑

摘要: asp.net网站经常会遇到升级或者修改url参数导致继续使用旧的页面地址会发生错误,这种网站404错误很多人只是在web.config里定义错误转向页或者在Global.asax里捕捉错误之后跳转到错误提示页上。这样简单处理对搜索引擎并不友好,因为asp.net返回的状态不是404而是302跳转,会给搜索引擎误导导致搜索还保留无效的页面地址。正确的设置自定义404错误页面应该返回“404”错误代码并显示错误提示信息,而不是 “200”或“302”状态阅读全文

posted @ 2011-07-27 13:41 漂流的鱼 阅读(137) 评论(0) 编辑