了解知识

对8皇后的解法,我用python与groovy两种动态语言测试过,后来再用c测试。
把阶数增加到12,即12皇后,相同的算法,用python是46.75秒,用groovy是44.09秒,相差不大,但是其他阶数的测试也是groovy稍稍领先于python。

可见groovy作为新一代的动态语言,效率一点不低。可惜现在就是资料稍稍少了一点。

为了公平起见,python没有用生成器,否则就不是“相同算法”了。用的是用列表模拟生成器的方案,与groovy完全一样。

不过后来试试,用了生成器是46.67秒,几乎可以说是没有什么变化。最多是内存占用少(这只是理论上的结论,没有测试过)

最后我不甘心,用c写了相同的算法。结果12阶皇后问题的解决时间是……5秒。
就算不用程序计算,也明显能发现C的速度快太多太多了!!!!!

难怪C能一路以来屹立不倒。差距太过明显!不过python等程序更易写也是事实。写C真的太麻烦了。python列表操作只需一句话,C随时得写一段代码……

结论其实跟一般的说法并没有不同。只是对这个速度的差距有了更深的认识。就是在超大量运算时,真的差很远很远,接近10倍。

再后来,用IronPython测试。用python的相同代码就行了,很方便。ironpython是C#实现的,C#我不熟悉,就试试IronPython了。结果是34秒左右。速度也比一般的python快不少。

再后来用java试一试,只需要2.5秒不到!我晕!原来C不是最快的,基于java的动态语言groovy也会大幅降低速度。其实python也是c实现的,速度也大幅下降了啊。

最后(应该是最后了),我用C#测试,只需要1.89秒!?世界真是太奇怪了!!!
再后来,我换个写法。原来C#有List的,后来混合用List与数组,还稍慢了一点。因为用数组不能直接改长度,要知道哪个位置放了还是没有放皇后有些困难啊。反而增加了计算量。 

标签: python java c# Groovy c
扩展知识