1. 实验环境
操作系统:Mac 64
运行内存:16GB
编程语言:Java
编译环境:Eclipse
2. 题目要求
设计一个Ο(nlgn)时间的算法,求一个 n 个数的序列的最长单调递增子序列。
A. 用户界面输入原始序列
设计便于用户操作的界面,可以输入 n 个数,在计算后输出最长单调递增子 序列和该子序列的长度。
B. 求最长单调递增子序列
获取文本框内容,依次遍历字符串的单个字符,如果递增,直接加入。否则, 采用二分法缩小递归范围,如果递增,需要修改值,而非加入。该算法时间复杂 度 Ο(nlgn)。
C. 用户界面得到子序列及长度
将求得的子序列及该子序列的长度返回到用户界面的文本框中。
D. 用户界面重置和计算
点击计算可求出子序列和长度。点击重置可重新输入序列并求结果。
4.项目结构
程序结构如下图所示,lmis_str.java 可处理多长度的序列;而 lmis_list_num.java 只可处理 int/long 范围的序列。项目结构如下图所示。
5. 实验结果
A. 程序运行界面和正确性
程序编译运行结果如下图所示。
图 1 程序编译运行结果界面 程序输入序列,运行结果如下图所示