算法输入输出复杂度与数据结构 - SpiralKernel/bioinfo-wiki-migrated GitHub Wiki

算法输入输出复杂度与数据结构

更新:2026-10-13;状态:可用;验证范围:教材、原始研究或官方文档核对;概念与方法说明。

从输入、输出、正确性和资源成本理解算法,为生信工具的性能与适用范围打基础。

算法不等于软件名称

算法是一组解决问题的明确步骤;软件实现还包含文件解析、并行、异常处理和版本设置。理解算法时先写输入、输出、目标及限制,例如“输入已排序整数表,输出某值首次可插入的位置”。

输入规模也要定义:样本数n、特征数p、序列长度L或图的节点边数。不能把“数据有1GB”当作所有算法唯一的规模描述。

常见成本

量级 直观增长 生信例子
O(n) 扫一遍 固定每条记录处理成本下的样本计数
O(log n) 不断缩小搜索范围 已排序随机访问数组的二分查找
O(n log n) 常见比较排序 给样本或坐标排序
O(n²) 两两组合 全部样本距离或关系矩阵
O(nm) 两个维度的表 简单序列比对动态规划

Big O通常描述规模增长的上界;不能忽略常数、稀疏性、I/O和实现语言。运行时间短也不表示统计模型正确。

数据结构影响操作成本

数组适合按位置访问;字典/集合适合按键查找和去重;队列适合广度优先遍历;稀疏矩阵只存非零结构,是否节省取决于实际密度。字典不能替代对重复生物学ID的审计,去重也不等于解决重复测量。

先读排序查找与哈希在生信中的应用,再读动态规划与序列比对基础和图与最短路径的生信入门。理论来源:MIT 6.006算法课程。