當前位置:首頁 » 操作系統 » 演算法與分析期末

演算法與分析期末

發布時間: 2022-09-19 21:55:30

㈠ 中國海洋大學研一往年演算法分析與設計期末考試試題

中國海洋大學相關信息,
可詢問學校研究生院。
只要努力付出過,
就會有收獲。

㈡ 演算法設計與分析的題目,求高手啊

如何選擇排序、矩陣相乘、樹和圖演算法的時間復雜性計量單位?
排序:排序的循環次數(或遞歸次數)。
矩陣相乘:做實數乘法的次數。
樹:搜索的次數。
圖:同樹。
演算法有幾種基本結構?各種結構的時間復雜度的計算規則?
3種
順序結構:T(n)=O(c)
選擇結構:T(n)=O(c)
循環結構:T(n)=O(n)
最壞情況下的時間復雜性和平均情況下的時間復雜性的定義?
在規模n的全部輸入中,可以找尋執行一個演算法所需的最大時間資源的量,這個量稱為對規模n的輸入,演算法的最壞情況時間復雜性。
對規模都為n的一些有限輸入集,執行演算法所需的平均時間資源的量稱為平均情況下的時間復雜性。
為什麼選擇時間復雜度的漸進性態評價演算法?
因為在規模較小的時候無法客觀體現一個演算法的效率。
解釋f(n)=O(g(n))的意義。
若f(n)和g(n)是定義在正整數集合上的 兩個函數,則f(n)=O(g(n))表示存在正的常數C和n0 ,使得當n≥n0時滿足0≤f(n)≤C*g(n)。
簡述之就是這兩個函數當整型自變數n趨向於無窮大時,兩者的比值是一個不等於0的常數。
有效演算法和無效演算法的劃分原則?
區分在於問題是否能夠精確求解。
用分治法設計演算法有什麼好處?為什麼描述分治演算法需要使用遞歸技術?
分治法可以將問題分為許規模更小的子問題,這些子問題相互獨立且與原問題相同。使用遞歸技術,雖然一些簡單的循環結構替代之,但是復雜的問題,比如二階遞歸是無法替代的。
歸並排序演算法和快速排序演算法劃分子問題和合並子問題的解的方法各是是怎樣的?
歸並排序演算法:
劃分子問題:每次分成2個大小大致相同的子集和
合並子問題:將2個排好序的子數組合並為一個數組
快速排序演算法:對輸入的子數組a[p:r]
劃分子問題:劃分為a[p:q-1],a[q]和a[q+1:r]使a[p:q-1]任意元素小於a[q],a[q+1:r] 任意元素大於a[q]
合並子問題:不需要(因為劃分過程就已經排序完成了)
簡述二分檢索(折半查找)演算法為什麼比順序查找的效率高?
對於二分搜索 最壞情況為O(logn)時間完成
而順序查找 需要O(n)次比較
顯然二分搜索效率高
貪心法的核心是什麼?
貪心演算法是通過一系列選擇得到問題的解,它所作出的選擇都是當前狀態下的最佳選擇。
背包問題的目標函數是什麼?背包問題貪心演算法的最優量度是什麼?演算法是否獲得最優解? 用貪心演算法解0/1背包問題是否可獲得最優解?
Max=∑Vi*Xi (V是價值X取1,0表示裝入或不裝)
每次選取單位重量價值最高的
不一定是最優解

情況不妙啊 LZ還要繼續否。。。
早知發郵件了。。。

㈢ 演算法設計與分析課程總結怎麼寫、急急急!!!!!!

一、演算法分析的基本思路
二、演算法設計的解決方案
三、對過程的綜合總結

㈣ 演算法設計分析期末考題目,「密碼學中的演算法」設計實現單表置換密碼,能對英文和數字組成的短文進行加密

很久沒用C了,寫的比較凌亂,呵呵

#include "stdio.h"
#include "conio.h"
#define MAP_SIZE 128
#define CONTENT_SIZE 1000
#define VALID_CHAR_COUNT 62
char map[MAP_SIZE], rmap[MAP_SIZE], keymask[MAP_SIZE];
char input[CONTENT_SIZE], output[CONTENT_SIZE];
void initialize(char *array)
{
int i;
for(i = 0; i < MAP_SIZE; ++i)
{
array[i] = i;
keymask[i] = 0;
}
}
int isvalidchar(char c)
{
/*判斷字元是否字母或數字*/
return c >= '0' && c <= '9' || c >= 'a' && c <= 'z' ||c >= 'A' && c <= 'Z';
}
int convertindex(int i)
{
/*將0~61的數字轉換到轉換表中對應區段的下標
即0~9 => 數字,10~35 => 大寫字母,36~61 => 小寫字母*/
if(i < 10)
{
return i + '0';
}
i-=10;
if(i < 26)
{
return i + 'A';
}
i-=26;
if(i < 26)
{
return i + 'a';
}
}
void gen_map(char *key)
{
/*生成加密用的置換表*/
int index = 0, i;
initialize(map);
while(*key)
{
/*先將密鑰中的字元加入轉換表,並做標記*/
if(keymask[*key] == 0)
{
keymask[*key] = 1;
map[convertindex(index++)] = *key;
}
++key;
}
for(i = 0; i < MAP_SIZE; ++i)
{
/*將密鑰中未出現的字元依次加入轉換表*/
if(keymask[i] == 0 && isvalidchar(i))
{
map[convertindex(index++)] = i;
}
}
}
void gen_rmap(char *key)
{
/*生成解密用的置換表*/
int index = 0, i;
initialize(rmap);
while(*key)
{
/*先將密鑰中的字元加入轉換表,並做標記*/
if(keymask[*key] == 0)
{
keymask[*key] = 1;
rmap[*key] = convertindex(index++);
}
++key;
}
for(i = 0; i < MAP_SIZE; ++i)
{
/*將密鑰中未出現的字元依次加入轉換表*/
if(keymask[i] == 0 && isvalidchar(i))
{
rmap[i] = convertindex(index++);
}
}
}
void encrypt(char *key)
{
int i, len = strlen(input);
gen_map(key);
for(i = 0; i < len; ++i)
{
/*對每一個原文中的字元,從置換表中找到對應字元並加入輸出緩沖*/
output[i] = map[input[i]];
}
output[len] = 0;
}
void decrypt(char *key)
{
int i, len = strlen(input);
gen_rmap(key);
for(i = 0; i < len; ++i)
{
/*對每一個原文中的字元,從置換表中找到對應字元並加入輸出緩沖*/
output[i] = rmap[input[i]];
}
output[len] = 0;
}
int main()
{
char key[CONTENT_SIZE];
int opt;
while(1)
{
do
{
printf("Input 1 to encrypt, 2 to decrypt, or 0 to exit:");
scanf("%d%c", &opt);
}
while(opt != 1 && opt != 2 && opt != 0);
if(opt == 0)
{
return 0;
}
puts("Content:");
gets(input);
puts("Key:");
gets(key);
if(opt == 1)
{
encrypt(key);
}
else
{
decrypt(key);
}
puts(output);
}
}

熱點內容
內置存儲卡可以拆嗎 發布:2025-05-18 04:16:35 瀏覽:336
編譯原理課時設置 發布:2025-05-18 04:13:28 瀏覽:378
linux中進入ip地址伺服器 發布:2025-05-18 04:11:21 瀏覽:612
java用什麼軟體寫 發布:2025-05-18 03:56:19 瀏覽:32
linux配置vim編譯c 發布:2025-05-18 03:55:07 瀏覽:107
砸百鬼腳本 發布:2025-05-18 03:53:34 瀏覽:944
安卓手機如何拍視頻和蘋果一樣 發布:2025-05-18 03:40:47 瀏覽:742
為什麼安卓手機連不上蘋果7熱點 發布:2025-05-18 03:40:13 瀏覽:803
網卡訪問 發布:2025-05-18 03:35:04 瀏覽:511
接收和發送伺服器地址 發布:2025-05-18 03:33:48 瀏覽:372