算法作为计算机软件的核心,其可靠性和开发效率对于软件的可信性及应用发展具有重要意义。算法自动化是提高算法开发效率、保证算法可靠性的重要途径之一。
本书结合著者所在学术团队已取得的软件形式化方法PAR及其支撑平台,将生成式程序设计的思想引入到算法开发中来,借助领域建模的概念和方法对置换、查找、序列比对类算法进行抽象,建立了领域特定语言和算法生成模型,开发了领域算法高可靠构件库,自动构件组装生成了三十余个经典的部分领域算法,并构建了具备相应生成能力的系统,从而显著提高了领域算法的开发效率和可靠性,并可望从方法学和实践上为特定领域高可靠算法的开发提供新思路。
样章试读
目录
- 目录
前言
第1章 引言 1
1.1 研究背景 1
1.2 研究目标和内容 1
第2章 算法程序自动化方法概述 3
2.1 基于演绎推理的方法 3
2.2 程序变换方法 5
2.2.1 横向变换 6
2.2.2 纵向变换 7
2.2.3 广义纵向变换 9
2.3 基于归纳推理的方法 11
2.4 基于机器学习和进化的方法 12
2.5 模型驱动软件开发方法 13
2.6 生成式程序设计方法 13
2.7 本章小结 14
第3章 PAR方法 15
3.1 循环不变式新定义和新开发策略 15
3.2 语言 16
3.2.1 Radl规约及其变换规则 17
3.2.2 Radl算法表示法 19
3.3 算法程序开发方法 19
3.4 本章小结 20
第4章 产生式编程与Apla语言泛型设计介绍 21
4.1 产生式编程 21
4.1.1 领域工程 21
4.1.2 特征建模 22
4.2 Apla语言中的泛型程序设计 22
4.2.1 泛型程序设计 22
4.2.2 Apla泛型 23
4.3 本章小结 24
第5章 基于PAR的算法形式化开发 25
5.1 自动问题分划 25
5.2 启发式规约变换 28
5.3 一个实例 30
5.4 本章小结 34
第6章 置换和查找类算法生成模型 35
6.1 置换问题的代数性质 35
6.2 领域分析 36
6.3 领域设计 38
6.4 排序算法类构件实现 39
6.4.1 类型构件SortingList 40
6.4.2 类型构件Heap 52
6.4.3 算法构件DBPSort 54
6.4.4 算法构件UBPSort 57
6.4.5 算法构件HSort 60
6.5 查找算法类构件实现 60
6.5.1 类型构件SearchingList 60
6.5.2 类型构件Hash 63
6.5.3 算法构件UnorderSearch 65
6.5.4 算法构件OrderSearch 67
6.6 本章小结 68
第7章 置换算法程序生成 70
7.1 荷兰国旗问题 70
7.1.1 平衡分划求解 70
7.1.2 非平衡分划求解 72
7.1.3 算法分析和扩展 73
7.2 基于DBP分划的排序算法 74
7.2.1 归并排序 74
7.2.2 插入排序 75
7.2.3 二分插入排序 75
7.2.4 其他排序算法 75
7.3 基于UBP分划的排序算法 76
7.3.1 快速排序 76
7.3.2 选择排序 76
7.3.3 冒泡排序 76
7.3.4 堆排序 77
7.4 其他类排序算法 77
7.4.1 H-增量排序 77
7.4.2 双向选择排序 79
7.5 系统支持 83
7.6 本章小结 84
第8章 查找算法程序生成 85
8.1 无序查找 85
8.1.1 递归查找 85
8.1.2 线性查找 85
8.1.3 散列表查找 86
8.1.4 其他查找算法 88
8.2 有序查找 88
8.2.1 有序线性查找 88
8.2.2 二分查找 88
8.2.3 二叉树查找 89
8.2.4 其他查找算法 89
8.3 本章小结 90
第9章 序列比对算法 91
9.1 序列比对简介 91
9.1.1 序列比对问题简述 91
9.1.2 空位罚分 91
9.1.3 替换矩阵 92
9.2 序列比对算法 92
9.2.1 双序列比对算法 92
9.2.2 多序列比对算法 93
9.3 本章小结 94
第10章 DPPSAA构件设计与NW装配实现 95
10.1 DPPSAA领域特征模型 95
10.1.1 DPPSAA特征模型 95
10.1.2 DPPSAA特征交互模型 95
10.2 基于Apla语言的DPPSAA构件实现 96
10.2.1 算法构件的Apla表示 96
10.2.2 NW算法装配实现 100
10.3 基于Apla-C++转换的NW算法装配实现 101
10.3.1 Apla程序转换为C++表示 101
10.3.2 实验结果分析 102
10.4 本章小结 102
第11章 基于DPPSAA的星比对算法装配实现 104
11.1 星比对算法介绍 104
11.2 星比对算法构件建立以及Apla实现 104
11.3 基于Apla-C++转换系统的星比对算法的装配实现 106
11.4 实验结果分析 108
11.5 本章小结 109
参考文献 110
附录 Radl规约文法 118