计算机能解决哪些问题 · 你会的那些事站在学科的哪一格

四篇文章,一条线:先看清整个学科在解决什么问题,再往下钻到算法分析与设计。

这一组讲什么

很多人会装系统、配网络、架服务、写脚本,干得不错,但说不清自己在计算机学科里的位置。 这一组就是解决这件事:先给一张地图,再往地图上的一块深钻。

先读第一篇,建立整体观——知道自己在哪一格,才知道该补哪一格。 后三篇往「程序设计基础」这一层钻:程序是什么、怎么分析它快不快、怎么设计它。

四篇

  1. 计算机学科整体观:你会的那些事,在学科的哪一格 从「会做什么」反推「在哪一格」。核心是一句话:计算机学科的根本问题是什么能被有效地自动计算——三个层次,接住你大部分困惑。

  2. 程序 = 数据结构 + 算法:这句话被误读了四十年 它讲的是设计顺序,不是部件构成。而且它漏了五样东西。加号也有误导——两半是相乘,不是相加。

  3. 算法分析:大 O 不告诉你跑多久 大 O 量的不是时间,是增长。它预测不了现在,能预测将来。附「n 涨十倍会怎样」对照表和三个真实用途。

  4. 同一道题五种写法:最快的那个,答案是错的 0/1 背包的蛮力、贪心、动态规划、回溯、限界剪枝。核心结论:更快,不代表更对。

一句话结论

计算机能解决的问题,比你想的少;但解决的方法,比你想的多。

有些问题做不了(可计算性)——分清「我不会」和「它不存在」; 有些问题做不动(复杂度)——知道天花板在哪,不做无用功; 剩下的问题,换一种看法就换一个难度(算法设计)。

关于出处

这组文章参考了《计算机学科概论(第 3 版)》和《算法设计与分析(微课版)》两本教材, 引文只做短句摘引并标注页码,其余全部是自己的转述、整理和举例。 文中所有代码、对照表、决策流程、具体例子都是自己写的,不是原文。