當前位置:首頁 » 操作系統 » 演算法代碼

演算法代碼

發布時間: 2022-01-24 03:08:45

❶ 求LZW演算法源代碼!!

#include<iostream>
#include<cstdio>
#include<cstring>
#include<ctime>//用來計算壓縮的時間
using namespace std;

//定義常數
const int MAX = 1000003;//最大code數,是一個素數,求模是速度比較快
const int ascii = 256; //ascii代碼的數量
const int ByteSize = 8; //8個位元組

struct Element//hash表中的元素
{
int key;
int code;
Element *next;
}*table[MAX];//hash表

int hashfunction(int key)//hash函數
{
return key%MAX;
}
void hashinit(void)//hash表初始化
{
memset(table,0,sizeof(table));
}
void hashinsert(Element element)//hash表的插入
{
int k = hashfunction(element.key);
if(table[k]!=NULL)
{
Element *e=table[k];
while(e->next!=NULL)
{
e=e->next;
}
e->next=new Element;
e=e->next;
e->key = element.key;
e->code = element.code;
e->next = NULL;
}
else
{
table[k]=new Element;
table[k]->key = element.key;
table[k]->code = element.code;
table[k]->next = NULL;
}
}
bool hashfind(int key,Element &element)//hash表的查找
{
int k = hashfunction(key);
if(table[k]!=NULL)
{
Element *e=table[k];
while(e!=NULL)
{
if(e->key == key)
{
element.key = e->key;
element.code = e->code;
return true;
}
e=e->next;
}
return false;
}
else
{
return false;
}
}
void compress(void)//壓縮程序
{
//打開一個流供寫入
FILE *fp;
fp = fopen("result.dat", "wb");

Element element;
int used;
char c;
int pcode, k;

for(int i=0;i<ascii;i++)
{
element.key = i;
element.code = i;
hashinsert(element);
}
used = ascii;

c = getchar();
pcode = c;
while((c = getchar()) != EOF)
{
k = (pcode << ByteSize) + c;
if(hashfind(k, element))
pcode = element.code;
else
{
//cout<<pcode<<' ';
fwrite(&pcode, sizeof(pcode), 1, fp);
element.code = used++;
element.key = (pcode << ByteSize) | c;
hashinsert(element);
pcode = c;
}
}
//cout<<pcode<<endl;
fwrite(&pcode, sizeof(pcode), 1, fp);

}
int main(void)
{
int t1,t2;

//欲壓縮的文本文件
//freopen("input.txt","r",stdin);
freopen("book5.txt","r",stdin);

t1=time(NULL);
hashinit();
compress();
t2=time(NULL);

cout<<"Compress complete! See result.dat."<<endl;
cout<<endl<<"Total use "<<t2-t1<<" seconds."<<endl;
}

c語言斐多那契演算法代碼

用數組的辦法編一下吧,方法很多了,記得好象一般的C語言書上都會有的題目:
#include "stdio.h"
main()
{int a[20]={1,1},i;
for(i=2;i<20;i++)
a[i]=a[i-1]+a[i-2];
for(i=0;i<20;i++)
{if(i%5==0) printf("\n");
printf("%10d",a[i]);
}
}

❸ 求C++編程演算法描述,隨便哪種演算法都可以。。下面是要求和源代碼

1、鍵入半徑和高,由演算法V=PI*r2*h得
2、上一個用的是C++,這個是C……我很好奇,你不可能是菜鳥啊,兩種語言都用到了,怎麼會不知道演算法描述?!

❹ 哈夫曼編碼的演算法代碼

//本程序根據26個英文字母出現的頻度,得到了它們的一種哈夫曼編碼方案 //by jirgal 2005.4.18 #include<iostream.h> #include<iomanip.h> #define NUM 26 //字母數 #define TNUM 51 // #define LTH 15 //編碼最大長度 class Node { public: char data; int weight; int parent; int lchild; int rchild; }; void main() { char ch[NUM]={'a','b','c','d','e','f','g','h','i','j','k','l', 'm','n','o','p','q','r','s','t','u','v','w','x','y','z'};//26個字母 int weit[NUM]={856,139,279,378,1304,289,199,528,627,13,42, 339,249,707,797,199,12,677,607,1045,249,92,149,17,199,8};//出現頻率 Node nodes[TNUM]; //用對象數組存儲哈夫曼樹 int i,j,one,two,a,b; int hc[NUM][LTH]; //用於存儲編碼 int m,n; //初始化數組 for(i=0;i<NUM;i++) { nodes[i].data=ch[i]; nodes[i].weight=weit[i]; nodes[i].parent=-1; nodes[i].lchild=-1; nodes[i].rchild=-1; } for(i=NUM;i<TNUM;i++) { nodes[i].data='@'; nodes[i].weight=-1; nodes[i].parent=-1; nodes[i].lchild=-1; nodes[i].rchild=-1; } //建立哈夫曼樹 for(i=NUM;i<TNUM;i++) { a=b=-1; one=two=10000; //最大權數 for(j=0;j<i;j++) { if(nodes[j].parent==-1) if(nodes[j].weight<=two) one=two; two=nodes[j].weight; a=b; b=j; } else if(nodes[j].weight>two&&nodes[j].weight<=one) { one=nodes[j].weight; a=j; } } }//for語句得到 parent=-1(即尚沒有父結點)且weight最小的兩個結點 nodes[a].parent=i; nodes[b].parent=i; nodes[i].lchild=a; nodes[i].rchild=b; nodes[i].weight=nodes[a].weight+nodes[b].weight; } //初始化hc for(i=0;i<LTH;i++) { for(j=0;j<NUM;j++) { hc[j][i]=7; } } //編碼 for(i=0;i<NUM;i++) { j=LTH-1; for(m=i,n=nodes[i].parent;m!=-1;m=n,n=nodes[n].parent) { if(nodes[n].lchild==m) { hc[i][j]=0; } else { hc[i][j]=1; } j--; } } //輸出 nodes cout<<"HuffmanTree:"<<endl; cout<<setw(4)<<"NO."<<setw(6)<<"data"<<setw(8)<<"weight"<<setw(6) <<"parnt"<<setw(6)<<"lchd"<<setw(6)<<"rchd"<<endl; for(i=0;i<TNUM;i++) { cout<<setw(4)<<i<<setw(6)<<nodes[i].data<<setw(8)<<nodes[i].weight<<setw(6) <<nodes[i].parent<<setw(6)<<nodes[i].lchild<<setw(6)<<nodes[i].rchild<<endl; } //輸出編碼 cout<<endl<<"Result:"<<endl; cout<<setw(6)<<"char"<<setw(10)<<"frequency"<<setw(16)<<"huffmancode\n"; for(i=0;i<NUM;i++) { cout<<setw(6)<<ch[i]<<setw(8)<<weit[i]; cout<<" "; for(j=0;j<LTH;j++) { if(hc[i][j]!=7) { cout<<hc[i][j]; } } cout<<endl; } cout<<"\nDone.\n"<<endl; }

❺ 演算法和代碼什麼區別具體一點..

代碼是實現功能的具體,而演算法是實現功能的抽象,換句話說演算法是為了實現功能的方法,但怎麼體現呢?得靠代碼體現,因為代碼才能最終變成計算機認識的東西,才能表現為我們需要的功能

❻ matlab中Boosting演算法的代碼是什麼

先看這個結構裡面的這些函數都是干什麼用的,prob,概率。[1:keep],這里應該能大概看出來keep是整數,1:keep等價於1:1:keep,比如1:10,就是1,2,3,4,5,6,7,8,9,10。步長為1,從1到keep.右上角的',這個符號,表示轉置,比如1:10,是一個1行10列的矩陣,通過轉置變成10行一列。其中,sum([1:keep]),表示對這個矩陣(從1到keep求和),但是這個語句prob=flipud([1:keep]'/sum([1:keep]));裡面總覺得缺少了一個.。prob=flipud([1:keep]'./sum([1:keep]));這樣看來應該才能運行,我沒嘗試,在commandwindow裡面直接做是可以的,但是在腳本文件裡面做,可能會報錯。這個和矩陣運算有關,暫且放在這里。然後到外部,這樣我們知道了在第一行flipud()函數體裡面,實際上是在用1到keep的每一個數,除以1到keep的和值,得到一個長度為keep的矩陣。值得注意的是,這個矩陣的和值為1,在下面會用到這一點。然後flipud()函數的作用,是把矩陣倒置,比如[1,3,4,5],使用flipud()之後變成[5,4,3,1]。注意,這個操作和sort()函數不同,這個只是把以前的順序倒置,並不排序。從這里大概可以看出來,其實這個keep的值,等於chromosomes,染色體數量。這樣,對於不同的染色體,配對概率就不一樣了。從這里可以看出來,染色體配對概率應該是第一條最高,然後依次遞減。然後計算或然率,cumsum(),進行累加求和,比如matlab中給出的例子,我們用[1,2,3]也可以寫作1:3,來說,cumsum之後的結果是[1,3,6],也就是從第一個開始加和,一直加到這一項。這一點,非常類似高斯函數積分的感覺。用來計算概率cumulativedistribution。然後odd變數,把0加在了cumsum結果的前面,比如剛剛的例子[0cumsum([1,2,3])],就變成了[0,1,3,6]。注意這個地方他又轉置了一次,因為在第一行計算prob的時候,他把一個行向量,轉換成了列向量,然後現在要把0加在頭上,所以在進行cumsun()運算的時候,又把結果從列向量轉換成了行向量。僅從這兩行代碼裡面,就大概只能看出這個意思了。不過簡單一說,現在看不出來這個遺傳演算法的核心是什麼樣的,一般的神經網路裡面只有連鎖交換定律的應用,一般沒有基因分離定律的應用。看這個樣子,這是分離出來然後自由配對的做法,應該是比較高端的東西吧。

❼ 請問程序中的代碼和演算法有什麼區別呀謝謝。。。

演算法是一種思路,解決問題的方法,當時老師甚至還說,廣義的演算法,包括你做事情的任何解決方法,而代碼,就是可見的東西了,就那些實現演算法的東西

❽ 演算法和偽代碼有什麼區別啊

偽代碼(Pseudocode)是一種演算法描述語言。使用為代碼的目的是為了使被描述的演算法可以容易地以任何一種編程語言(Pascal, C, Java, etc)實現。因此,偽代碼必須結構清晰,代碼簡單,可讀性好,並且類似自然語言。

下面介紹一種類Pascal語言的偽代碼的語法規則。

偽代碼的語法規則
在偽代碼中,每一條指令佔一行(else if 例外,),指令後不跟任何符號(Pascal和C中語句要以分號結尾);
書寫上的「縮進」表示程序中的分支程序結構。這種縮進風格也適用於if-then-else語句。用縮進取代傳統Pascal中的begin和end語句來表示程序的塊結構可以大大提高代碼的清晰性;同一模塊的語句有相同的縮進量,次一級模塊的語句相對與其父級模塊的語句縮進;
例如:

line 1
line 2
sub line 1
sub line 2
sub sub line 1
sub sub line 2
sub line 3
line 3
而在Pascal中這種關系用begin和end的嵌套來表示,

line 1
line 2
begin
sub line 1
sub line 2
begin
sub sub line 1
sub sub line 2
end;
sub line 3
end;
line 3在C中這種關系用{ 和 } 的嵌套來表示,

line 1
line 2
{
sub line 1
sub line 2
{
sub sub line 1
sub sub line 2
}
sub line 3
}
line 3
在偽代碼中,通常用連續的數字或字母來標示同一即模塊中的連續語句,有時也可省略標號。
例如:

1. line 1
2. line 2
a. sub line 1
b. sub line 2
1. sub sub line 1
2. sub sub line 2
c. sub line 3
3. line 3符號△後的內容表示注釋;
在偽代碼中,變數名和保留字不區分大小寫,這一點和Pascal相同,與C或C++不同;
在偽代碼中,變數不需聲明,但變數局部於特定過程,不能不加顯示的說明就使用全局變數;
賦值語句用符號←表示,x←exp表示將exp的值賦給x,其中x是一個變數,exp是一個與x同類型的變數或表達式(該表達式的結果與x同類型);多重賦值i←j←e是將表達式e的值賦給變數i和j,這種表示與j←e和i←e等價。
例如:

x←y
x←20*(y+1)
x←y←30
以上語句用Pascal分別表示為:

x := y;
x := 20*(y+1);
x := 30; y := 30;
以上語句用C分別表示為:

x = y;
x = 20*(y+1);
x = y = 30;
選擇語句用if-then-else來表示,並且這種if-then-else可以嵌套,與Pascal中的if-then-else沒有什麼區別。
例如:

if (Condition1)
then [ Block 1 ]
else if (Condition2)
then [ Block 2 ]
else [ Block 3 ]
循環語句有三種:while循環、repeat-until循環和for循環,其語法均與Pascal類似,只是用縮進代替begin - end;
例如:

1. x ← 0
2. y ← 0
3. z ← 0
4. while x < N
1. do x ← x + 1
2. y ← x + y
3. for t ← 0 to 10
1. do z ← ( z + x * y ) / 100
2. repeat
1. y ← y + 1
2. z ← z - y
3. until z < 0
4. z ← x * y
5. y ← y / 2
上述語句用Pascal來描述是:

x := 0;
y := 0;
z := 0;
while x < N do
begin
x := x + 1;
y := x + y;
for t := 0 to 10 do
begin
z := ( z + x * y ) / 100;
repeat
y := y + 1;
z := z - y;
until z < 0;
end;
z := x * y;
end;
y := y / 2;
上述語句用C或C++來描述是:

x = y = z = 0;
while( z < N )
{
x ++;
y += x;
for( t = 0; t < 10; t++ )
{
z = ( z + x * y ) / 100;
do {
y ++;
z -= y;
} while( z >= 0 );
}
z = x * y;
}
y /= 2;
數組元素的存取有數組名後跟「[下標]」表示。例如A[j]指示數組A的第j個元素。符號「 …」用來指示數組中值的范圍。
例如:

A[1…j]表示含元素A[1], A[2], … , A[j]的子數組;

復合數據用對象(Object)來表示,對象由屬性(attribute)和域(field)構成。域的存取是由域名後接由方括弧括住的對象名表示。
例如:

數組可被看作是一個對象,其屬性有length,表示其中元素的個數,則length[A]就表示數組A中的元素的個數。在表示數組元素和對象屬性時都要用方括弧,一般來說從上下文可以看出其含義。

用於表示一個數組或對象的變數被看作是指向表示數組或對象的數據的一個指針。對於某個對象x的所有域f,賦值y←x就使f[y]=f[x],更進一步,若有f[x]←3,則不僅有f[x]=3,同時有f[y]=3,換言之,在賦值y←x後,x和y指向同一個對象。

有時,一個指針不指向任何對象,這時我們賦給他nil。

函數和過程語法與Pascal類似。
函數值利用 「return (函數返回值)」 語句來返回,調用方法與Pascal類似;過程用 「call 過程名」語句來調用;

例如:

1. x ← t + 10
2. y ← sin(x)
3. call CalValue(x,y)
參數用按值傳遞方式傳給一個過程:被調用過程接受參數的一份副本,若他對某個參數賦值,則這種變化對發出調用的過程是不可見的。當傳遞一個對象時,只是拷貝指向該對象的指針,而不拷貝其各個域。

❾ 代碼演算法,有什麼樣的演算法或者數學公式實現下面這個功能

演算法簡述:

1、輸入總人數。

2、拿出A,每3人組一個局,累計局數。

3、然後將A每局用過的人分別加在BCD三組下,剩餘不足3人的人數記在賬上。

4、對BCD三組下的人數分別重復A的計算,計算時合並用上前道計算的剩餘人數。

5、使用遞歸過程對BCD下一級進行上述1到4的步驟。

6、總人數不足4人時退出遞歸。

以下是12人、100人、1000人、10000人的計算結果:

12人最多可以組5局。

以下分別是m=12,100,1000,10000時的計算結果,以及fortran代碼。

❿ 求一個C語言冪次的演算法代碼

a^A

就是^

熱點內容
資料庫設計模板 發布:2024-11-15 00:47:25 瀏覽:825
編程的悟性 發布:2024-11-15 00:47:24 瀏覽:733
主流可編譯語言 發布:2024-11-15 00:42:23 瀏覽:729
excel緩存清除 發布:2024-11-15 00:39:53 瀏覽:486
機械鍵盤可編程 發布:2024-11-15 00:39:09 瀏覽:912
php判斷字元開頭 發布:2024-11-15 00:35:33 瀏覽:507
網易蘋果游戲怎麼轉移到安卓 發布:2024-11-15 00:07:52 瀏覽:270
win7php環境搭建 發布:2024-11-15 00:06:55 瀏覽:17
erpjava 發布:2024-11-14 23:52:23 瀏覽:253
電腦版地平線四怎麼連上伺服器 發布:2024-11-14 23:46:42 瀏覽:472