经验贴

本文介绍了多种程序设计技巧,包括分数最小公倍数计算、内存优化、字符数组输入控制、正数范围处理、递归剪枝、数组最小值查找、子问题循环求解、前缀和应用、杭电扩栈、二分法融合使用、博弈策略、以及注意事项如同余定理的应用、开方和平方的处理、memset初始化等。
20.两个分数求最小公倍数:先得到两个最简的分数,然后用这两个分数的分子的最小公倍数 / 这两个分数的分母的最大公约数。即答案

19.用int开的数组MLE的时候可以考虑题目数据是不是在short的范围内改用short可以缓解。
如果不行则考虑滚动数组节约内存。

18.对字符数组的输入还可以控制从某个位置开始读入,例如:
	char s[22];
scanf("%s", s + 1);
//或者 cin >> s + 1;
//这样读入的时候第一个字符就在s[1]了


17.在正数范围比long long 还要厉害的有unsigned long long....

16.递归中要注意剪枝,因为递归是先由某个状态递归到底。在这个过程中很多值都会算好了。那么在下次递归到需要这个值的时候就可以直接调用了。例如斐波那契数的递归:
int ff[555];//记忆化数组。

int f(int n)
{

if (n == 1 || n == 2) return 1;
if (ff[n]) return ff[n];
return ff[n] = f(n - 1) + f(n - 2);

}


15.求一个给定的数组中的最小的两个值的方法:类似求一个最值的遍历,依旧是O(n),但是一开始的时候要赋值两个数组里的数,核心代码如下:
	int i, j;
for (i = 0; i < n; ++i) scanf("%d", &L[i]);
int m1 = 0, m2 = 1;
if (L[m1] > L[m2]) swap(m1, m2);
for (i = 2; i < n; ++i)
{
if (L[i] < L[m1])
{
m2 = m1;
m1 = i;
}
else if (L[i] < L[m2]) m2 = i;
}


14.对于将题目分解成若干个子问题来循环求解(递归求解)是非常关键的思想,在许多问题中广泛应用(如概率题,汉诺塔);

13.注意前缀和的使用,例如需要一个数列中各种区间和,那么没有必要两次循环完全遍历暴力累加。。。。可以先一次遍历,计算出sum[i]为前i项和,那么区间[l,r]的和就为sum[r] - sum[l-1];这样便从On^2 优化到 On.

12.杭电扩栈:#pragma comment(linker, "/STACK:1024000000,1024000000")

11.二分法的精髓是灵活的与其他算法融合。刚做了一道有趣的二分查找答案的题目,题目给了一条递推公式,但是每条等式里都有两个未知变量,而用递归调用的话直接爆栈。。所以就用二分查找答案了(传入mid作为其中一个未知变量的知,并通过一次遍历算出某已知量是否相等)即可。

10.一种简单博弈思想:一堆石头,每次只能拿连续的石头,则先手只要一开始就把石头平均分成两堆,就一定能在最后取完石头(每次模仿对手的动作);那么需要做的就只是判断什么情况石头不能被平均分成两堆。。。

9.对于一些题目需要%m的,就要目测一下会不会溢出,会的话用上同余定理,在中间用上%m;

8. 对于开根号和平方,慎用或考虑用,一是精度问题,二是大数越界问题(可能有帮助)。
另一外一点要注意的他们的参数类型一定要正确,不然会WA,若不对应,一定要用括号()对其强制转换。

7.memset并不是简单的赋值,故记住只能使用-1或0对全数组进行初始化。

6.善用标记数组和-1, 0, 1,
例如vis[i] = 1表示访问过,
<think>好的,用户现在需要关于计算机组成原理408的学习经验分享。我得先看看之前的对话历史。用户之前问了计算机组成原理和考研408中的计算机体系结构,我详细分点回答了系统概述、层次结构、硬件原理、性能指标,还附带了Python代码和相关问题。现在用户提到了站内引用,引用了三个来源,其中主要提到了CPU的组成、教材内容以及MIPS处理器的复杂性。用户明确表示想寻找学习经验,所以需要针对408考试的学习方法。 首先,用户可能正在备考考研,特别是计算机专业的408科目。计算机组成原理是408的一部分,可能用户觉得这部分难度较大,需要学习策略。需要结合教材、重点章节、实践方法等方面来回答。 用户引用的内容里提到了冯诺依曼架构、MIPS指令、处理器数据通路、存储器层次结构等,这些都是组成原理的重点。所以学习经验需要覆盖这些核心内容,并推荐教材,比如《计算机组成与设计——硬件/软件接口》,用户提到的引用2中也提到了这本教材的前五章,可能需要强调前几章的重要性。 另外,用户引用的3提到了单周期MIPS处理器,但指出实际实现更复杂,需要数字逻辑设计的基础。这可能意味着用户对实践部分有需求,比如Verilog实现CPU,但需要指导如何入手。 用户可能需要分阶段的学习计划,比如基础阶段、强化阶段、冲刺阶段,每个阶段的学习重点和方法。同时,要结合真题和习题,因为408考试重视理解和应用。 还要注意用户提到的参考资料,比如教材和可能的网课资源,是否需要推荐一些辅助资料,比如王道考研的书籍,或者网课视频,这些可能对自学者有帮助。 用户可能遇到的问题包括概念抽象难以理解,比如数据通路、流水线冒险,或者计算题如Cache映射、浮点数运算等。需要给出解决这些难点的建议,比如画图辅助理解,多做练习题,结合实践项目等。 此外,用户可能关心时间管理和复习策略,如何平衡组成原理和其他科目(数据结构、操作系统、计算机网络)的学习,是否需要制定详细的时间表。 需要确保回答结构清晰,分点列出,比如教材选择、重点章节、学习方法、时间规划、真题使用等,并且结合用户之前的问题中提到的内容,如CPU组成、存储器层次、MIPS处理器等,将这些融入学习经验中,让用户感觉建议有针对性。 最后,相关问题部分可以引导用户进一步提问,比如具体章节的学习方法、资料推荐、实践项目指导等,这样用户如果有更深的问题可以继续询问。</think>#### 计算机组成原理408学习经验分享(基于引用内容与学科特点) ##### 一、教材与核心内容选择 1. **必选教材** - 《计算机组成与设计——硬件/软件接口》(第5版):覆盖冯·诺依曼架构、MIPS指令集、数据通路设计等核心内容[^2][^3] - 《计算机组成原理》(唐朔飞版):补充存储器层次结构、I/O系统等细节[^1] 2. **重点章节优先级**(基于引用[2]的目录结构) - **第一章**:计算机系统层次结构、性能指标(CPI/时钟周期/MIPS计算)[^3] - **第四章**:单周期/流水线数据通路、冒险处理(结构/数据/控制冒险)[^3] - **第五章**:Cache映射策略、虚拟存储器页表与TLB[^2] - **第二章**:MIPS指令格式(R/I/J型)、寻址方式[^2] ##### 二、高效学习方法 1. **理论-实践联动法** - **硬件抽象建模**:用Verilog实现单周期MIPS处理器(参考引用[3]的提示),通过EDA工具(如Logisim)可视化数据通路 - **代码辅助理解**:用Python模拟Cache替换算法(LRU/FIFO) ```python class LRUCache: def __init__(self, capacity): self.cache = OrderedDict() self.capacity = capacity def get(self, key): if key not in self.cache: return -1 self.cache.move_to_end(key) return self.cache[key] ``` 2. **难点突破策略** - **流水线冒险**:绘制时空图分析冲突,对比旁路转发与插入气泡的代价[^3] - **浮点数表示**:用IEEE 754标准手动转换十进制数(如-13.625→单精度二进制) - **存储器层次**:推导访问时间公式:$$T_{avg} = H \times T_{cache} + (1-H) \times T_{memory}$$ ##### 三、408真题命题规律 1. **高频题型分析** | 题型 | 典型问题 | 解题要点 | |-----------------|-----------------------------------|-------------------------| | 数据通路设计 | 给出指令序列分析流水段冲突 | 标注RAW/WAR/WAW依赖关系 | | Cache计算 | 组相联映射下的命中率计算 | 区分标记位/组索引位 | | 指令格式解析 | 根据MIPS机器码反推汇编指令 | R/I/J型操作码对照表 | 2. **易错点警示** - **CPI计算误区**:需区分基准程序(SPEC)的加权平均CPI与理论公式差异[^3] - **TLB与页表关系**:TLB是页表的缓存,缺页时需同时更新两者[^2] ##### 四、时间规划建议(以3个月备考为例) ```mermaid gantt title 计算机组成原理备考计划 section 基础阶段 教材精读 :a1, 2023-10-01, 30d Verilog实验 :a2, after a1, 14d section 强化阶段 王道习题集 :b1, 2023-11-15, 20d 真题分类训练 :b2, after b1, 15d section 冲刺阶段 错题重做 :c1, 2023-12-10, 10d 模拟考试 :c2, after c1, 5d ``` ##### 五、推荐拓展资源 1. **在线实验平台**: - MARS MIPS Simulator(验证指令执行过程) - Nand2Tetris(从与非门构建CPU) 2. **辅助资料**: - 王道考研《计算机组成原理复习指南》(含历年408真题解析)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值