算法概念与描述
算法概念与描述
算法概念;算法描述:自然语言描述、流程图描述、伪代码描述。
概念
算法是为解决一类问题而规定的有限、确定、可执行的步骤序列。评价维度常包括有穷性、确定性、可行性,以及输入输出是否明确。描述算法不只有一种写法:自然语言适合讲思路,流程图强调整体分支与循环结构,伪代码则介于二者之间、便于对照程序实现。本叶子关注的是「问题怎么被形式化地表达」,而不是某一种具体策略(枚举、贪心、DP 等都属于后面的算法叶子)。与 cspj.cpp.structured-design(程序结构与设计)相邻:后者讲模块划分与可读性,这里讲步骤本身如何被说清楚、被他人读懂。
CSP-J 常考
目前语料只有 2 道:
cspj-r1-2021第 4 题:单选题判断算法性质或描述方式(如流程图符号、伪代码与自然语言的对应)。cspj-r1-2021第 25 题:阅读程序小题,结合给定代码判断其体现的算法步骤或描述是否一致。
// 伪代码:求 1..n 的和(对应自然语言「累加每个 i」)
int sum = 0;
for (int i = 1; i <= n; ++i)
sum += i;
// 流程图里这一循环体通常画成「菱形判断 + 矩形累加」
易错点
- 把「算法」与「程序」等同:同一算法可用不同语言实现;程序还涉及语法细节与库函数。
- 流程图题漏看箭头方向或循环回边,把「顺序执行」误读成「只执行一次」。
- 阅读程序里若题干问「这段代码实现了什么算法思想」,应回到步骤(输入→处理→输出),不要直接跳到具体语法点。
以比较作为基本运算,在 N 个数中找出最大数,最坏情况下所需要的最少的比较次数为 ( )。
阅读程序共 3 分1 道小题
整组作答后提交批改,成绩计入掌握度 · 已答 0/1
程序
1
#include <iostream>2#include <string>3using namespace std;45char base[64];6char table[256];78void init()9{10 for (int i = 0; i < 26; i++) base[i] = 'A' + i;11 for (int i = 0; i < 26; i++) base[26 + i] = 'a' + i;12 for (int i = 0; i < 10; i++) base[52 + i] = '0' + i;13 base[62] = '+', base[63] = '/';1415 for (int i = 0; i < 256; i++) table[i] = 0xff;16 for (int i = 0; i < 64; i++) table[base[i]] = i;17 table['='] = 0;18}1920string decode(string str)21{22 string ret;23 int i;24 for (i = 0; i < str.size(); i += 4) {25 ret += table[str[i]] << 2 | table[str[i + 1]] >> 4;26 if (str[i + 2] != '=')27 ret += (table[str[i + 1]] & 0x0f) << 4 | table[str[i + 2]] >> 2;28 if (str[i + 3] != '=')29 ret += table[str[i + 2]] << 6 | table[str[i + 3]];30 }31 return ret;32}3334int main()35{36 init();37 cout << int(table[0]) << endl;3839 string str;40 cin >> str;41 cout << decode(str) << endl;42 return 0;43}- 25单选3 分
单选题
- 设输入字符串长度为 n,
decode函数的时间复杂度为( )
- 设输入字符串长度为 n,