随笔分类 -  (^_^)欧拉欧拉

摘要:来自coolshell(From a website:Data Structure Visualizations)还记得之前发布过的那个关于可视化排序的文章吗?在网上又看到了一个旧金山大学David Galles做的各种可视化的数据结构和基本算法的主页,网址在这里,大家可以看看。我把这个页面的目录列在下面并翻译了一下,大家可以直接点击了。 不知道国内的教育有没有相关的教学课件,至少在我大学的时候是没有的。 基础 Stack栈: 数组实现Stack栈: 链表实现Queues队列: 数组实现Queues队列: 链表实现Lists列表: 数组实现 (java 版演示)Lists列表: 链表实现 (. 阅读全文
posted @ 2011-05-05 22:36 能巴 阅读(429) 评论(0) 推荐(0)
摘要:这一题乍看上去比较困难。稍作思考就会发现其算法非常明显。具体思路下面的代码的comment中写得很清楚了。(第一遍实现后发现post到欧拉上说答案不对;后来发现是11X, 21X和12X,24X的计算方法不同这点没有考虑到。更正算法,终于得到正确答案) View Code #include<iostream>usingnamespacestd;int_tmain(intargc,_TCHAR*argv[]){//1-1000wordnumbercalculation.//unsignedlongsum=0;//1-19.Rule:aseverywordinthisrangeissp 阅读全文
posted @ 2011-04-13 18:09 能巴 阅读(178) 评论(0) 推荐(0)
摘要:参考维基百科0. 一些基本概念--(体会)空间换时间是进一步提高算法速度的最终方法,比如希尔排序和基数排序就是通过占用额外空间来获得比快速排序更快的速度。当然,空间换不换的到时间,也是要看你写的算法的水平的。--best, worst and average cases. In computer science, best, worst and average cases of a given algorithm express what the resource usage is at least, at most and on average, respectively. Usually 阅读全文
posted @ 2011-04-08 11:39 能巴 阅读(1581) 评论(0) 推荐(0)
摘要:1.Every matrix M is associated with a coordinate system. This coordinate system has origin (t0, t1, t2) and vectors (a00,a110,a20), (a01,a11,a21), and (a02,a12,a22) as axes. Matrix M maps the standard coordinate system to the coordinate system with the origin (0, 0, 0) and axes (1, 0, 0), (0, 1, 0). 阅读全文
posted @ 2011-03-31 18:08 能巴 阅读(3026) 评论(1) 推荐(0)
摘要:215 = 32768 and the sum of its digits is 3 + 2 + 7 + 6 + 8 = 26. What is the sum of the digits of the number 21000? 这一题必须要使用“高精度乘法运算”进行计算(的位数是)。学到的:1. 高精度运算(百度百科:高精度运算,是指参与运算的数(加数,减数,因子……)范围大大超出了标准数据类型(整型,实型)能表示的范围的运算。例如,求两个200位的数的和。这时,就要用到高精度算法了)。针对的情况就是要运算的数值远远超出了计算机语言提供的数据类型所能表达的范围。这种情况下,无论是加减乘除. 阅读全文
posted @ 2011-03-29 23:36 能巴 阅读(2750) 评论(0) 推荐(0)
摘要:记下这一题是因为更加认识到打破“惯性思维”解决问题的必要性和重要性。引以为戒,以后解决问题时,要多换个角度思考。摘自coolshell下面是一个C程序,其想要输出20个减号,不过,粗心的程序员把代码写错了,你需要把下面的代码修改正确,不过,你只能增加或是修改其中的一个字符,请你给出三种答案。 12345int n = 20;for(int i = 0; i < n; i--){printf("-");}下面是正确答案—— 12345678//第一种解法:在for循环中给 i 加一个负号for(int i = 0; -i < n; i--)//第二种解法:在for 阅读全文
posted @ 2011-03-27 17:46 能巴 阅读(498) 评论(1) 推荐(0)
摘要:自己没想出。google的结果是:用数学上的组合方面的知识可轻松搞定。这里,关键是通过这一题复习排列组合相关的数学知识(也许你的项目中很少用到数学知识来解决编程问题,但是数学还是非常有益的):1. 排列组合的公式2. 排列组合的最本质两个法则:乘法法则——分步,和加法法则——分类。 (1)加法原理:做一件事,完成它可以有n类办法,在第一类办法中有m1种不同的方法,在第二类办法中有m2种不同的方法,……,在第n类办法中有mn种不同的方法,那么完成这件事共有N=m1+m2+m3+…+mn种不同方法. (2)乘法原理:做一件事,完成它需要分成n个步骤,做第一步有m1种不同的方法,做第二步有m2种不同 阅读全文
posted @ 2011-03-21 23:15 能巴 阅读(155) 评论(0) 推荐(0)
摘要:几点:1. 在问题规模大的时候,一定要检查选择的数据类型是否够用,会不会overflow。这里的case就是一个很好的例子。我的算法几分钟就写好了,也蛮正确的,除了对于start num i及chain中的number n的数据类型选择了int,这就导致在n被3n+1反复搞大后,超出了int的范围,变成了负数,也就进入了导致算不出结果来的死循环里(因为永远也算不到1了)。所以,切记:问题规模大的时候,一定仔细考虑清楚数据类型的选择。2. unsigned int的数据参与大规模运算要比long long快3倍以上。这里指的是仅仅替换i和n的数据类型。3. 在看到更多规律的基础上,我加了个map 阅读全文
posted @ 2011-03-18 00:05 能巴 阅读(202) 评论(0) 推荐(0)
摘要:这一题的思路还是比较清晰的:首先,由于每个数都是50位,还要计算100个这样的数的和,unsigned long long 都表示不了这么大的数,硬上肯定是不行滴;那么,考虑到只需要打印出和值的头10位,才有了用多维数组求解的方法:1. 首先把这100个数字保存到text文件中:这样比较好读取。2. 把这个文件中的所有数字解析到arr[100][50]中。3. 从最后一列开始计算一列的和,个位数(%10)进栈,剩下的(/10)作为下一列求和的进位数(基数)。每一列都这么算,直到j=0最后一列:需要把sumColumn逐位分解进栈。4. 好,现在stack中从上到下存的就是100个数的和了。po 阅读全文
posted @ 2011-03-16 23:49 能巴 阅读(185) 评论(0) 推荐(0)
摘要:1. 概念:程序员眼中的内存是按byte存储的;而cpu眼中的内存是以chunk为单位的,chunk可以是2,4,8bytes。如果放在内存中的数据没有被对齐即其内存地址不是对应cpu内存访问粒度的整数倍,读取这段数据cpu就需要更多次的内存访问,相比较对齐的内存数据而言。内存对齐后,占据的内存必然是增多的。2. 最明显的获知有内存对齐这回事的例子是sizeof(struct a)。由于我们可以通过编译选项#pragma pack(n)来控制数据的内存存放的对齐粒度(1,2,4,8),从而可以很容易测试得到在不同的对齐粒度下,同一个struct变量占据的内存大小的变化。3. 编译器根据内存对齐 阅读全文
posted @ 2011-03-15 15:04 能巴 阅读(297) 评论(0) 推荐(0)
摘要:一个算法的复杂度通常由其时间复杂度和空间复杂度来表达。这里,主要复习下时间复杂度的概念及计算。概念:时间复杂度即一个算法所需运算的次数随问题规模n变化的函数。常见时间复杂度及对应复杂度关系:c < log2N < n < n * Log2N < n^2 < n^3 < 2^n < 3^n < n!计算方法: 根本上有二:计算一个语句的频度(执行次数)和时间复杂度。1)快速求解方法:看循环层数及对应循环次数。 2)最本质的求解方法:计算出算法中所有语句的执行次数的和,其就是一个以n为变量的函数f(n)(一般情况下,算法的基本操作重复执行的次数是模块 阅读全文
posted @ 2011-03-14 23:20 能巴 阅读(587) 评论(0) 推荐(0)
摘要:参考:float和double类型的内存分布和比较方法收藏 Comparing floating point numbers总结几点:0. float占4byte,精度是6~7位;double占8byte,精度是15~16位。 1. C/C++的浮点数据类型有float和double两种。它们在内存中是以科学计数法的结果来存储的。 类型float大小为4字节,即32位,内存中的存储方式如下: 符号位(1 bit) 指数(8 bit) 尾数(23 bit) 类型double大小为8字节,即64位,内存布局如下: 符号位(1 bit) 指数(11 bit) 尾数(52 bit) 符号位决定浮点数的 阅读全文
posted @ 2011-03-11 14:11 能巴 阅读(6857) 评论(0) 推荐(0)
摘要:The sequence of triangle numbers is generated by adding the natural numbers. So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The first ten terms would be:1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...Let us list the factors of the first seven triangle numbers:1: 13: 1,36: 1,2,3,610: 1, 阅读全文
posted @ 2011-03-09 18:08 能巴 阅读(225) 评论(0) 推荐(0)
摘要:In the 20×20 grid below, four numbers along a diagonal line have been marked in red. 08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 0849 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 0081 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 6552 70 95 23 04 60 11 42 69 24 68 阅读全文
posted @ 2011-03-09 00:08 能巴 阅读(137) 评论(0) 推荐(0)
摘要:Find the greatest product of five consecutive digits in the 1000-digit number.这一题的关键是“\”换行符在长字符串中的应用。View Code #include<iostream>usingnamespacestd;int_tmain(intargc,_TCHAR*argv[]){chara[]="73167176531330624919225119674426574742355349194934\9698352031277450632623957831801698480186947885184 阅读全文
posted @ 2011-03-03 23:49 能巴 阅读(165) 评论(0) 推荐(0)
摘要:2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder. What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20? 下面的这个算法,算1-20,只需要1millisecond;算1-200,就需要算很长时间。。。。。有时间再研究可否再优化。算法优化后带来的速度提升很多时候比多线程来得多的多。View C. 阅读全文
posted @ 2011-03-03 14:55 能巴 阅读(155) 评论(0) 推荐(0)
摘要:复习:质因数,最大公约数,最小公倍数及对应典型求解算法--质因数:任何一个数都可以表示为一组质数的乘积。--最小公倍数--最大公约数 = 两数的乘积 / 最小公倍数 或者用“辗转相除法” (方法a:两数各分解质因子,然后取出同样有的项乘起来;方法b:辗转相除法)辗转相除法:对于52317和75569两个数。先用较大的75569除以52317,得商1,余数23252,再以52317除以23252,得商2,余数是5813,再用23252做被除数,5813做除数,正好除尽得商数4。这样5813就是75569和52317的最大公约数。View Code #include<iostream> 阅读全文
posted @ 2011-03-03 14:24 能巴 阅读(596) 评论(0) 推荐(0)
摘要:A palindromic number reads the same both ways. The largest palindrome made from the product of two 2-digit numbers is 9009 = 91 99. Find the largest palindrome made from the product of two 3-digit numbers.最优运算时间:8ms来自代码B。 这个看似简单的问题再一次教会我了很多原来从未注意过考虑过的东西。从中学到的:1. 能调用库函数一定调用库函数,不要自己写:效率实在有很大差距 (下面有运算. 阅读全文
posted @ 2011-03-02 22:29 能巴 阅读(168) 评论(0) 推荐(0)
摘要:计算Int最大最小值 通常我们会使用CRT提供给我们的一个头文件<limits.h>中预定义宏INT_MAX, INT_MIN, UINT_MAX来定义int的最大最小值下边给出由计算得出这些值的方法,其他数据类型同理 unsigned int GetUnsignedIntMax() { return ~ 0 ;} signed int GetSignedIntMax() { return (static_cast < unsigned int > ( ~ 0 )) >> 1 ;} signed int GetSignedIntMin() { signed 阅读全文
posted @ 2011-03-02 14:34 能巴 阅读(3226) 评论(0) 推荐(0)
摘要:The prime factors of 13195 are 5, 7, 13 and 29. What is the largest prime factor of the number 600851475143 ?注意:用long long避免类型overflow。并注意到600851475143是奇数所以只能被奇数整除。思路:在求质因子的算法基础上记一下max就好了。View Code #include<iostream>#include<cmath>#include<ctime>usingnamespacestd;//boolisPrime(long 阅读全文
posted @ 2011-03-01 00:19 能巴 阅读(175) 评论(0) 推荐(0)