當前位置:首頁 » 操作系統 » 高效演算法

高效演算法

發布時間: 2023-04-15 06:52:57

❶ 編一高效演算法,求1!+2!+3!+.......+n!

。。。。。。。

#include <stdio.h>
#include <stdlib.h>
fun(int x);
int main(void)
{
char *pszBuff = NULL;
int a;
int i=1;
int sumResult = 0;
printf("input a int number::");
scanf("%d", &a);
for(i=1;i<=a;i++)
{
int tmp = fun(i);
sumResult = sumResult + tmp ;
printf("%d!=%d, 1-%d的階皮旅乘的寬卜和為%d\n",i,tmp,sumResult );
}
return 0;
}
int fun(int x)
{
int ret;
if(x == 1) return 1;
ret = fun(x-1)*x;
return ret;
}

MM有空多看看書啊。。慎握穗。

❷ 怎樣才算高效的演算法

演算法的高效:是你的循環指令的條數。這汪答乎個和時間復雜度o(n)有點相近。
一般來說,你的指令條數少,編譯成匯編的指令條數相對來說一般也少。我們的計算機是存儲指令困悉數據模式的,一條指令執行完再執行另外一條指令。
一般來說對於排序演算法,冒泡的時間復雜度為0(n*n),快速排序nlog(n),(最快的是桶排序演算法)。基於此的比較,寫起來的程序舉擾,相對而言,快速排序的平均指令條數要少於冒泡排序。

❸ 《高效演算法競賽、應試與提高必修128例》pdf下載在線閱讀,求百度網盤雲資源

《高效演算法》([法] Christoph Dürr)電子書網盤下載免費在線閱讀

資源鏈接:

鏈接:https://pan..com/s/17jSKaBY6XgJIvU0DczbbOA 提取碼:ettv

書名:高效演算法

作者:[法] Christoph Dürr

譯者:史世強

出版社:人民郵電出版社

出版年份:2018-5

頁數:204

內容簡介:

本書旨在探討如何優化演算法效率,詳細闡述了經典演算法和特殊演算法的實現、應用技巧和復雜度驗證過程,內容由淺入深,能幫助讀者快速掌握復雜度適當、正確率高的高效編程方法以及自檢、自測技巧,是參加ACM/ICPC、Google Code Jam 等國際編程競賽、備戰編程考試、提高編程效率、優化編程方法的參考書目。

作者簡介:

Christoph Dürr

法國國家科學研究院研究員,巴黎皮埃爾-瑪麗•居里大學博士生導師,Operation Research科研組研究主任。

Jill-Jênn Vie

法國高等電力學院博士、演算法講師,擔任法國高等師范學院Paris-Saclay團隊在ACM競賽中的演算法導師;曾任法國國際編程大賽Prologin主席,並於2014年獲Google RISE Award。

❹ C語言中,求兩個數的最小公倍數,的「高效」演算法是

這思路我自己想的,但是我也說不太明白,反正我知道怎麼回事
1先判斷大數%小數是不是0,是0那麼大數就是最小公倍數
2不是的話,讓大數%小數得到一個數,讓小數%得到的數,如果得0
那麼讓大數*(小數/(大數%小數)),得到得數是最小公倍數
3如果2中小數%得到的這個數不等於0,那麼恭喜你,這兩個數的最小公倍數就是:大數*小數
4如果這兩個數相等,那麼,隨便一個都是最小公倍數
純手打,今天剛好做這個題,看到網上沒什麼答案,我就寫寫我的思路
C++語法如下:
int pd(int A,int B);
int main() {int i, k;goto C;
C: {
printf("第一個數:"); scanf("%d", &i);
printf("第二個數:"); scanf("%d", &k);
printf("這兩個數的公倍數為:%d\n\n", pd(i, k));
goto C; }
return 0;
}
int pd(int A, int B) {
int P;
if (A > B) {
if (A%B == 0) { P = A; }
else if (B % (A%B) == 0) { P = A*(B / (A%B)); }
else { P = A*B; }
}
else if (B > A) {
if (B%A == 0) { P = B; }
else if (A % (B%A) == 0) { P = B*(A / (B%A)); }
else { P = B*A; }
}
else { P = A; }
return P;
}

❺ C語言,已知線性表中的元素以值遞增有序排列,並以單鏈表作存儲結構,高效演算法怎麼算

一個功缺辯能函數:

#include<stdio.h>

#include<stdlib.h>

typedefstructlist{

intdata;

structlist*next;

}list;

voidfun(list*head,intmink,intmaxk){

list*pre,*p;

pre=head;

p=pre->next;

while(p){

if(p->data>mink&&p->data<maxk){

pre->next=p->next;

p=pre->next;

}

else{

pre=pre->next;

p=pre->next;

}

}

}

❻ C語言編程(高效演算法):3的1000次冪

需要用高精度,寫起來會比較繁
至於高效,可以先計算
3^2,3^4,3^8,3^16,3^32,3^64...3^1024
2^1000 = 3^8 * 3^32 * 3^64 * 3^128 * 3^256 * 3^512

❼ 數據結構:設計一個高效演算法,將順序表中的所有元素逆置,要求演算法空間復雜度為O(1)。

設計一個高效演算法,將順序表中的所有元素逆置,要求演算法空間復雜度為O(1)掃描順序表L的前半部分元素L.data[i] (0<=i<L.length/2),將其與後半部分的對應元素L.data[L.length-1-i]進行交換即可。

順序表的存儲只要確定了起始位置,表中任一元素的地址都通過下列公式得到:LOC(ai)=LOC(a1)+(i-1)*L 1≤i≤n 其中,L是元素佔用存儲單元的長度。

(7)高效演算法擴展閱讀:

數據的物理結構是數據結構在計算機中的表示,它包括數據元素的機內表示和關系的機內表示。由於具體實現的方法有順序、鏈接、索引、散列等多種。

數據元素的機內用二進制位(bit)的位串表示數據元素。當數據元素有若干個數據項組成時,位串中與各個數據項對應的子位串稱為數據域(data field)。

❽ 數據結構:設計一個高效演算法,將順序表中的所有元素逆置,要求演算法空間復雜度為O(1)。

數據結構的高效演算法:for(int i = 0; i < array.length / 2; i++) {swap(array[i], array[array.length - i - 1])}

只有swap函數需要一個位元組的內存,所以空間復雜度O(1)。

❾ 如何設計一個高效演算法,找到第一次重復出現的字元

定義字元串類的映射map類,建立map類對象。通過循環讀入字元串到映射對象,遍歷映射對象的迭代器,統計字元串出現次數,輸出字元串和出現次數。給你個例子吧:

#include <iostream>#include <fstream>#include <map>#include <string>using namespace std ;int main ( int argc, char* argv [ ] ) { typedef map < string , int > WordMap ; // 定義特定的字元串映射類型 typedef WordMap :: iterator wmIter ; // 定義該類型的迭代器 const char* fname = "city.txt" ; // 預設文件名串 if ( argc > 1 ) fname = argv [ 1 ] ; // 讀入命令行的第一個參數,作為文件名路徑串 ifstream in ( fname ) ; // 打開文件輸入流 if ( ! in ) { // 如果打開錯誤,則顯示提示信息後退出 cout << " Open file " << fname << " error ! " << endl ; system("pause"); return 1 ; } WordMap wordmap ; // 定義單詞映射對象 string word ; // 定義單詞字元串對象 while ( in >> word ) wordmap [ word ] ++ ; // 從文件中讀入單詞 // 遍歷容器,顯示輸出計數大於等於2的單詞和計數 for ( wmIter w = wordmap . begin ( ) ; w != wordmap . end ( ) ; w ++ ) if ( w->second >= 2 ) cout << w->first << " : " << w->second << endl ; system("pause"); return 0 ;}

❿ 數據結構 設計高效演算法問題

// 要求是刪除順序表中在范圍[x, y]內的元素。
// 按常規思路,每刪除一個順序表元素,則要將其後的元素整體前移一個位置。這種演算法用到了雙重for循環,時間復雜度為O(n^2)。
// 以下的演算法只用到了單重for循環,時間復雜度為O(n)。原理是把所有不在范圍[x, y]內的元素依次保存到順序表的前部,而不處理本來要刪除的、在范圍[x, y]內的元素。當把所有不需要刪除的元素都保存到了順序表前部,只需要重新設置一下順序表的長度為「前部」的最大下標+1,就模擬了刪除操作。

void fun(SqList *&L, ElemType x)
{
// i為循環計數器。
// j為不需要刪除的元素個數,初始化為0。
int i, j = 0;

// 依次遍歷順序表的每個元素
for (i = 0; i < L->length; ++i)
{
// 只處理不需要刪除的元素,即不屬於區間[x, y]的元素
if (!(L->data[i] >= x && L->data[i] <= y))
{
// 每找到一個不需要刪除的元素,就把該元素保存到下標j的位置。
L->data[j] = L->data[i];
// 隨後令j自增1。之前j代表的是處理後的順序表的最大下標,現在j代表的是處理後的順序表的長度。由於下標從0開始,所以長度永遠比最大下標大1。
++j;
}
}

// 設置順序表的長度為j,這樣以後遍歷順序表只能訪問前j個元素。即使下標j之後可能還存在屬於[x, y]的元素,但是不會訪問到它們,自然相當於「刪除」了。
L->length = j;
}

熱點內容
我的世界pe伺服器木牌 發布:2025-09-12 11:42:58 瀏覽:690
qt編程寶典 發布:2025-09-12 11:22:51 瀏覽:204
星塵源碼網 發布:2025-09-12 11:22:42 瀏覽:268
ubuntu下的c編譯器 發布:2025-09-12 11:14:46 瀏覽:449
excel找出重復的資料庫 發布:2025-09-12 10:55:03 瀏覽:780
編程小孩子學 發布:2025-09-12 10:42:26 瀏覽:210
反編譯可以編譯出源代碼嗎 發布:2025-09-12 10:39:18 瀏覽:703
cx4選什麼配置劃算 發布:2025-09-12 10:27:29 瀏覽:280
android圖標隱藏 發布:2025-09-12 10:26:51 瀏覽:332
學習演算法的心得體會 發布:2025-09-12 10:04:32 瀏覽:925