课程名称:Algorithmic Toolbox
课程内容:Data Structures and Algorithms
课程网址:https://www.coursera.org/learn/algorithmic-toolbox/home/week/1
课程进度:Week2
Week 2
Week2
Why Study Algorithms?
Perform执行,工作,运转,表演
Complicated复杂的
Sophisticated复杂的,先进的,精密的,老练的
Optimize优化
Interpret解释,口译,说明
Vague模糊的,含糊的,不明确的
Intuitive直觉的,易懂的
Solid固体的,固体,不间断地
Formulate制定,规划,准备
Nontrivial非平凡,不容易的
Coming Up
Weird奇怪的,诡异的
Theoretic理论的
Numerical数字的
Modest谦虚的,谦逊的
Instance实例,例子
Problem Overview
Property财产,性质,所有物
Recursive递归的
Fibonacci number
Reproduce再现,复制,繁殖
Inductive归纳的
Bound跳跃,蹦跳
Exponentially以指数方式
Naive Algorithm
Extreme极端的,极度的,极端,极限
Efficient Algorithm
Trivial琐碎的,微不足道的,不重要的
Divisor除数
Resource资源 source来源
Problem Overview and Naive Algorithm
Fraction分数,小部分,小数
Numerator分子
Denominator分母
Equivalent相同的,相等的
GCD最大公约数 GCD(10,4)=2
Factorization因式分解,因子分解
Cryptographic密码学
Efficient Algorithm
Euclidean Algorithm欧几里得算法
Remainder余数
Lemma引理,辅助定理
Terminate终止,结束
Computing Runtimes
In particular特别,尤其
Complication并发症,更难的事物
Shuffle洗牌,变换位置,打乱次序
Allocate分配
Entire整个的,完全的,全部的
Circumstance环境,条件,状况
Optimization优化
Hierarchy等级制度,层次体系
Asymptotic Notation
Asymptotic渐近的,渐近线的
Precise精确的
规避常数级的runtime影响
Proportional成比例的,相称的,均衡的
Exponential指数的
Sufficient足够的,充分的
Gigahertz千兆赫,十亿赫
Logn < 根号n < n < nlogn < n^2 < 2^n
Big-O Notation
Notation符号,记号
Multiple倍数
Moderate中等的,适度的,温和的
Using Big-O
2squared 2的平方 2cubed 2的三次方 root2 根号2
Polynomial多项式的,多项式
Modestly谨慎地
Modest谦虚的,谦逊的,朴素的
Reasonable合理的,有理由的,公平的
Eventually最后,终于
Premise前提,假定
Occasional偶尔的
Extensive广泛的,大量的
Ought to应该,应当
Course Overview
Reduction减少,降低
Three of the most common algorithmic design techniques: Greedy Algorithms贪心算法, Divide and Conquer分治, Dynamic Programming动态规划
Optimal最佳的,最优的
Enumerate枚举
Optimize优化,充分利用
Technique技术,工艺,技巧
Insight了解,洞察力,洞悉,领悟
Occupation工作,职业
Week2coding
#include
using namespace std;
/*long long int Fibonacci(long long int n)
{
if(n<=1)
return n;
else
{
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
}
*/
long long int Fibonacci(long long int n)
{
long long int i,a=0, b=1, c;
if (n == 0 || n == 1)
return n;
else
{
for(i=0;i<n-1;i++)
{
c=a+b;
a=b;
b = c;
}
return c;
}
}
int main()
{
long long int n,result;
cin >> n;
result = Fibonacci(n);
cout << result;
return 0;
}
递归耗时比较长会TLE,大数考虑使用longlongint,int局限太大。此题已AC。
#include
using namespace std;
int main()
{
int i,n, a, b, c;
a = 0;
b = 1;
cin >> n;
if(n0||n1)
{
cout << n;
return 0;
}
for(i=0;i<n-1;i++)
{
c = (a+b)%10;
a=b%10;
b = c%10;
}
cout << c;
return 0;
}
只看个位数,使用int也可以规避大数问题,01单独讨论。此题已AC。
#include
using namespace std;
int Fibonacci(int n)
{
if (n <= 1)
return n;
else
{
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
}
int main()
{
int n,m, result;
cin >> n >> m;
result = Fibonacci(n);
cout << result%m;
return 0;
}
此题TLE。
#include
using namespace std;
int main()
{
int n, i = 0,sum=0;
cin >> n;
int a=0, b=1, c;
if(n0||n1)
{
cout << n;
return 0;
}
for(i=0;i<n-1;i++)
{
c = (a + b) % 10;
a=b%10;
b = c % 10;
sum += c;
}
cout << (sum+1)%10;
return 0;
}
此题TLE。
#include
using namespace std;
int Fibonacci(int n)
{
if (n <= 1)
return n;
else
{
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
}
int main()
{
int i,m,n, sum1=0,sum2=0;
cin >> m >> n;
for(i=0;i<=m;i++)
{
sum1 += Fibonacci(i);
}
for (i = 0; i <= n;i++)
{
sum2 += Fibonacci(i);
}
cout << (sum2-sum1+Fibonacci(m))%10;
return 0;
}
此题TLE
#include
using namespace std;
long long int Fibonacci(long long int n)
{
if (n <= 1)
return n;
else
{
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
}
int main()
{
long long int i,n, result;
cin >> n;
for(i=0;i<=n;i++)
{
result += ((Fibonacci(i)%10)*(Fibonacci(i)%10))%10;
}
cout << result%10;
return 0;
}
此题WA。
#include
using namespace std;
long long int GCD(int a,int b)
{
if(b==0)
return a;
else
{
return GCD(b, a % b);
}
}
int main()
{
long long int a,b,gcd;
cin >> a >> b;
gcd=GCD(a, b);
cout << gcd;
}
最大公约数采用欧几里得算法,注意大数情况采用了longlongint。此题已AC。
#include
using namespace std;
long long int GCD(int a, int b)
{
if (b == 0)
return a;
else
{
return GCD(b, a % b);
}
}
int main()
{
long long int a, b, gcd;
cin >> a >> b;
gcd = GCD(a, b);
cout << a * b / gcd;
return 0;
}
最小公倍数LCM=ab最大公约数gcd。此题已AC。但是原理需要挖掘。