第一章 算法概述(字典序问题)
来源:互联网 发布:中国贫困线知乎 编辑:程序博客网 时间:2024/05/29 17:24
这里列了五个方面的内容,应该不算是对算法的概述,只能说是学习算法你一定要知道的东西。
一. 算法的概念
算法是指解决问题的一种方法或一个过程。算法是由若干条指令组成的有穷序列。
算法具有以下四个性质:
(1)输入;
(2)输出;
(3)确定性;
(4)有限性。
二. 算法正确性证明
常用方法:
1.反证法(或间接证明)。
2.归纳法。
三. 算法的效率分析
1.时间、空间复杂度
(1)上界Big-O(Ο)
(2)下界Big-Omega(Ω)
(3)同阶Big-Theta(θ)
(4)Small-O(o)
2.平均、最坏情况
四. 算法的描述
C、C++、Java、……(我的算法问题的解答都是用C++)
五. 算法分析
1. 时间、空间复杂度
2. (1)for/while loop
(2)嵌套循环
(3)if-else statement(选择复杂度最大的)
(4)顺序执行的语句
3. 递归
问题:字典序问题
问题描述:在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表A由26个小写英文字母组成,即A={a,b,c,...,z}。该字母表产生的升序字符串是指字符串字母从左到右出现的次序与字母在字母表中出现的次序相同,且每个字符最多出现1次。例如,a,b,ab,bc,xyz等字符串都是升序字符串。
现在对字母表A产生的所有长度不超过6的升序字符串按照字典序排列并编码如下:
12 ... 26 27 28 51
ab ... z ab acaz
对任意长度不超过6的升序字符串,迅速计算出它在上述字典中的编码。
算法设计:对任意长度不超过6的升序字符串,计算出它在上述字典中的编码。
分析:
解决问题源码:
#include<iostream>#include<fstream>#include<string>using namespace std;//f(i,k)是以i开头k长字符串的数目int f(int i, int k){if (k == 1)return 1;else{int sum = 0;for (int j = i + 1; j <= 26; j++)sum += f(j, k - 1);return sum;}}//g(k)是k长字符串的数目int g(int k){int sum = 0;for (int i = 1; i <= 26; i++)sum += f(i, k);return sum;}int changeToInt(char ch){return ch - 'a' + 1;}int main(){//初始化文件ofstream createFile("input.txt");createFile << "3" << endl;createFile << "a" << endl;createFile << "bc" << endl;createFile << "ab" << endl;createFile.close();ifstream ReadFile("input.txt");ofstream WriteFile("output.txt");char num;ReadFile.get(num);int nums = (int)num-48;char str0[6];ReadFile.getline(str0, 6);while (nums-- > 0){char str[6];ReadFile.getline(str, 6);int length = strlen(str);int order=1;for (int i = 1; i < length; i++)order += g(i);for (int j = changeToInt(str[0])-1; j > 0; j--)order += f(j, length);for (int i = length; i > 1; i--){for (int j = changeToInt(str[length - i + 1])-1; j > changeToInt(str[length - i]); j--)order += f(j, i);}WriteFile << order << endl;}system("pause");return 0;}
- 第一章 算法概述(字典序问题)
- 第一章:算法概述
- 第一章 算法概述
- 算法----字典序问题
- 算法设计:字典序问题
- 算法实现题 字典序问题
- 算法笔记 //01_字典序问题
- 2-1字典序问题 算法
- 算法 字典问题
- 第一章 操作系统概述(一)
- 第一章 操作系统概述(二)
- 第一章 操作系统概述(三)
- 第一章 操作系统概述(四)
- 第一章 操作系统概述(五)
- 第一章 JAVA入门(概述)
- 计算机网络(一) 第一章 概述
- 计算机网络复习(第一章 概述)
- 计算机网络第一章概述(1)
- 【C++学习笔记】C++如何查询变量的类型
- $.ajax中contentType: “application/json” 的用法
- how to slect the project direction
- 正则表达式使用
- 利用c语言来进行简单的模拟ATM机
- 第一章 算法概述(字典序问题)
- 关于socket tcp 断线重连
- 学习tensorflow pix2pix
- C++连接CTP接口实现简单量化交易(行情、交易、k线、策略)
- soapUI测接口及生成客户端
- Hibernate---fetch
- 【译】理解LSTM网络,RNN入门材料
- 面试题:String类的浅拷贝、深拷贝、写时拷贝
- 使用Busybox'创建根目录文件系统以及制作ext2格式的镜像