A. 密碼學第一次實驗報告:DES演算法與差分攻擊
DES演算法與差分攻擊
了解DES演算法基本工作原理,體會並理解分組密碼演算法的混淆和擴散概念。了解Sbox工作原理及效果。了解DES的工作模式和填充方式。了解差分攻擊
的基本原理。
IP置換目的是將輸入的64位數據塊按位重新組合,並把輸出分為L0、R0兩部分,每部分各長32位。
表中的數字代表新數據中此位置的數據在原數據中的位置,即原數據塊的第58位放到新數據的第1位,第50位放到第2位,……依此類推,第7位放到第64位。置換後的數據分為L0和R0兩部分,L0為新數據的左32位,R0為新數據的右32位。
不考慮每個位元組的第8位,DES的密鑰由64位減至56位,每個位元組的第8位作為奇偶校驗位。產生的56位密鑰由下表生成(注意表中沒有8,16,24,32,40,48,56和64這8位):
在DES的每一輪中,從56位密鑰產生出不同的48位子密鑰,確定這些子密鑰的方式如下:
1).將56位的密鑰分成兩部分,每部分28位。
2).根據輪數,這兩部分分別循環左移1位或2位。每輪移動的位數如下表:
移動後,從56位中選出48位。這個過程中,既置換了每位的順序,又選擇了子密鑰,因此稱為壓縮置換。壓縮置換規則如下表(注意表中沒有9,18,22,25,35,38,43和54這8位):
壓縮後的密鑰與擴展分組異或以後得到48位的數據,將這個數據送人S盒,進行替代運算。替代由8個不同的S盒完成,每個S盒有6位輸入4位輸出。48位輸入分為8個6位的分組,一個分組對應一個S盒,對應的S盒對各組進行代替操作。
一個S盒就是一個4行16列的表,盒中的每一項都是一個4位的數。S盒的6個輸入確定了其對應的輸出在哪一行哪一列,輸入的高低兩位做為行數H,中間四位做為列數L,在S-BOX中查找第H行L列對應的數據(<32)。
S盒代替時DES演算法的關鍵步驟,所有的其他的運算都是線性的,易於分析,而S盒是非線性的,相比於其他步驟,提供了更好安全性
S盒代替運算的32位輸出按照P盒進行置換。該置換把輸入的每位映射到輸出位,任何一位不能被映射兩次,也不能被略去,映射規則如下表:
表中的數字代表原數據中此位置的數據在新數據中的位置,即原數據塊的第16位放到新數據的第1位,第7位放到第2位,……依此類推,第25位放到第32位。
末置換是初始置換的逆過程,DES最後一輪後,左、右兩半部分並未進行交換,而是兩部分合並形成一個分組做為末置換的輸入。末置換規則如下表:
置換方法同上
實際應用中,DES是根據其加密演算法所定義的明文分組的大小(64bits),將數據割成若干64bits的加密區塊,再以加密區塊為單位,分別進行加密處理。根據數據加密時每個加密區塊間的關聯方式,可以分為4種加密模式,包括ECB,CBC,CFB及OFB。
DES演算法其中主要起作用的演算法有:矩陣置換、擴展、左移、異或、左右互換、s盒作用 。其中對攻擊者來說最麻煩的要說s盒一步,破解des體系關鍵在s盒。
乍一看六位輸入與四位輸出貌似沒什麼關系。但事實上,對於同一個s盒具有相同輸入異或的所有輸入六比特組的輸出四比特異或值有一定規律。
具體些說,對於輸入異或相同的明文對B,B*僅有32組,而這32組輸出異或卻並不是均勻分布,而是僅分布在很少的幾個四比特值中;也可以說具有相同輸入異或且輸出四比特異或也相同的六比特輸入數量不多且分布不均勻。正是這種輸入輸出輸出異或間的不均勻性可以被攻擊者利用並破解密鑰。
結果表格:
B. 演算法課程設計報告
題目中要求的功能進行敘述分析,並且設計解決此問題的數據存儲結構,(有些題目已經指定了數據存儲的,按照指定的設計),設計或敘述解決此問題的演算法,描述演算法建議使用流程圖,進行演算法分析指明關鍵語句的時間復雜度。
給出實現功能的一組或多組測試數據,程序調試後,將按照此測試數據進行測試的結果列出來 。
對有些題目提出演算法改進方案,比較不同演算法的優缺點。
如果程序不能正常運行,寫出實現此演算法中遇到的問題,和改進方法;
2 對每個題目要有相應的源程序(可以是一組源程序,即詳細設計部分):
源程序要按照寫程序的規則來編寫。要結構清晰,重點函數的重點變數,重點功能部分要加上清晰的程序注釋。
程序能夠運行,要有基本的容錯功能。盡量避免出現操作錯誤時出現死循環;
3 最後提供的主程序可以象一個應用系統一樣有主窗口,通過主菜單和分級菜單調用課程設計中要求完成的各個功能模塊,調用後可以返回到主菜單,繼續選擇其他功能進行其他功能的選擇。最好有窗口展示部分。
4 課程設計報告:(保存在word 文檔中,文件名要求 按照"姓名-學號-課程設計報告"起名,如文件名為"張三-001-課程設計報告".doc )按照課程設計的具體要求建立的功能模塊,每個模塊要求按照如下幾個內容認真完成;
其中包括:
a)需求分析:
在該部分中敘述,每個模塊的功能要求
b)概要設計
在此說明每個部分的演算法設計說明(可以是描述演算法的流程圖),每個程序中使用的存儲結構設計說明(如果指定存儲結構請寫出該存儲結構的定義。
c)詳細設計
各個演算法實現的源程序,對每個題目要有相應的源程序(可以是一組源程序,每個功能模塊採用不同的函數實現)
源程序要按照寫程序的規則來編寫。要結構清晰,重點函數的重點變數,重點功能部分要加上清晰的程序注釋。
d)調試分析
測試數據,測試輸出的結果,時間復雜度分析,和每個模塊設計和調試時存在問題的思考(問題是哪些?問題如何解決?),演算法的改進設想。
5. 課設總結: (保存在word 文檔中)總結可以包括 : 課程設計 過程的收獲、遇到問題、遇到問題解決問題過程的思考、程序調試能力的思考、對數據結構這門課程的思考、在課程設計過程中對C課程的認識等內容;
6.實驗報告的首頁請參考如下格式:
課程設計實驗
起止日期:20 -20 學年 學期
系別 班級 學號 姓名
實驗題目 □設計性 □綜合性
自我評價
教師評語 能夠實現實驗要求的功能 □全部 □部分演算法有新意 □有 □一般程序運行通過 □全部 □部分 演算法注釋說明 □完善 □僅有功能說明介面參數說明 □有 □無按期上交列印文檔資料及源程序 □所有 □部分綜合設計說明報告結構 □合理 □不合理用戶使用說明 □完整 □不全現場演示操作有準備 □有 □無問題解答流暢 □流暢 □不流暢獨立完成實驗 □能 □不能體現團隊合作精神。 □能夠 □不能
成績
這是張表格,過來時沒調整好,不過應該看得明白。我們是這樣寫的,你可以參考一下。
C. 演算法與數據結構實驗順序表的應用實驗報告
者visual c++都行。
看看這個也許你會明白的更多一些。
實驗一 多項式相加
一、實驗目的
熟悉鏈表的使用。
掌握如何使用C語言實現鏈表的說明、創建以及結點的插入和刪除等操作。
二、實驗要求
熟悉C語言編程。
三、實驗內容
對於兩個一元多項式中所有指數相同的項,對應系數相加,若其和不為零,則構成「和多項式」的一項;對於兩個一元多項式中所有指數不相同的項,則分別復抄到「和多項式」中去。
四、實驗步驟
1. 用鏈表作一元多項式的數據結構,用C語言對鏈表作說明
2. 生成輸入一元多項式的函數
3. 輸入一元多項式A(x)和B(x)
4. 以一元多項式A(x)為和多項式,將B(x)多項式中系數加入到A(x)中去
實驗二 後綴表達式計算
一、實驗目的
熟悉棧的使用。
掌握如何使用C語言實現棧的說明、創建以及進棧和出棧等操作。
二、實驗要求
熟悉C語言編程。
三、實驗內容
先將中綴表達式(就是我們通常所見的)轉換為後綴表達式,比如 a+b*c+d 要變成 abc*+d+;轉換的方法用棧來實現,涉及到運算符的優先順序;然後用另一個棧來對後綴表達式計算結果
四、實驗步驟
1.讀入字母/數字--〉字母/數字進棧
2.讀入運算符--〉退出兩個字母/數字,用運算符計算結果,並將結果進棧
3.棧能剛好退完,則最後的即為結果。否則表明表達式有誤
實驗三 Kmp演算法
一、實驗目的
熟悉字元串的使用。
掌握如何kmp演算法實驗字元串的模式匹配。
二、實驗要求
熟悉C語言編程。
三、實驗內容
求出子串(模式串)的next,利用kmp演算法實驗模式與主串的匹配演算法。
四、實驗步驟
1.生成模式串的next函數
2.從第1個字元開始,進行模式串與主串的比較,
3.如果出現失配,將模式串的第next[j]位置開始,繼續與主串進行比較。
實驗四 Huffman 編碼
一、實驗目的
熟悉Huffman編碼方法。
了解並弄懂Huffman編碼實現信息的無損壓縮原理。
二、實驗要求
熟悉C語言編程。
三、實驗內容
1.根據給定的n個權值(w1, w2, …, wn)構成n棵二叉樹的集合F=,其中每棵二叉樹Ti中只有一個帶樹為Ti的根結點
2.在F中選取兩棵根結點的權值最小的樹作為左右子樹構造一棵新的二叉樹,且置其根結點的權值為其左右子樹權值之和
3.在F中刪除這兩棵樹,同時將新得到的二叉樹加入F中
4.重復2, 3,直到F只含一棵樹為止
四、實驗步驟
1.用C語言實現二叉樹的說明
2.輸入n個權值,並生成n個二叉樹
3.對n個二叉樹逐步生成Huffman樹
4.對Huffman樹的每個葉子結點生成編碼
實驗五 關鍵路徑
一、實驗目的
熟悉關鍵路徑的實現方法。
了解AOE-網以及關鍵路徑在工程實踐中的應用。
二、實驗要求
熟悉C語言編程。
三、實驗內容
根據輸入的弧,生成AOE-網。從始點開始,找出到終點的多條路徑,求這些路徑上的關鍵活動。由關鍵活動組成的從始點到終點的路徑,即為關鍵路徑。
四、實驗步驟
1.輸入e條弧,生成AOE-網的存儲結構。
2.從始點v0出發,令ve[0]=0,按拓撲有序求ve[j]
3.從終點vn-1出發,令vl[n-1]=ve[n-1],按逆拓撲有序求vl[i]
4.根據各頂點的ve和vl值,求每條弧(活動)ai的最早開始時間e[ai]和最遲開始時間l[ai]
5.如果e[ai]=l[ai],則ai為關鍵活動
實驗六 最短路經
一、實驗目的
熟悉最短路徑的實現方法。
了解AOE-網以及最短路徑在求解實際問題中的應用。
二、實驗要求
熟悉C語言編程。
三、實驗內容
從始點v0開始,逐步求v0到其它可達的各頂點的最短路徑,直到所有頂點計算完成為止。
四、實驗步驟
1.輸入e條弧,生成AOE-網的存儲結構。
2.初始化: S ← ;
dist[j] ← Edge[0][j], j = 1, 2, …, n-1; // n為圖中頂點個數
3.求出最短路徑的長度:
dist[k] ← min , i V- S ;
S ← S U ;
4.修改從v0到V-S集合中各頂點的最短路徑:
dist[i] ← min,
對於每一個 i 屬於 V- S ;
5.判斷:若 S = V, 則演算法結束,否則轉 2。
實驗七 二叉排序樹
一、實驗目的
熟悉二叉排序樹的使用。
掌握如何使用C語言實現二叉樹的說明、創建以及二叉排序樹的生成等操作。
二、實驗要求
熟悉C語言編程。
三、實驗內容
給定一個記錄關鍵字的值,與二叉排序樹的根結點值比較,如果小於根結點的值,則向左子樹查找;如果大於根結點的值,則向右子樹查找。如果查找到葉子結點leaf,仍沒有找到記錄,則:如果關鍵字的值小於leaf的值,則插入該leaf結點的左邊,做leaf的左孩子,否則做leaf的右孩子。
四、實驗步驟
1.用C語言實現二叉樹的說明
2.直接將輸入的值作為根結點的值
3.與根結點比較,小於則放到左子樹上,大於則放到右子樹上。
實驗八 希爾排序
一、實驗目的
熟悉希爾排序的使用。
掌握如何使用C語言實現若干記錄的排序。
二、實驗要求
熟悉C語言編程。
三、實驗內容
先將整個待排記錄序列分割成為若乾子序列分別進行直接插入排序,待整個序列中的記錄「基本有序」時,再對全體記錄進行一次直接插入排序。
四、實驗步驟
1.輸入待排序記錄
2.首先取一個整數 gap < n(待排序記錄數) 作為間隔, 將全部記錄分為 gap 個子序列, 所有距離為 gap 的記錄放在同一個子序列中
3.在每一個子序列中分別施行直接插入排序。
4.然後縮小間隔 gap, 例如取 gap = gap/2
5.重復上述的子序列劃分和排序工作,直到最後取gap = 1, 將所有記錄放在同一個序列中排序為止。
實驗九 快速排序
一、實驗目的
熟悉快速排序的使用。
掌握如何使用C語言實現若干記錄的排序。
二、實驗要求
熟悉C語言編程。
三、實驗內容
通過一趟將待排記錄分割成獨立的兩個部分,其中一部分記錄的關鍵字均比另一部分記錄的關鍵字小。再對兩個部分分別進行快速排序。
四、實驗步驟
1.輸入待排序的記錄,並選擇第一個記錄作為pivotkey記錄
2.從high指向的記錄開始,向前找到第一個關鍵字的值小於Pivotkey的記錄,將其放到low指向的位置,low+1
3.從low指向的記錄開始,向後找到第一個關鍵字的值大於Pivotkey的記錄,將其放到high指向的位置,high-1
4.重復2,3,直到low=high,將樞軸記錄放在low(high)指向的位置
5.重復2,3,4,直到整個記錄有序為止
實驗十 堆排序
一、實驗目的
熟悉堆排序的使用。
掌握如何使用C語言實現若干記錄的排序。
二、實驗要求
熟悉C語言編程。
三、實驗內容
首先將一個無序序列建成一個堆;然後輸出堆頂元素;在輸出堆頂元素之後,調整剩餘的元素成為一個新堆。
四、實驗步驟
1.輸入記錄,按順序創建一個完全二叉樹
2.根據篩選演算法,從最後一個結點開始,一直到根結點,逐步篩選,建造初始堆。
3.輸出堆頂記錄,將最後一個結點放到堆頂,並做篩選,重新建造一個堆
4.直到所有記錄輸出為止
D. 大一酸鹼滴定實驗報告數據怎麼算
大一酸鹼滴定實驗報告數據演算法如下。
1、被測組分的化學表示形式。
2、按實際存在的形式表示。
E. 實驗報告題目及要求 一、實驗題目 設某班級有6名同學,本學期開設3門課程。現已給出奇偶交換排序演算法實現
只用快排就可以了,,沒必要用到哪些插入或者冒泡,效率太低了!!!!!!
在c++中qsort()排序函數的使用qsort函數應用大全
七種qsort排序方法
<本文中排序都是採用的從小到大排序>
一、對int類型數組排序
int num[100];
Sample:
int cmp ( const void *a , const void *b )
{
return *(int *)a - *(int *)b;
}
qsort(num,100,sizeof(num[0]),cmp);
二、對char類型數組排序(同int類型)
char word[100];
Sample:
int cmp( const void *a , const void *b )
{
return *(char *)a - *(int *)b;
}
qsort(word,100,sizeof(word[0]),cmp);
三、對double類型數組排序(特別要注意)
double in[100];
int cmp( const void *a , const void *b )
{
return *(double *)a > *(double *)b ? 1 : -1;
}
qsort(in,100,sizeof(in[0]),cmp);
四、對結構體一級排序
struct In
{
double data;
int other;
}s[100]
//按照data的值從小到大將結構體排序,關於結構體內的排序關鍵數據data的類型可以很多種,參考上面的例子寫
int cmp( const void *a ,const void *B)
{
return (*(In *)a)->data > (*(In *)B)->data ? 1 : -1;
}
qsort(s,100,sizeof(s[0]),cmp);
五、對結構體二級排序
struct In
{
int x;
int y;
}s[100];
//按照x從小到大排序,當x相等時按照y從大到小排序
int cmp( const void *a , const void *b )
{
struct In *c = (In *)a;
struct In *d = (In *)b;
if(c->x != d->x) return c->x - d->x;
else return d->y - c->y;
}
qsort(s,100,sizeof(s[0]),cmp);
六、對字元串進行排序
struct In
{
int data;
char str[100];
}s[100];
//按照結構體中字元串str的字典順序排序
int cmp ( const void *a , const void *b )
{
return strcmp( (*(In *)a)->str , (*(In *)B)->str );
}
qsort(s,100,sizeof(s[0]),cmp);
七、計算幾何中求凸包的cmp
int cmp(const void *a,const void *B) //重點cmp函數,把除了1點外的所有點,旋轉角度排序
{
struct point *c=(point *)a;
struct point *d=(point *)b;
if( calc(*c,*d,p[1]) < 0) return 1;
else if( !calc(*c,*d,p[1]) && dis(c->x,c->y,p[1].x,p[1].y) < dis(d->x,d->y,p[1].x,p[1].y)) // 如果在一條直線上,則把遠的放在前面
return 1;
else return -1;
}
:
c++中載入頭文件 "iostream"
c中qsort函數包含在<stdlib.h>的頭文件里,strcmp包含在<string.h>的頭文件里
/*六類qsort排序方法
P.S.:qsort函數是ANSI C標准中提供的,其聲明在stdlib.h文件中,是根據二分發寫的,其時間復雜度為n*log(n),其結構為:
void qsort(void *base,size_t nelem,size_t width,int (*Comp)(const void *,const void *));
其中:
*base 為要排序的數組
nelem 為要排序的數組的長度
width 為數組元素的大小(一字結為單位)
(* Comp)(const void *p1,const void *p2) 為判斷大小函數的指針,這個函數需要自己定義,如果p1>p2,函數返回-1;a<b,函數返回1;a==b函數返回0。
前一段時間做題覺得qsort函數很好用,但有時不太會用比如按結構體一級排序、二級排序、字元串排序等,故通過查資料將其整理一番。
以下是其具體分類及用法(若無具體說明是以升序排列):
例子1:對一維數組進行排序
#include <stdio.h>
#include <stdlib.h>
int Comp(const void *p1,const void *p2 )
{
return *((int *)p1) - *((int *)p2);
}
int main()
{
int list[100];
for(int i=0;i<10;i++)
scanf("%d",&list[i]);
qsort(list, 10,sizeof(int),Comp);
for(int i=0;i<10;i++)
printf("%d ",list[i]);
system("pause");
return 0;
}
例子2:對字元串進行排序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int Comp(const void *p1,const void *p2)
{
return strcmp((char *)p1,(char *)p2);
}
int main()
{
char a[100][100];
for(int i=0;i<3;i++)
gets(a[i]);
qsort(a,3,sizeof(a[0]),Comp);
for(int i=0;i<3;i++)
puts(a[i]);
system("pause");
return 0;
}
例子3:按結構體中某個關鍵字排序(對結構體一級排序):
#include <stdio.h>
#include <stdlib.h>
struct ab
{
int vote1;
int id;
}abc[6];
int cmp(const void *a, const void *b)
{
return ((struct ab *)a)->vote1-((struct ab *)b)->vote1;
}
int main()
{
for(int i = 0; i < 5; i++)
scanf("%d",&abc[i].vote1);
qsort((void *)abc,5,sizeof(abc[0]),cmp);
for(int i=0;i<5;i++)
printf("%d ",abc[i]);
system("pause");
return 0;
}
例子4:按結構體中多個關鍵字排序(對結構體多級排序)[以二級為例]:
#include <stdio.h>
#include <stdlib.h>
struct ab
{
int x;
int y;
}abc[6];
int cmp(const void *a, const void *b)
{
if(((struct ab *)a)->x!=((struct ab *)b)->x)
return ((struct ab *)a)->x-((struct ab *)b)->x;
else
return ((struct ab *)a)->y-((struct ab *)b)->y;
}
int main()
{
for(int i = 0; i < 5; i++)
{
scanf("%d%d",&abc[i].x,&abc[i].y);
}
qsort((void *)abc,5,sizeof(abc[0]),cmp);
for(int i=0;i<5;i++)
printf("%d %d ",abc[i].x,abc[i].y);
system("pause");
return 0;
}
例子 5:對結構體中字元串進行排序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct ab
{
int x;
char ac[100];
}abc[6];
int cmp(const void *a, const void *b)
{
return strcmp(((struct ab *)a)->ac,((struct ab *)b)->ac);
}
int main()
{
for(int i = 0; i < 5; i++)
{
gets(abc[i].ac);
}
qsort((void *)abc,5,sizeof(abc[0]),cmp);
for(int i=0;i<5;i++)
puts(abc[i].ac);
system("pause");
return 0;
}
6、計算幾何中求凸包的Comp
//以下是俺從別人那兒抄來的,暫時還沒用過
int Comp(const void *p1,const void *p2)
//重點Comp函數,把除了1點外的所有的點旋轉角度排序
{
struct point *c=(point *)p1;
struct point *d=(point *)p2;
if( cacl(*c, *d,p[1]) < 0) return 1;
else if(!cacl(*c, *d, p[1]) && dis(c->x,c->y,p[1].x,p[1].y) < dis(d->x,d->y,p[1].x,p[1].y ) )
//如果在一條直線上,則把遠的放在前面
return 1;
else return -1;
}
再次P.S.:qsort函數是ANSI C標准中提供的,其聲明在stdlib.h文件中,是根據二分發寫的,其時間復雜度為n*log(n),其結構為:
void qsort(void *base,size_t nelem,size_t width,int (*Comp)(const void *,const void *));
其中:
*base 為要排序的數組
nelem 為要排序的數組的長度
width 為數組元素的大小(一字結為單位)
(* Comp)(const void *p1,const void *p2) 為判斷大小函數的指針,這個函數需要自己定義,如果p1>p2,函數返回-1;a<b,函數返回1;a==b函數返回0。
//////////////
又見qsort--------zju2727
一道按給定關鍵字三級排序題,直接套入曾總結過的qsort模型就AC了。算是上次總結的一個補充實例吧。
源代碼:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Node{
char Name[100];
int Year,Price;
}Book[100];
/*----------------------------------------------------------------------------*/
/*int CompY(const void *p1,const void *p2)//首先按year排序
{
struct Node *c = (Node *)p1;
struct Node *d = (Node *)p2;
if(c->Year != d->Year) return c->Year-d->Year;
else if(strcmp((*(Node *)p1).Name,(*(Node *)p2).Name))
return strcmp((*(Node *)p1).Name,(*(Node *)p2).Name);
else return c->Price-d->Price;
}
int CompP(const void *p1,const void *p2)//首先按price排序
{
struct Node *c = (Node *)p1;
struct Node *d = (Node *)p2;
if(c->Price != d->Price) return c->Price-d->Price;
else if(strcmp((*(Node *)p1).Name,(*(Node *)p2).Name))
return strcmp((*(Node *)p1).Name,(*(Node *)p2).Name);
else return c->Year-d->Year;
}
int CompN(const void *p1,const void *p2)//首先按name排序
{
struct Node *c = (Node *)p1;
struct Node *d = (Node *)p2;
if(strcmp((*(Node *)p1).Name,(*(Node *)p2).Name))
return strcmp((*(Node *)p1).Name,(*(Node *)p2).Name);
else if(c->Year != d->Year) return c->Year-d->Year;
else return c->Price-d->Price;
}
/*-------------------------------------------------------------------*/
/*void outres(int n)
{
int i;
for(i=0;i<n;i++)
printf("%s %d %d\n",Book[i].Name,Book[i].Year,Book[i].Price);
}
/*-----------------------------------------------------------------*/
/*int main()
{
int n;
char format[15];
//freopen("in.txt","r",stdin);
scanf("%d",&n);
while(n)
{
for(int i=0;i<n;i++)
scanf("%s%d%d",Book[i].Name,&Book[i].Year,&Book[i].Price);
scanf("%s",format);
if(format[0]=='Y')
{
qsort(Book, n, sizeof(Book[0]), CompY);
}
else if(format[0]=='P')
{
qsort(Book, n, sizeof(Book[0]), CompP);
}
else
{
qsort(Book, n, sizeof(Book[0]), CompN);
}
outres(n);
scanf("%d",&n);
if(n)printf("\n");
}
return 0;
}
*/
poj3664
#include <stdio.h>
#include <stdlib.h>
struct ab
{
int vote1;
int vote2;
int id;
}abc[1000000];
int cmp1(const void *a, const void *b)
{
return ((struct ab *)a)->vote1-((struct ab *)b)->vote1;
}
int cmp2(const void *a,const void *b)
{
return ((struct ab *)a)->vote2-((struct ab *)b)->vote2;
}
int main()
{
int i,j,k;
scanf("%d%d",&j,&k);
for(i = 0; i < j; i++)
{
scanf("%d%d",&abc[i].vote1, &abc[i].vote2);
abc[i].id = i + 1;
}
qsort((void *)abc,j,sizeof(abc[0]),cmp1);
qsort((void *)(&abc[j-k]),k,sizeof(abc[0]),cmp2);
printf("%d\n",abc[j-1].id);
//system("pause");
return 0;
}
F. 求教在MATLAB中BP演算法最後怎麼由測試數據得到實際輸出啊
clear
p=[...]%輸入
t=[...]%輸出
%
創建一個新的前向神經網路
net_1=newff(minmax(p),[10,1],{'tansig','purelin'},'traingdm');
%
當前輸入層權值和閾值
inputweights=net_1.iw{1,1};
inputbias=net_1.b{1};
%
當前網路層權值和閾值
layerweights=net_1.lw{2,1};
layerbias=net_1.b{2};
%
設置訓練參數
net_1.trainparam.show
=
50;
net_1.trainparam.lr
=
0.05;
net_1.trainparam.mc
=
0.9;
net_1.trainparam.epochs
=
1000;
net_1.trainparam.goal
=
1e-3;
%
調用
traingdm
演算法訓練
bp
網路
[net_1,tr]=train(net_1,p,t);
%
對
bp
網路進行模擬
a
=
sim(net_1,p);
%
計算模擬誤差
e
=
t
-
a;
mse=mse(e)
x=[1
2
3]'
sim(net_1,x)
G. 請問寫論文的實驗數據在哪裡獲得
學校電子圖書館都有的啊,搜關鍵詞就行。
H. 數據挖掘中 聚類演算法 數據集在什麼地方獲取的
可以使用UCI上的標准數據集 http://archive.ics.uci.e/ml/ ,kdd上的也行
其次是你看文顯時文中提到的可以獲得的數據及集
I. 我在做關聯規則演算法,請問在哪裡可以找到試驗用的數據
現在做關聯規則演算法實驗數據有兩種做法,一種是找專門的數據集,比如說Microsoft Anonymous Web Data (anonymous-msweb)、foodmart 這類數據集;還有一種是將分類數據集比如UCI數據集直接構造成可以用的關聯數據集
J. C語言實驗報告怎麼寫實驗步驟高手最好給個樣板啊!
.實驗報告規范
實驗報告內容包括:
1.實驗目的:說明實驗所驗證的知識點。
2.需求分析:以無歧義的陳述說明程序設計的任務、約束條件、輸入輸出要求、對功能的規定及模型。
3.邏輯設計:說明本程序中用到的所有抽象數據類型的定義、主程序的流程以及各程序模塊之間的層次調用關系。
4.詳細設計:邏輯設計中定義的所有數據類型的實現,核心演算法的設計描述、人機界面設計、函數之間調用關系的描述,主要功能的演算法框架,測試數據設計。
5.測試分析:測試結果的分析與討論,測試過程中遇到的主要問題及採取的解決措施。
6.心得:軟體設計與實現過程中的經驗與體會,進一步改進的設想。
7.程序清單:源程序中應有足夠的注釋。如果提交源程序軟盤,列出程序文件名。