{ Snake @ NET } 废寝忘食的程序工作者.

1九/100

LOVE is SUPER EASY.

喵好不容易在博客上更新了一篇文章.

这还是一堆图片和简简单单的几行字的随笔.

主题是关于我最后一个暑假的最后几天.

内容是我和某喵去放风筝,可笑的是我22岁才成功把风筝放飞到天上.

阳光刺眼,就像我们现在的年龄.穿透金色的风筝,把风筝照成金色.

其实某喵孩子气到完全不像她的年龄,而我却对玩乐完全不上心.

她的任性总是让我妥协,而这些小玩意的确让我们在一起的时光变得更加美好.

其实,爱超级简单,每天都能在睡前亲切地说一句"晚安",即使两人在睡觉前吵了一个多么史无前例的架.

标签: 没有评论
6五/100

编程基本功之算法(1)–快速排序与冒泡排序

作为计算机应用专业的学生,个人觉得这个专业在未来是绝对要饿死的.所以如果对计算机研究不深,咱们还是老老实实回家卖香鸡排(注1)都比搞IT赚钱.

自学了1年10个月的ASP.NET平台和C#语言的开发,期间被魔兽世界和各种公务打断了半年多,学了个大概懂得不少架构方面和程序设计方面上的知识.自己也可以算是个超越了"新手上路"级别的程序员了.可是当有一天博客园的大牛之一老赵(注2)在招聘北大青鸟(注:专业IT技能培训学校)毕业的学生时要求他们写一个数组反转的代码,结果令他很失望.老赵一失望,我就快绝望了.

立马要离校实习的我目前虽然看法和这些北大青鸟毕业的学生不一样,但是自己同他们还是有很大的相似之处--能盖空中楼阁.光有花拳绣腿,真正那些底子是一点也没有.最终悲剧的还不是自己.要有浓厚的底蕴你才会洋溢出耐人寻味的芳香.花拳绣腿在专业人士看来就像村姑抹法国香水一样可笑.

所以在老赵的"开化"之下,我开始认真的研究起计算机科学这一门学科与计算机编程有关的科目.其中就包括--算法.(当然还有好多与本次笔记无关的东西)

当然在学习算法之前得熟悉一下基本的数据结构.好在上个学期老师已经教过我们,并且前些日子我也认真的复习了一遍.不过由于它太过简单.个人认为就没必要写一份关于数据结构的笔记了.

关于算法的基本常识,包括时间复杂度,空间复杂度那些我就不罗嗦了,直接上链接.

记得大一学C语言的时候老师教我们用循环控制语法的时候有一个题目就是关于排序的.题目如下:给定一个数组,根据对比数组的某两个元素的大小,有序的重新排列数组.

答案也很简单.就是两个for循环遍历整个数组,对比当前所选的两个元素的大小让他们交换位置.最终完成排序.后来老师告诉我们这叫冒泡排序.这个排序算法的名字很形象.最小的那个数字回像冒泡泡一样从某一个位置慢慢得浮上来.

main()
{
    int a[] = {5,6,2,3,1,9,7,4,8};
    int l=9;
    int i=0,j=0;
    int temp;
    for(;i<l;i++)
    {
        for(;j<l;j++)
        {
            if(a[i]>a[j])
            {
                temp=a[i];
                a[i]=a[j];
                a[j]=temp;
            }
        }
    }
    for(i=0;i<l;i++)
    {
        printf("%d ",a[i]);
    }
    getch();
}

以上为C语言的实现方法.核心代码不多,也就那么11行.但是明显可以看出它的不高效.

上面的2个for表明这个代码要运行"l"的平方次,也就是81次.而且是必须执行81次.

程序就是程序,人可以通过眼睛的观察然后判断,最终的对边的移动最多也不过20次.

那么有什么办法让数字的遍历次数变少呢?一个1962年提出的古老的排序算法(其实一点都不古老,好多现用的算法都是已经诞生了几十年并且历经时间的磨砺)但依旧是世界上最快的算法,它的名字果真名副其实--QuickSort(快速排序),让我有必要与它会一会面.

快速算法是基于分治算法的理论而设计出来的一种排序方法.基本思想是这样的.

(1)在将要排序的数组arr中随便一个位置抽取一个元素作为对比项key.

(2)定义2个变量low,high分别为数组的最低下标和最高下标.

(3)对比key与最高下标的值hiVal.如果hiVal小于key,那么hiVal与key调换位置,否则high-1

(4)对比key与高低下标的值loVal.如果loVal大于key,那么loVal与key调换位置,否则low+1

(5)重复(3)(4)2步,直到所有比key小的元素都在key的左边,比key打的元素都在key的右边.此时整个数组以key为基准分为了2组暂且名为lPart和rPart.

(6)这时再递归(1)~(5)的操作,当然此次递归的数组不是原来我们执行操作的数组arr,而是分组之后lPart和rPart.

由上面的的步骤看来快速排序会将原本的一个数组分割成为2个,2个变为4个,4个变为8个,直到排序完毕.

那么快速算法的时间复杂度是什么呢?教科书上写着:

最糟糕的情况下它与冒泡排序是一样的时间复杂度O(n的平方)

最良好好的情况下它的时间复杂度是O(nlogn)

平均下来它的时间复杂度是O(nlogn)

由于本人高中时期的无知.数学一直没有好好学习.以至于对数学的理解非常吃力.(真是对不起我们可爱的阿满老师)

但是操起计算器计算下这两种算法的耗时量是多少就非常明白了.

假设对比或排序一次总共耗时1秒.并且数组的长度为20,那么

冒泡排序耗时:20*20=400秒

快速排序耗时:20*log20=26秒.

当然实际相差有的时候不是那么明显.我将我的这次对比用C#写成一个小程序并且进行了一次对比(在学校机房里偷偷做的.用的是奢侈的INTEL CPU).结果我也记录了下来那么我就贴在低下.这是一个真实的INTEL核心计算机运行了一千万次冒泡排序和快速排序所耗费的时间统计报告:

-----------------------------------------------------------------------------

Platform Configuration

--CPU: Pentium Dual-Core E5300 @2.60GHz

--MEM: 2GB DDR2

--.NET Framework Version: 2.0

--IDE: SharpDevelop v2.2

Introduction:

--All of the Excute file is the RELEASE version.

--The QuickSort is the original version.

*****10 Million Times of 10 numbers to sort*****

--The Array Elements are: {1,8,7,9,6,5,4,2,10,3}

1     bs10     2626ms

2     bs10     2618ms

3     bs10     2620ms

1     qs10     2650ms

2     qs10     2647ms

3     qs10     2647ms

*****10 Million Times of 20 numbers to sort*****

--The Array Elements are:

{5,7,9,4,6,8,3,1,2,10,14,16,15,13,12,17,19,18,20,11}

1     bs20     8473ms

2     bs20     8468ms

3     bs20     8467ms

1      qs20     6972ms

2     qs20     6971ms

3     qs20     6974ms

*****10 Million Times of 30 numbers to sort*****

--The Array Elements are:

{3,5,8,6,7,9,1,2,4,14,11,18,16,12,15,13,19,17,21,10,20,25,27,23,29,28,22,24,26,30}

1      bs30     18164ms

2      bs30     18164ms

3     bs30      18165ms

1      qs30     12362ms
2      qs30     12352ms
3      qs30     12358ms

-----------------------------------------------------------------------------

不知道够不够严谨.我将会把这次测试的源代码,程序和报告提供下载

最后您可能会问:快速算法的代码在哪里啊!

google百度一大堆呢.不过为了赚点吆喝,我放上微软核心的快速排序代码.这也是我深入了解ASP.NET平台的一个举措.代码如下:

internal static void QuickSort(T[] keys, int left, int right, IComparer<T> comparer)
{
    do
    {
        int a = left;
        int b = right;
        int num3 = a + ((b - a) >> 1);
        ArraySortHelper<T>.SwapIfGreaterWithItems(keys, comparer, a, num3);
        ArraySortHelper<T>.SwapIfGreaterWithItems(keys, comparer, a, b);
        ArraySortHelper<T>.SwapIfGreaterWithItems(keys, comparer, num3, b);
        T y = keys[num3];
        do
        {
            while (comparer.Compare(keys[a], y) < 0)
            {
                a++;
            }
            while (comparer.Compare(y, keys[b]) < 0)
            {
                b--;
            }
            if (a > b)
            {
                break;
            }
            if (a < b)
            {
                T local2 = keys[a];
                keys[a] = keys[b];
                keys[b] = local2;
            }
            a++;
            b--;
        }
        while (a <= b);
        if ((b - left) <= (right - a))
        {
            if (left < b)
            {
                ArraySortHelper<T>.QuickSort(keys, left, b, comparer);
            }
            left = a;
        }
        else
        {
            if (a < right)
            {
                ArraySortHelper<T>.QuickSort(keys, a, right, comparer);
            }
            right = b;
        }
    }
    while (left < right);
}

private static void SwapIfGreaterWithItems(T[] keys, IComparer<T> comparer, int a, int b)
{
    if ((a != b) && (comparer.Compare(keys[a], keys[b]) > 0))
    {
        T local = keys[a];
        keys[a] = keys[b];
        keys[b] = local;
    }
}

最后维基百科上有更完备的快速排序的只是,只是需要你有足够的英语基础:http://en.wikipedia.org/wiki/Quicksort

好了.我的文章写完了.希望能帮到你 :D

---------------------------------------

注1:蔡学镛先生写过一套文章,叫做香鸡排三部曲.我这里随便给一个链接吧,原文链接真的不好找.http://chechunhui.bokee.com/2841263.html

注2:博客园大梁之一:赵劼,个人最为喜欢的程序员之一.非常有学术味道的钻研精神.http://blog.zhaojie.me http://cnblogs.com/jeffreyzhao

27二/102

Godaddy虚拟主机用后感.

Snake于2月2日购买了Godaddy的Economy Hosting-Windows-Monthly虚拟主机服务(不要问我为什么不用Linux,肯定是有原因的)但是使用了近一个月之后发现在20:30~24:00(美国的12:00左右吧)这一段时间的访问速度超级慢,甚至有时候可以到当机的地步,于是我就向Godaddy的Support team伸手援助.当然就不要在语法方面刁难英语水平很烂的我了,还好对方大致会看得懂.

-----------------------------my first email to godaddy support team-------------------------------------

I don't know you guys did it,
my host almost can't visit at the daytime!
It's too slow too show any page,and it's too slow to visit as if my web host is down!
Please solve this problem as soon as posible.Maybe some website bear away all the bandwidth,or the server which my host in it was overload?

-----------------------------my first email to godaddy support team-------------------------------------

大致内容就是说这个虚拟主机在美国白天的访问速度很慢,是不是本台服务器承载了太多虚拟主机或者某个虚拟主机抢走了几乎所有的流量?到了对方上班的时间,他回复到:

-----------------------------the first response  from godaddy support team-------------------------------------

Thank you for contacting online support.

During our review of your account, we did not see any issue with the operational status of your hosting account and your site appears to be setup and accessible without issue. I have tested with multiple browsers, and multiple connections and was not able to duplicate the latency that you have described.

Please let us know if you are still experiencing an issue along with a detailed account of the error message(s) or other symptoms and a list of steps taken to replicate the issue and we will be glad to further research this for you.

Please let us know if we can help you in any other way.

-----------------------------the first response  from godaddy support team-------------------------------------

大致意思就是说他经过测试,没有发现我描述的状况(还使用多种浏览器测试= =)可是当天晚上服务器访问速度还是明显的减慢.于是我回复到:

-----------------------------my 2nd email to godaddy support team-------------------------------------

No,no,My host will be very slow from 20:00 to 24:00 in China(10:00
a.m.~2:00p.m. at the server location).I know the server will very busy at
this time but my host will be very very slow that sometimes I can't open a
page in 1minite! so you'd better test the server bandwidth at the "very busy
time",'cause my host is very fast when you're sleeping.
But thank you for your response.

-----------------------------my 2nd email to godaddy support team-------------------------------------

当我第二天早上醒来的时候发现邮箱已经收到了Godaddy的回复,这次内容很长,我先放上内容的主要部分:

-----------------------------the 2nd response  from godaddy support team-------------------------------------

Unfortunately I am unable to duplicate any slowness on your website during the time frame you have mentioned. However, I did notice that you are currently utilizing Legacy hosting. If you find that load times for this type of hosting are unacceptable at times, you may wish to consider switching to Web Hosting.

-----------------------------the 2nd response  from godaddy support team-------------------------------------

他说到:我还是不能检测出您的虚拟主机有什么毛病,如果你对我们的虚拟主机速度不满意,您可以尝试一下我们的别的Web Hosting..

余下的内容就是在推销我使用Grid Hosting,Grid Hosting vs Shared Hosting,我简直就不想看,也不想想我是个学生,也不想想人名币和美元的汇率,Grid Hosting根本offer不起= =

看来无解了,godaddy support team 否认我描述的情况,并且摆出一副"即使有你说的这种情况,也是你一分钱一分货买到东西的质量问题"的架子让我根本不知道要怎么回复他们了.算了.最近再测试一下这个虚拟主机,看看还会不会发生类似的事情.

老实说,国外的东西就是没有在国内的放心.

14二/100

Chrome出现0xc00000a5的错误的解决办法

前几天明明能打得开的chrome网页浏览器这两天竟然出现了下面问题:—————————
Windows – 应用程序错误
—————————
应用程序无法正常启动(0xc00000a5)。请单击“确定”关闭应用程序。
—————————
确定
—————————

解决办法是有,就是在chrome的快捷方式后面添加"--no-sandbox"(no的前面有两个减号).可是不能用chrome的沙箱总是感觉怪怪的,明明前两天还能用的啊!

思考了一会儿,有结论了.我们知道 chrome是基于webkit内核的浏览器,基于webkit的浏览器还有著名safari和国内的双核浏览器Sogou Explorer 2.x,今天还貌似出了个世界之窗chrome内核版本.这都是跟chrome本身是有冲突的.而我前两天图新鲜,装了个Sogou Explorer 2.0就与chrome内核发生冲突了.

于是我果断的删除了Sogou Explorer 2.0,而结果恰恰在我预料之中.OK,问题解决完了,可是chrome的"体质"可就令人郁闷了.话说堂堂世界互联网巨头的浏览器也能随随便便被一个同内核的浏览器给搞的半残废,这是google员工应该解决的一个小问题.

而在国外的网站里我也搜索到了有用户因为safari而无法启动chrome的原因.

好了,问题解决了.但是,我可不保证如果你的chrome浏览器出了这个问题,就一定是这个原因,不好说的:)

希望能帮到您!

6二/101

Hello world!

重新开博了,摆脱了规矩重重的中国互联网,也因为Blog Engine的人气不高而丢掉它了.

WP,在2010年,希望和你能好好配合,让更多的人发现并喜欢我的博客.

我是个ASP.NET平台的程序员,为什么会放弃BlogEngine.NET而到Word Press呢?说实话,刚安装完WP的时候我找了一写PHP语言的基础知识看看,一看到php也是弱类型语言的时候就有点头疼了(被JavaScript搞怕了).也没怎么细看.感觉ASP跟PHP在语法和编程套路上还是有一定程度的相似的.也终于明白为什么php近几年来的冲劲如此大了,我猜想一定有一部分asper因为asp本身的弱势而转到php编程.

我很佩服WP的人气.也在想为什么BlogEngine的人气高不起来,没有好多好玩的插件,没有众多主题可挑选.虽说我是程序工作者,但是毕竟一个博客,不想什么都自己来.在这方面我更想拿来主意一些.所以WP更适合我.我是插件狂人,WP一样,WOW也一样.

就到此为止吧,WP还有好多我要研究的地方.首先...代码高亮插件在哪?