當前位置:首頁 » 編程語言 » 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:建立另一個字元數組,將要刪除的字元之後的字元復制到這個新數組,然後再將新數組中的字元復制到原數組中從要刪除的字元開始的位置即可.