赞
踩
目录
时间复杂度
瑞士著名的科学家Niklaus Wirth教授曾提出:数据结构+算法=程序。数据结构是程序的骨架,算法是程序的灵魂
算法是对特定问题求解步骤的一种描述。它不依赖于任何一种语言,既可以用自然语言、程序设计语言描述,也可以用流程图、框图来表示。
算法的特性
■ 有穷性:算法是由若干条指令组成的有穷序列,总是在执行若干次后结束,不可能永不停止。
■ 确定性:每条语句都有确定的含义、无歧义。
■可行性:算法在当前环境条件下可以通过有限次运算来实现。
■ 输入/输出:有零个或多个输入以及一个或多个输出。
如何衡量一个算法的好坏?
高效率、低存储
1. 准确性 2.易读性 3.健壮性 4.高效性 5.低存储性
输入输出方法
输入输出的选择
快读代码
- inline int read()
- {
- int x=0,f=1;
- char ch=getchar();
- while(ch<'0'||ch>'9'){
- if(ch=='-') f=-1;
- ch=getchar();
- }
- while(ch>='0'&&ch<='9'){
- x=(x<<1)+(x<<3)+(ch^48);
- ch=getchar();
- }
- return x*f;
- }
-
-
-
运算符简介
算术运算符,关系运算符,逻辑运算符,位运算符,赋值运算符,杂项运算符。
重要运算符
位运算简介
假设变量 A 的值为 60,变量 B 的值为 13。
运算符 | 描述 | 实例 |
& | 按位与运算符,按二进制位进行"与"运算。运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1; | (A & B) 将得到 12 即为 0000 1100 |
| | 按位异或运算符,按二进制位进行"异或"运算。运算规则: 0^0=0; 0^1=1; 1^0=1; 1^1=0; | (A ^ B) 将得到 49,即为 0011 0001 |
^ | 按位异或运算符,按二进制位进行"异或"运算。运算规则: 0^0=0; 0^1=1; 1^0=1; 1^1=0; | (A ^ B) 将得到 49,即为 0011 0001 |
~ | ~ | (~A ) 将得到 -61,即为 1100 0011,一个有符号二进制数的补码形式 |
<< | 二进制左移运算符。将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。 | A << 2 将得到 240,即为 1111 0000 |
>> | 二进制右移运算符。将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。 | A>> 2 将得到 15,即为 0000 1111 |
如果让你去开一扇门,从别人那拿到了一串若干把钥匙,你该怎么办呢?
1、拿出第一把钥匙 1、验证第一把钥匙能否开门
2、拿出第二把钥匙 2、验证第二把钥匙能否开门
3、拿出第三把钥匙 3、验证第三把钥匙能否开门
.
N、拿出第N把钥匙 N、验证第N把钥匙能否开门
列举 验证
什么是枚举
枚举的时候要想清楚:可能的情况是什么?要枚举哪些要素?
在用枚举法解决问题的时候,一定要想清楚这两件事,否则会带来不必要的时间开销。
比如例题中要求的是最大的符合条件的素数,那自然是从大到小枚举比较合适。
例一:百钱买白鸡
1.问题描述:
公鸡每只5元,母鸡每只3元,三只小鸡1元,用100元买100只鸡,问公鸡、母鸡、小鸡各多少只?
2.算法分析:
利用枚举法解决该问题,以三种鸡的个数为枚举对象,分别设为i,j和k,用三种鸡的总数( i+j+k=100)和买鸡钱的总数(1/3*i+3*j+5*k=100)作为判定条件,枚举各种鸡的个数。直到找到正确的答案
例一代码简易实现:
例二:骰子的游戏
1.问题描述:
在Alice和Bob面前的是两个骰子,上面分别写了六个数字。
Alice和Bob轮流丢掷骰子,Alice选择第一个骰子,而Bob选择第二个,如果谁投掷出的数更大,谁就可以获胜。
现在给定这两个骰子上的6个数字,你需要回答是Alice获胜几率更大,还是Bob获胜几率更大。(请注意获胜几率相同的情况)。
2.算法分析:
先枚举Alice的骰子的数字,再枚举Bob的骰子的数字。比较大小,然后统计谁获胜的情况多,也就表明谁获胜的几率更大。
例二代码简易实现:
好,学了枚举算法。
是不是所有问题都可以用枚举解决呢?
NO!
同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。
算法分析的目的在于选择合适算法和改进算法。
这就要引入算法复杂度的概念
算法复杂度分为时间复杂度和空间复杂度。
时间复杂度是指执行算法所需要的计算工作量,
而空间复杂度是指执行这个算法所需要的内存空间。
算法复杂度中,主要考虑时间复杂度,当然这不是说空间复杂度不重要。
在讲时间复杂度之前,先再引入一个概念,基本操作数。
基本操作数
时间复杂度
算法篇下篇继续!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。