当前位置:首页 » 编程语言 » c语言编辑距离
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言编辑距离

发布时间: 2022-04-11 13:12:11

① 最常用的几个python库

Python常用库大全,看看有没有你需要的。
环境管理
管理 Python 版本和环境的工具
p – 非常简单的交互式 python 版本管理工具。
pyenv – 简单的 Python 版本管理工具。
Vex – 可以在虚拟环境中执行命令。
virtualenv – 创建独立 Python 环境的工具。
virtualenvwrapper- virtualenv 的一组扩展。
包管理
管理包和依赖的工具。
pip – Python 包和依赖关系管理工具。
pip-tools – 保证 Python 包依赖关系更新的一组工具。
conda – 跨平台,Python 二进制包管理工具。
Curdling – 管理 Python 包的命令行工具。
wheel – Python 分发的新标准,意在取代 eggs。
包仓库
本地 PyPI 仓库服务和代理。
warehouse – 下一代 PyPI。
Warehousebandersnatch – PyPA 提供的 PyPI 镜像工具。
devpi – PyPI 服务和打包/测试/分发工具。
localshop – 本地 PyPI 服务(自定义包并且自动对 PyPI 镜像)。
分发
打包为可执行文件以便分发。
PyInstaller – 将 Python 程序转换成独立的执行文件(跨平台)。
dh-virtualenv – 构建并将 virtualenv 虚拟环境作为一个 Debian 包来发布。
Nuitka – 将脚本、模块、包编译成可执行文件或扩展模块。
py2app – 将 Python 脚本变为独立软件包(Mac OS X)。
py2exe – 将 Python 脚本变为独立软件包(Windows)。
pynsist – 一个用来创建 Windows 安装程序的工具,可以在安装程序中打包 Python本身。
构建工具
将源码编译成软件。
buildout – 一个构建系统,从多个组件来创建,组装和部署应用。
BitBake – 针对嵌入式 Linux 的类似 make 的构建工具。
fabricate – 对任何语言自动找到依赖关系的构建工具。
PlatformIO – 多平台命令行构建工具。
PyBuilder – 纯 Python 实现的持续化构建工具。
SCons – 软件构建工具。
交互式解析器
交互式 Python 解析器。
IPython – 功能丰富的工具,非常有效的使用交互式 Python。
bpython- 界面丰富的 Python 解析器。
ptpython – 高级交互式Python解析器, 构建于python-prompt-toolkit 之上。
文件
文件管理和 MIME(多用途的网际邮件扩充协议)类型检测。
imghdr – (Python 标准库)检测图片类型。
mimetypes – (Python 标准库)将文件名映射为 MIME 类型。
path.py – 对 os.path 进行封装的模块。
pathlib – (Python3.4+ 标准库)跨平台的、面向对象的路径操作库。
python-magic- 文件类型检测的第三方库 libmagic 的 Python 接口。
Unipath- 用面向对象的方式操作文件和目录
watchdog – 管理文件系统事件的 API 和 shell 工具
日期和时间
操作日期和时间的类库。
arrow- 更好的 Python 日期时间操作类库。
Chronyk – Python 3 的类库,用于解析手写格式的时间和日期。
dateutil – Python datetime 模块的扩展。
delorean- 解决 Python 中有关日期处理的棘手问题的库。
moment – 一个用来处理时间和日期的Python库。灵感来自于Moment.js。
PyTime – 一个简单易用的Python模块,用于通过字符串来操作日期/时间。
pytz – 现代以及历史版本的世界时区定义。将时区数据库引入Python。
when.py – 提供用户友好的函数来帮助用户进行常用的日期和时间操作。
文本处理
用于解析和操作文本的库。
通用
chardet – 字符编码检测器,兼容 Python2 和 Python3。
difflib – (Python 标准库)帮助我们进行差异化比较。
ftfy – 让Unicode文本更完整更连贯。
fuzzywuzzy – 模糊字符串匹配。
Levenshtein – 快速计算编辑距离以及字符串的相似度。
pangu.py – 在中日韩语字符和数字字母之间添加空格。
pyfiglet -figlet 的 Python实现。
shortuuid – 一个生成器库,用以生成简洁的,明白的,URL 安全的 UUID。
unidecode – Unicode 文本的 ASCII 转换形式 。
uniout – 打印可读的字符,而不是转义的字符串。
xpinyin – 一个用于把汉字转换为拼音的库。

② 求试题,17届NOIP(c语言)普及组初赛试题

一、单项选择题(共20题,每题1.5分,共计30分。每题有且仅有一个正确选项。)
1.在二进制下,1101001 + ( ) = 1110110。
A. 1011 B. 1101 C. 1010 D. 1111
2.字符“0”的ASCII码为48,则字符“9”的ASCII码为( )。
A. 39 B. 57 C. 120 D. 视具体的计算机而定
3.一片容量为8GB的SD卡能存储大约( )张大小为2MB的数码照片。
A. 1600 B. 2000 C. 4000 D. 16000
4.摩尔定律(Moore's law)是由英特尔创始人之一戈登•摩尔(Gordon Moore)提出来的。根据摩尔定律,在过去几十年以及在可预测的未来几年,单块集成电路的集成度大约每( )个月翻一番。
A. 1 B. 6 C. 18 D. 36

5.无向完全图是图中每对顶点之间都恰有一条边的简单图。已知无向完全图G有7个顶点,则它共有( )条边。
A. 7 B. 21 C. 42 D. 49

6.寄存器是( )的重要组成部分。
A. 硬盘 B. 高速缓存 C. 内存 D. 中央处理器(CPU)

7.如果根结点的深度记为1,则一棵恰有2011个叶结点的二叉树的深度最少是( )。
A. 10 B. 11 C. 12 D. 13

8. 体育课的铃声响了,同学们都陆续地奔向操场,按老师的要求从高到矮站成一排。每个同学按顺序来到操场时,都从排尾走向排头,找到第一个比自己高的同学,并站在他的后面。这种站队的方法类似于( )算法 。
A. 快速排序 B. 插入排序 C. 冒泡排序 D. 归并排序

9.一个正整数在二进制下有100位,则它在十六进制下有( )位。
A. 7 B. 13 C. 25 D. 不能确定

10.有人认为,在个人电脑送修前,将文件放入回收站中就是已经将其删除了。这种想法是( )。
A. 正确的,将文件放入回收站意味着彻底删除、无法恢复
B. 不正确的,只有将回收站清空后,才意味着彻底删除、无法恢复
C. 不正确的,即使将回收站清空,文件只是被标记为删除,仍可能通过恢复软件找回
D. 不正确的,只要在硬盘上出现过的文件,永远不可能被彻底删除

11.广度优先搜索时,需要用到的数据结构是( )。
A. 链表 B. 队列 C. 栈 D. 散列表

12.在使用高级语言编写程序时,一般提到的“空间复杂度”中的“空间”是指( )。
A. 程序运行时理论上所占的内存空间
B. 程序运行时理论上所占的数组空间
C. 程序运行时理论上所占的硬盘空间
D. 程序源文件理论上所占的硬盘空间

13.在含有n个元素的双向链表中查询是否存在关键字为k的元素,最坏情况下运行的时间复杂度是( )。
A. O(1) B. O(log n) C. O(n) D. O(n log n)

14.生物特征识别,是利用人体本身的生物特征进行身份认证的一种技术。目前,指纹识别、虹膜识别、人脸识别等技术已广泛应用于政府、银行、安全防卫等领域。以下不属于生物特征识别技术及其应用的是( )。
A. 指静脉验证 B. 步态验证 C. ATM机密码验证 D. 声音验证

15.现有一段文言文,要通过二进制哈夫曼编码进行压缩。简单起见,假设这段文言文只由4个汉字“之”、“乎”、“者”、“也”组成,它们出现的次数分别为700、600、300、200。那么,“也”字的编码长度是( )。
A. 1 B. 2 C. 3 D. 4

16.关于汇编语言,下列说法错误的是( )。
A. 是一种与具体硬件相关的程序设计语言
B. 在编写复杂程序时,相对于高级语言而言代码量较大,且不易调试
C. 可以直接访问寄存器、内存单元、以及I/O端口
D. 随着高级语言的诞生,如今已完全被淘汰,不再使用

17.( )是一种选优搜索法,按选优条件向前搜索,以达到目标。当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择。
A. 回溯法 B. 枚举法 C. 动态规划 D. 贪心法

18.1956年( )授予肖克利(William Shockley)、巴丁(John Bardeen)和布拉顿(Walter Brattain),以表彰他们对半导体的研究和晶体管效应的发现。
A. 诺贝尔物理学奖
B. 约翰•冯•诺依曼奖
C. 图灵奖
D. 高德纳奖(Donald E. Knuth Prize)

19.对一个有向图而言,如果每个节点都存在到达其他任何节点的路径,那么就称它是强连通的。例如,右图就是一个强连通图。事实上,在删掉边( )后,它依然是强连通的。
A. a B. b C. c D. d

20.从ENIAC到当前最先进的计算机,冯•诺依曼体系结构始终占有重要的地位。冯•诺依曼体系结构的核心内容是( )。
A. 采用开关电路 B. 采用半导体器件
C. 采用存储程序和程序控制原理 D. 采用键盘输入

二、问题求解(共2题,每题5分,共计10分)

1.每份考卷都有一个8位二进制序列号。当且仅当一个序列号含有偶数个1时,它才是有效的。例如,00000000、01010011都是有效的序列号,而11111110不是。那么,有效的序列号共有________个。

2.定义字符串的基本操作为:删除一个字符、插入一个字符和将一个字符修改成另一个字符这三种操作。将字符串A变成字符串B的最少操作步数,称为字符串A到字符串B的编辑距离。字符串"ABCDEFG"到字符串"BADECG"的编辑距离为________。

三、阅读程序写结果(共4题,每题8分,共计32分)

1.
#include<stdio.h>
int main() {
int i, n, m, ans;

scanf("%d%d", &n, &m);
i = n;
ans = 0;
while (i <= m) {
ans += i;
i++;
}
printf("%d\n", ans);
return 0;
}
输入:10 20
输出:_________

2.
#include <stdio.h>
#include <string.h>
#define SIZE 20

int main()
{
char map[] = "22233344455566677778889999";
char tel[SIZE];
int i;

scanf("%s", tel);
for (i = 0; i < strlen(tel); i++)
if ((tel[i] >= '0') && (tel[i] <= '9'))
printf("%c", tel[i]);
else if ((tel[i] >= 'A') && (tel[i] <= 'Z'))
printf("%c", map[tel[i] - 'A']);
return 0;
}

输入:CCF-NOIP-2011
输出:_________

3.
#include <stdio.h>
#include <string.h>
#define SIZE 100

int main()
{
int n, i, sum, x, a[SIZE];

scanf("%d", &n);
memset(a, 0, sizeof(a));
for (i = 1; i <= n; i++) {
scanf("%d", &x);
a[x]++;
}

i = 0;
sum = 0;
while (sum < (n / 2 + 1)) {
i++;
sum += a[i];
}
printf("%d\n", i);
return 0;
}

输入:
11
4 5 6 6 4 3 3 2 3 2 1
输出:_________

4.
#include <stdio.h>

int solve(int n, int m)
{
int i, sum;

if (m == 1)
return 1;
sum = 0;
for (i = 1; i < n; i++)
sum += solve(i, m - 1);
return sum;
}

int main()
{
int n, m;

scanf("%d %d", &n, &m);
printf("%d\n", solve(n, m));
return 0;
}

输入:7 4
输出:_________

四、完善程序(前11空,每空2分,后2空,每空3分,共计28分)

1.(子矩阵)输入一个n1*m1的矩阵a,和n2*m2的矩阵b,问a中是否存在子矩阵和b相等。若存在,输出所有子矩阵左上角的坐标;若不存在输出“There is no answer”。

#include <stdio.h>
#define SIZE 50

int n1, m1, n2, m2, a[SIZE][SIZE], b[SIZE][SIZE];

int main()
{
int i, j, k1, k2, good, haveAns;

scanf("%d %d", &n1, &m1);
for (i = 1; i <= n1; i++)
for (j = 1; j <= m1; j++)
scanf("%d", &a[i][j]);
scanf("%d %d", &n2, &m2);
for (i = 1; i <= n2; i++)
for (j = 1; j <= m2; j++)
① ;

haveAns = 0;
for (i = 1; i <= n1 - n2 + 1; i++)
for (j = 1; j <= ② ; j++) {
③ ;
for (k1 = 1; k1 <= n2; k1++)
for (k2 = 1; k2 <= ④ ; k2++) {
if (a[i + k1 - 1][j + k2 - 1] != b[k1][k2])
good = 0;
}
if (good == 1) {
printf("%d %d\n", i, j);
⑤ ;
}
}
if (haveAns == 0)
printf("There is no answer\n");
return 0;
}

2.(大整数开方)输入一个正整数n(1≤n<10100),试用二分法计算它的平方根的整数部分。

#include <stdio.h>
#include <string.h>
#define SIZE 200

typedef struct node {
int len, num[SIZE];
} hugeint;
//其中len表示大整数的位数;num[1]表示个位、num[2]表示十位,以此类推

hugeint times(hugeint a, hugeint b)
//计算大整数a和b的乘积
{
int i, j;
hugeint ans;

memset(ans.num, 0, sizeof(ans.num));
for (i = 1; i <= a.len; i++)
for (j = 1; j <= b.len; j++)
① += a.num[i] * b.num[j];
for (i = 1; i <= a.len + b.len; i++) {
ans.num[i + 1] += ans.num[i] / 10;
② ;
}
if (ans.num[a.len + b.len] > 0)
ans.len = a.len + b.len;
else
ans.len = a.len + b.len - 1;
return ans;
}

hugeint add(hugeint a, hugeint b)
//计算大整数a和b的和
{
int i;
hugeint ans;

memset(ans.num, 0, sizeof(ans.num));
if (a.len > b.len)
ans.len = a.len;
else
ans.len = b.len;
for (i = 1; i <= ans.len; i++) {
ans.num[i] += ③ ;
ans.num[i + 1] += ans.num[i] / 10;
ans.num[i] %= 10;
}
if (ans.num[ans.len + 1] > 0)
ans.len++;
return ans;
}

hugeint average(hugeint a, hugeint b)
//计算大整数a和b的平均数的整数部分
{
int i;
hugeint ans;

ans = add(a, b);
for (i = ans.len; i >= 2; i--) {
ans.num[i - 1] += ( ④ ) * 10;
ans.num[i] /= 2;
}
ans.num[1] /= 2;
if (ans.num[ans.len] == 0)
ans.len--;
return ans;
}

hugeint plustwo(hugeint a)
//计算大整数a加2后的结果
{
int i;
hugeint ans;

ans = a;
ans.num[1] += 2;
i = 1;
while ((i <= ans.len) && (ans.num[i] >= 10)) {
ans.num[i + 1] += ans.num[i] / 10;
ans.num[i] %= 10;
i++;
}
if (ans.num[ans.len + 1] > 0)
⑤ ;
return ans;
}

int over(hugeint a, hugeint b)
//若大整数a>b则返回1,否则返回0
{
int i;

if ( ⑥ )
return 0;
if (a.len > b.len)
return 1;
for (i = a.len; i >= 1; i--) {
if (a.num[i] < b.num[i])
return 0;
if (a.num[i] > b.num[i])
return 1;
}
return 0;
}

int main()
{
char s[SIZE];
int i;
hugeint target, left, middle, right;

scanf("%s", s);
memset(target.num, 0, sizeof(target.num));
target.len = strlen(s);
for (i = 1; i <= target.len; i++)
target.num[i] = s[target.len - i] - ⑦ ;
memset(left.num, 0, sizeof(left.num));
left.len = 1;
left.num[1] = 1;
right = target;
do {
middle = average(left, right);
if (over( ⑧ ) == 1)
right = middle;
else
left = middle;
} while (over(plustwo(left), right) == 0);
for (i = left.len; i >= 1; i--)
printf("%d", left.num[i]);
printf("\n");
return 0;
}

③ C语言中基本的几种算法有哪些越多越好!就像打擂台算法'冒泡排序法等等...

排序算法
冒泡排序
选择排序
快速排序
高精度运算
存储方法
加法运算
减法运算
乘法运算
扩大进制数
习题与练习
搜索算法
枚举算法
深度优先搜索
广度优先搜索
8数码问题
n皇后问题
搜索算法习题
枚举法习题
聪明的打字员
量水问题
染色问题
跳马问题
算24点
图论算法
最小生成树算法(Prim算法)
单源最短路径算法(Dijkstra算法)
任意结点最短路径算法(Floyd算法)
求有向带权图的所有环
Bellman-Ford算法
计算图的连通性
计算最佳连通分支
计算拓扑序列
图论算法习题
网络建设问题
最短变换问题
挖地雷
乌托邦城市
乌托邦交通中心
动态规划
最短路径问题
动态规划概念
骑士游历问题
最长递增子序列
合唱队形
石子合并问题
能量项链
0/1背包问题
开心的金明
金明的预算方案
加分二叉树
字串编辑距离
花瓶插花
凸多边形三角划分
快餐店

④ 动态规划解编辑距离

a a lgorithm
l al gorithm
replace g by t alt orithm
delete o alt rithm
r altr ithm
insert u altru ithm
insert i altrui ithm
insert s altruis ithm
twiddle it into ti altruiti hm
insert c altruitic hm
kill hm altruitic

⑤ c语言 编辑距离算法 程序运行没问题 就是字符串长了会溢出 求修改

我用递归实现动态规划。
int fun (char*a,char*b)
{
if(strcmp(a,b)==0)return 0;
else
return min(fun(a+1,b),fun(a,b+1),fun(a+1,b+1));
}

因为是递归,可能浪费一些时间。不过可以参考动态规划中的“备忘录”方法,就是用数组记录已经算好的值。

思路和你类似。你试试看吧

⑥ c语言 编辑距离算法 程序运行没问题 就是字符串长了会溢出 求修改

方法1:把要删除的字符后面的字符依次前移一位覆盖前面的字符即可.
方法2:建立另一个字符数组,将要删除的字符之后的字符复制到这个新数组,然后再将新数组中的字符复制到原数组中从要删除的字符开始的位置即可.