當前位置:首頁 » 操作系統 » 什麼是數學演算法

什麼是數學演算法

發布時間: 2023-09-02 06:10:53

⑴ 數學中都有什麼演算法

定義法、配方法、待定系數法、換元法、反證法、數學歸納法、導數法、賦值法、消去法、定比分離法、比較法、分析法、綜合法 ,還有很多桑
介里有幾個比較詳細的哈.
一、換元法
「換元」的思想和方法,在數學中有著廣泛的應用,靈活運用換元法解題,有助於數量關系明朗化,變繁為簡,化難為易,給出簡便、巧妙的解答.
在解題過程中,把題中某一式子如f(x),作為新的變數y或者把題中某一變數如x,用新變數t的式子如g(t)替換,即通過令f(x)=y或x=g(t)進行變數代換,得到結構簡單便於求解的新解題方法,通常稱為換元法或變數代換法.
用換元法解題,關鍵在於根據問題的結構特徵,選擇能以簡馭繁,化難為易的代換f(x)=y或x=g(t).就換元的具體形式而論,是多種多樣的,常用的有有理式代換,根式代換,指數式代換,對數式代換,三角式代換,反三角式代換,復變數代換等,宜在解題實踐中不斷總結經驗,掌握有關的技巧.
例如,用於求解代數問題的三角代換,在具體設計時,宜遵循以下原則:(1)全面考慮三角函數的定義域、值域和有關的公式、性質;(2)力求減少變數的個數,使問題結構簡單化;(3)便於藉助已知三角公式,建立變數間的內在聯系.只有全面考慮以上原則,才能謀取恰當的三角代換.
換元法是一種重要的數學方法,在多項式的因式分解,代數式的化簡計算,恆等式、條件等式或不等式的證明,方程、方程組、不等式、不等式組或混合組的求解,函數表達式、定義域、值域或最值的推求,以及解析幾何中的坐標替換,普通方程與參數方程、極坐標方程的互化等問題中,都有著廣泛的應用.
二、消元法
對於含有多個變數的問題,有時可以利用題設條件和某些已知恆等式(代數恆等式或三角恆等式),通過適當的變形,消去一部分變數,使問題得以解決,這種解題方法,通常稱為消元法,又稱消去法.
消元法是解方程組的基本方法,在推證條件等式和把參數方程化成普通方程等問題中,也有著重要的應用.
用消元法解題,具有較強的技巧性,常常需要根據題目的特點,靈活選擇合適的消元方法
三、待定系數法
按照一定規律,先寫出問題的解的形式(一般是指一個算式、表達式或方程),其中含有若干尚待確定的未知系數的值,從而得到問題的解.這種解題方法,通常稱為待定系數法;其中尚待確定的未知系數,稱為待定系數.
確定待定系數的值,有兩種常用方法:比較系數法和特殊值法.
四、判別式法
實系數一元二次方程
ax2+bx+c=0 (a≠0) ①
的判別式△=b2-4ac具有以下性質:
>0,當且僅當方程①有兩個不相等的實數根
△ =0,當且僅當方程①有兩個相等的實數根;
<0,當且僅當方程②沒有實數根.
對於二次函數
y=ax2+bx+c (a≠0)②
它的判別式△=b2-4ac具有以下性質:
>0,當且僅當拋物線②與x軸有兩個公共點;
△ =0,當且僅當拋物線②與x軸有一個公共點;
<0,當且僅當拋物線②與x軸沒有公共點.
五、 分析法與綜合法
分析法和綜合法源於分析和綜合,是思維方向相反的兩種思考方法,在解題過程中具有十分重要的作用.
在數學中,又把分析看作從結果追溯到產生這一結果的原因的一種思維方法,而綜合被看成是從原因推導到由原因產生的結果的另一種思維方法.通常把前者稱為分析法,後者稱為綜合法.
六、 數學模型法
例(哥尼斯堡七橋問題)18世紀東普魯士哥尼斯堡有條普萊格河,這條河有兩個支流,在城中心匯合後流入波羅的海.市內辦有七座各具特色的大橋,連接島區和兩岸.每到傍晚或節假日,許多居民來這里散步,觀賞美麗的風光.年長日久,有人提出這樣的問題:能否從某地出發,經過每一座橋一次且僅一次,然後返回出發地?
數學模型法,是指把所考察的實際問題,進行數學抽象,構造相應的數學模型,通過對數學模型的研究,使實際問題得以解決的一種數學方法.
七、配方法
所謂配方,就是把一個解析式利用恆等變形的方法,把其中的某些項配成一個或幾個多項式正整數次冪的和形式.通過配方解決數學問題的方法叫配方法.其中,用的最多的是配成完全平方式.配方法是數學中一種重要的恆等變形的方法,它的應用十分非常廣泛,在因式分解、化簡根式、解方程、證明等式和不等式、求函數的極值和解析式等方面都經常用到它.
八、因式分解法
因式分解,就是把一個多項式化成幾個整式乘積的形式.因式分解是恆等變形的基礎,它作為數學的一個有力工具、一種數學方法在代數、幾何、三角等的解題中起著重要的作用.因式分解的方法有許多,除中學課本上介紹的提取公因式法、公式法、分組分解法、十字相乘法等外,還有如利用拆項添項、求根分解、換元、待定系數等等.
九、換元法
換元法是數學中一個非常重要而且應用十分廣泛的解題方法.我們通常把未知數或變數稱為元,所謂換元法,就是在一個比較復雜的數學式子中,用新的變元去代替原式的一個部分或改造原來的式子,使它簡化,使問題易於解決.
介里LL沒有說很詳細桑,內啥簡便演算法我也一起說了桑丶
乘法交換律,乘法分配律,加法交換律,加法結合律,乘法分配律,

⑵ 高中數學的演算法,程序框圖

其實你把課好好聽、作業認真完成都搞懂就可以了,不要這么緊張。我經驗是最後考試題目非常簡單。要注重培養邏輯思維,模仿計算機按步驟辦事計算。有問題再問我好了。

附上:對高中數學中演算法的幾點認識(網上找的,意義不大)

演算法屬於新教材的新增內容,筆者結合自己的教學體會,談談對演算法的理解和認識,供各位同仁參考:
1、演算法的內容
(1)自然語言(2)程序框圖(3)演算法語句,其中,在每種語言中有各自的結構,如:順序結構、循環結構、條件結構等。
2、演算法在高中課程中的地位:
演算法內容的設計分為兩部分。
一部分主要介紹演算法的基礎知識,可以稱作演算法的「三基」:演算法基本思想,演算法基本結構,演算法基本語句。通過一些具體的案例介紹演算法的基本思想,使學生了解:為了解決一個問題,設計出解決問題的系列步驟,任何人實施這些步驟就可以解決問題,這就是解決問題的一個演算法。這是對演算法的一種廣義的理解。對演算法的理解,更多地是與計算機聯系在一起,計算機可以完成這些步驟。
演算法的基本結構一般有三種:順序結構,分叉結構,循環結構。前兩種結構很容易理解,循環結構稍微有點難,這里用到函數思想,難在理解反映循環過程的循環變數。在教學過程中,一定要通過具體的案例,結合具體的情境引入概念,會使問題變得很簡單。
介紹演算法語句的時候,要區分演算法語言和基本的演算法語句。我們知道,現在使用的演算法語言是很多的,例如,basic 語言,q-basic 語言,c-語言,等等。在高中的數學課程中,不要求介紹演算法語言,僅僅需要了解基本語句,例如,輸入語句,輸出語句,賦值語句,條件語句,循環語句,等等。在不同的語言中,這些語句的表示可能不一樣,數學課程要求採用公認的統一表示,稱為偽代碼。很容易把偽代碼翻譯成任何一種演算法語言。
描述演算法有三種語言:自然語言、框圖語言、基本演算法語句。
演算法的另一部分設計,是把演算法的思想融入相關數學內容中。實際上,演算法思想是貫穿在高中數學課程始終的基本思想。例如,二分法求方程的解;點到直線的距離、點到平面的距離、直線到直線距離;立體幾何性質定理的證明過程;一元二次不等式;線性規劃;等等內容中,都運用了演算法思想。
用演算法思想學習和認識數學對於提高數學素養是很有用的,希望老師予以重視。
3、理解賦值語句:
賦值是演算法中的難點之一,理解賦值對於理解演算法是非常重要的。
賦值就是把數值賦予給定的變數。例如,a:=5,就表示變數a被賦予的值是5,即a=5,這個被賦值的變數可以與其他的值進行運算。對於被賦值的變數a,還可以賦予其它的值取代原來的值。我們可以用磁帶錄音來比喻賦值,在我們錄音時,是把磁帶上舊的錄音材料沖掉之後,才能把新的錄音材料載入上去。同樣的道理,我們這里的賦值也是先把原來的值清零之後,再把新的值賦上去。下面我們通過一個例子來說明如何設置變數和給變數賦值。
例:設計一個演算法,從4個不同的數中找出最大數。
解:記這5個不同的數分別為a1,a2,a3,a4,a5,演算法步驟如下:
1、比較a1與a2將較大的數記作b.
(在這一步中,b表示的是前2個數中的最大數)
2、再將b與a3進行比較,將較大的數記作b.
(執行完這一步後,b的值就是前3個數中的最大數)
3、再將b與a4進行比較,將較大的數記作b.
(執行完這一步後,b的值就是前4個數中的最大數)
4、輸出b,b的值即為所求得最大數。
分析:上述演算法的4個步驟中,每步都要與上一步中得到的最大數b進行比較,得出新的最大數。b可以取不同的值,b就稱之為變數。在第1步到第3步的演算法過程中,我們都把比較後的較大數記作b,即把值賦予了b,這個過程就是賦值的過程,這個過程有兩個功能,第一,我們可以不斷地對b的值進行改變,即把數值放入b中;第二,b的值每變化一次都是為下一步的比較服務。
4、函數在循環結構中的作用:
(1)循環結構是演算法的一種基本結構。
例如,設計演算法,輸出1000以內能被3和5整除的所有正整數。解決這個問題,我們首先要引入變數a表示待輸出的數,則a=15n (n=1,2,3,…,66).n從n從1變到66,反復輸出a,就能輸出1000以內的所有能被3和5整除的正整數。像這樣的演算法結構稱為循環結構,其中反復執行的部分稱為循環體。變數n控制著循環的開始和結束,稱為循環變數。
(2)循環結構是理解演算法的另一個難點,難點在於對於循環變數的理解。
循環結構中的循環變數分為兩種形式,一種是控制循環次數的變數,例如,輸出1000以內能被3和5整除的所有正整數這個循環結構中,n就是控制循環次數的循環變數。另一種是控制結果精確度的變數,例如用二分法演算法求方程f(x)=0在區間[0,1]上的一個近似解的流程圖,要求精確度為。在這個演算法過程中,精確度就是控制結果精確度的循環變數。
循環變數使得循環體得以「循環」,循環變數控制了循環的「開始」和「結束」,是刻畫循環結構的關鍵。
以上幾點是對演算法的粗淺認識,不當之處,請批評指正!

⑶ 什麼是演算法演算法的概念演算法的特點都有哪些

1、演算法概念:
在數學上,現代意義上的「演算法」通常是指可以用計算機來解決的某一類問題是程序或步驟,這些程序或步驟必須是明確和有效的,而且能夠在有限步之內完成.
2. 演算法的特點:
(1)有限性:一個演算法的步驟序列是有限的,必須在有限操作之後停止,不能是無限的.
(2)確定性:演算法中的每一步應該是確定的並且能有效地執行且得到確定的結果,而不應當是模稜兩可.
(3)順序性與正確性:演算法從初始步驟開始,分為若干明確的步驟,每一個步驟只能有一個確定的後繼步驟,前一步是後一步的前提,只有執行完前一步才能進行下一步,並且每一步都准確無誤,才能完成問題.
(4)不唯一性:求解某一個問題的解法不一定是唯一的,對於一個問題可以有不同的演算法.
(5)普遍性:很多具體的問題,都可以設計合理的演算法去解決,如心算、計算器計算都要經過有限、事先設計好的步驟加以解決.

⑷ 高一數學必修三 演算法的概念

S1:
d=/Aa+Bb+C//根號下(A^2+B^2)
if(d=r)相切;
else if(d>r)相離;
else 相交;

S2:
h=根號下[L^2-a^2/3];
S=a^2*(根號下3)/4
V=S*h/3

⑸ 演算法的核心是什麼,數學就是演算法嗎

我覺得這樣理解是不全面的,首先演算法的核心是如何用抽象的數學模型來解決這個實際問題,而且實現的手段是通過代碼編程,所以說演算法的核心是數學是基本准確的。但是數學是演算法這個說法就問題很大了。
數學包含的范圍非常廣,自己是一個自洽的系統,而且隨著人類的認識的提高,數學也在發展,也發展了很多新的數學工具來幫我們解決實際問題。
所以說如果數學是背後的關於真理的理論,那麼演算法是部分真理被使用(通過代碼實現的方式)來幫我們解決一些特定的問題。
這是我的理解。

⑹ 高二數學 演算法的概念 在線等!!!!!!!!!!!!!

演算法 參考出處:http://blog.csdn.net/ctu_85/archive/2008/05/11/2432736.aspx
一、什麼是演算法
演算法是一系列解決問題的清晰指令,也就是說,能夠對一定規范的輸入,在有限時間內獲得所要求的輸出。演算法常常含有重復的步驟和一些比較或邏輯判斷。如果一個演算法有缺陷,或不適合於某個問題,執行這個演算法將不會解決這個問題。不同的演算法可能用不同的時間、空間或效率來完成同樣的任務。一個演算法的優劣可以用空間復雜度與時間復雜度來衡量。
演算法的時間復雜度是指演算法需要消耗的時間資源。一般來說,計算機演算法是問題規模n 的函數f(n),演算法執行的時間的增長率與f(n) 的增長率正相關,稱作漸進時間復雜度(Asymptotic Time Complexity)。時間復雜度用「O(數量級)」來表示,稱為「階」。常見的時間復雜度有: O(1)常數階;O(log2n)對數階;O(n)線性階;O(n2)平方階。
演算法的空間復雜度是指演算法需要消耗的空間資源。其計算和表示方法與時間復雜度類似,一般都用復雜度的漸近性來表示。同時間復雜度相比,空間復雜度的分析要簡單得多。
[font class="Apple-style-span" style="font-weight: bold;" id="bks_etfhxykd"]演算法 Algorithm [/font]
演算法是在有限步驟內求解某一問題所使用的一組定義明確的規則。通俗點說,就是計算機解題的過程。在這個過程中,無論是形成解題思路還是編寫程序,都是在實施某種演算法。前者是推理實現的演算法,後者是操作實現的演算法。
一個演算法應該具有以下五個重要的特徵:
1、有窮性: 一個演算法必須保證執行有限步之後結束;
2、確切性: 演算法的每一步驟必須有確切的定義;
3、輸入:一個演算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指演算法本身定除了初始條件;
4、輸出:一個演算法有一個或多個輸出,以反映對輸入數據加工後的結果。沒有輸出的演算法是毫無意義的;
5、可行性: 演算法原則上能夠精確地運行,而且人們用筆和紙做有限次運算後即可完成。
演算法的設計要求
1)正確性(Correctness)
有4個層次:
A.程序不含語法錯誤;
B.程序對幾組輸入數據能夠得出滿足規格要求的結果;
C.程序對精心選擇的、典型的、苛刻的、帶有刁難性的幾組輸入數據能夠得出滿足規格要求的結果;
D.程序對一切合法的輸入數據都能產生滿足規格要求的結果。
2)可讀性(Readability)
演算法的第一目的是為了閱讀和交流;
可讀性有助於對演算法的理解;
可讀性有助於對演算法的調試和修改。
3)高效率與低存儲
處理速度快;存儲容量小
時間和空間是矛盾的、實際問題的求解往往是求得時間和空間的統一、折中。
演算法的描述 演算法的描述方式(常用的)
演算法描述 自然語言
流程圖 特定的表示演算法的圖形符號
偽語言 包括程序設計語言的三大基本結構及自然語言的一種語言
類語言 類似高級語言的語言,例如,類PASCAL、類C語言。
演算法的評價 演算法評價的標准:時間復雜度和空間復雜度。
1)時間復雜度 指在計算機上運行該演算法所花費的時間。用「O(數量級)」來表示,稱為「階」。
常見的時間復雜度有: O(1)常數階;O(logn)對數階;O(n)線性階;O(n^2)平方階
2)空間復雜度 指演算法在計算機上運行所佔用的存儲空間。度量同時間復雜度。
時間復雜度舉例
(a) X:=X+1 ; O(1)
(b) FOR I:=1 TO n DO
X:= X+1; O(n)
(c) FOR I:= 1 TO n DO
FOR J:= 1 TO n DO
X:= X+1; O(n^2)
「演算法」一詞最早來自公元 9世紀 波斯數學家比阿勒·霍瓦里松的一本影響深遠的著作《代數對話錄》。20世紀的 英國 數學家 圖靈 提出了著名的圖靈論點,並抽象出了一台機器,這台機器被我們稱之為 圖靈機 。圖靈的思想對演算法的發展起到了重要的作用。
演算法是 計算機 處理信息的本質,因為 計算機程序 本質上是一個演算法,告訴計算機確切的步驟來執行一個指定的任務,如計算職工的薪水或列印學生的成績單。 一般地,當演算法在處理信息時,數據會從輸入設備讀取,寫入輸出設備,可能保存起來以供以後使用。
這是演算法的一個簡單的例子。
我們有一串隨機數列。我們的目的是找到這個數列中最大的數。如果將數列中的每一個數字看成是一顆豆子的大小 可以將下面的演算法形象地稱為「撿豆子」:
首先將第一顆豆子(數列中的第一個數字)放入口袋中。
從第二顆豆子開始檢查,直到最後一顆豆子。如果正在檢查的豆子比口袋中的還大,則將它撿起放入口袋中,同時丟掉原先的豆子。 最後口袋中的豆子就是所有的豆子中最大的一顆。
下面是一個形式演算法,用近似於 編程語言 的 偽代碼 表示
給定:一個數列「list",以及數列的長度"length(list)" largest = list[1] for counter = 2 to length(list): if list[counter] > largest: largest = list[counter] print largest
符號說明:
= 用於表示賦值。即:右邊的值被賦予給左邊的變數。
List[counter] 用於表示數列中的第 counter 項。例如:如果 counter 的值是5,那麼 List[counter] 表示數列中的第5項。
<= 用於表示「小於或等於」。
二、演算法設計的方法
1.遞推法
遞推法是利用問題本身所具有的一種遞推關系求問題解的一種方法。設要求問題規模為N的解,當N=1時,解或為已知,或能非常方便地得到解。能採用遞推法構造演算法的問題有重要的遞推性質,即當得到問題規模為i-1的解後,由問題的遞推性質,能從已求得的規模為1,2,…,i-1的一系列解,構造出問題規模為I的解。這樣,程序可從i=0或i=1出發,重復地,由已知至i-1規模的解,通過遞推,獲得規模為i的解,直至得到規模為N的解。
【問題】 階乘計算
問題描述:編寫程序,對給定的n(n≤100),計算並輸出k的階乘k!(k=1,2,…,n)的全部有效數字。
由於要求的整數可能大大超出一般整數的位數,程序用一維數組存儲長整數,存儲長整數數組的每個元素只存儲長整數的一位數字。如有m位成整數N用數組a[ ]存儲:
N=a[m]×10m-1+a[m-1]×10m-2+ … +a[2]×101+a[1]×100
並用a[0]存儲長整數N的位數m,即a[0]=m。按上述約定,數組的每個元素存儲k的階乘k!的一位數字,並從低位到高位依次存於數組的第二個元素、第三個元素……。例如,5!=120,在數組中的存儲形式為:
3 0 2 1 ……
首元素3表示長整數是一個3位數,接著是低位到高位依次是0、2、1,表示成整數120。
計算階乘k!可採用對已求得的階乘(k-1)!連續累加k-1次後求得。例如,已知4!=24,計算5!,可對原來的24累加4次24後得到120。細節見以下程序。
# include <stdio.h>
# include <malloc.h>
......
2.遞歸
遞歸是設計和描述演算法的一種有力的工具,由於它在復雜演算法的描述中被經常採用,為此在進一步介紹其他演算法設計方法之前先討論它。
能採用遞歸描述的演算法通常有這樣的特徵:為求解規模為N的問題,設法將它分解成規模較小的問題,然後從這些小問題的解方便地構造出大問題的解,並且這些規模較小的問題也能採用同樣的分解和綜合方法,分解成規模更小的問題,並從這些更小問題的解構造出規模較大問題的解。特別地,當規模N=1時,能直接得解。
【問題】 編寫計算斐波那契(Fibonacci)數列的第n項函數fib(n)。
斐波那契數列為:0、1、1、2、3、……,即:
fib(0)=0;
fib(1)=1;
fib(n)=fib(n-1)+fib(n-2) (當n>1時)。
寫成遞歸函數有:
int fib(int n)
{ if (n==0) return 0;
if (n==1) return 1;
if (n>1) return fib(n-1)+fib(n-2);
}
遞歸演算法的執行過程分遞推和回歸兩個階段。在遞推階段,把較復雜的問題(規模為n)的求解推到比原問題簡單一些的問題(規模小於n)的求解。例如上例中,求解fib(n),把它推到求解fib(n-1)和fib(n-2)。也就是說,為計算fib(n),必須先計算fib(n-1)和fib(n-2),而計算fib(n-1)和fib(n-2),又必須先計算fib(n-3)和fib(n-4)。依次類推,直至計算fib(1)和fib(0),分別能立即得到結果1和0。在遞推階段,必須要有終止遞歸的情況。例如在函數fib中,當n為1和0的情況。
在回歸階段,當獲得最簡單情況的解後,逐級返回,依次得到稍復雜問題的解,例如得到fib(1)和fib(0)後,返回得到fib(2)的結果,……,在得到了fib(n-1)和fib(n-2)的結果後,返回得到fib(n)的結果。
在編寫遞歸函數時要注意,函數中的局部變數和參數知識局限於當前調用層,當遞推進入「簡單問題」層時,原來層次上的參數和局部變數便被隱蔽起來。在一系列「簡單問題」層,它們各有自己的參數和局部變數。
由於遞歸引起一系列的函數調用,並且可能會有一系列的重復計算,遞歸演算法的執行效率相對較低。當某個遞歸演算法能較方便地轉換成遞推演算法時,通常按遞推演算法編寫程序。例如上例計算斐波那契數列的第n項的函數fib(n)應採用遞推演算法,即從斐波那契數列的前兩項出發,逐次由前兩項計算出下一項,直至計算出要求的第n項。
【問題】 組合問題
問題描述:找出從自然數1、2、……、n中任取r個數的所有組合。例如n=5,r=3的所有組合為: (1)5、4、3 (2)5、4、2 (3)5、4、1
(4)5、3、2 (5)5、3、1 (6)5、2、1
(7)4、3、2 (8)4、3、1 (9)4、2、1
(10)3、2、1
分析所列的10個組合,可以採用這樣的遞歸思想來考慮求組合函數的演算法。設函數為void comb(int m,int k)為找出從自然數1、2、……、m中任取k個數的所有組合。當組合的第一個數字選定時,其後的數字是從餘下的m-1個數中取k-1數的組合。這就將求m個數中取k個數的組合問題轉化成求m-1個數中取k-1個數的組合問題。設函數引入工作數組a[ ]存放求出的組合的數字,約定函數將確定的k個數字組合的第一個數字放在a[k]中,當一個組合求出後,才將a[ ]中的一個組合輸出。第一個數可以是m、m-1、……、k,函數將確定組合的第一個數字放入數組後,有兩種可能的選擇,因還未去頂組合的其餘元素,繼續遞歸去確定;或因已確定了組合的全部元素,輸出這個組合。細節見以下程序中的函數comb。
【程序】
# include <stdio.h>
# define MAXN 100
int a[MAXN];
void comb(int m,int k)
{ int i,j;
for (i=m;i>=k;i--)
{ a[k]=i;
if (k>1)
comb(i-1,k-1);
else
{ for (j=a[0];j>0;j--)
printf(「%4d」,a[j]);
printf(「\n」);
}
}
}
void main()
{ a[0]=3;
comb(5,3);
}
3.回溯法
回溯法也稱為試探法,該方法首先暫時放棄關於問題規模大小的限制,並將問題的候選解按某種順序逐一枚舉和檢驗。當發現當前候選解不可能是解時,就選擇下一個候選解;倘若當前候選解除了還不滿足問題規模要求外,滿足所有其他要求時,繼續擴大當前候選解的規模,並繼續試探。如果當前候選解滿足包括問題規模在內的所有要求時,該候選解就是問題的一個解。在回溯法中,放棄當前候選解,尋找下一個候選解的過程稱為回溯。擴大當前候選解的規模,以繼續試探的過程稱為向前試探。
【問題】 組合問題
問題描述:找出從自然數1,2,…,n中任取r個數的所有組合。
採用回溯法找問題的解,將找到的組合以從小到大順序存於a[0],a[1],…,a[r-1]中,組合的元素滿足以下性質:
(1) a[i+1]>a,後一個數字比前一個大;
(2) a-i<=n-r+1。
按回溯法的思想,找解過程可以敘述如下:
首先放棄組合數個數為r的條件,候選組合從只有一個數字1開始。因該候選解滿足除問題規模之外的全部條件,擴大其規模,並使其滿足上述條件(1),候選組合改為1,2。繼續這一過程,得到候選組合1,2,3。該候選解滿足包括問題規模在內的全部條件,因而是一個解。在該解的基礎上,選下一個候選解,因a[2]上的3調整為4,以及以後調整為5都滿足問題的全部要求,得到解1,2,4和1,2,5。由於對5不能再作調整,就要從a[2]回溯到a[1],這時,a[1]=2,可以調整為3,並向前試探,得到解1,3,4。重復上述向前試探和向後回溯,直至要從a[0]再回溯時,說明已經找完問題的全部解。按上述思想寫成程序如下:
【程序】
# define MAXN 100
int a[MAXN];
void comb(int m,int r)
{ int i,j;
i=0;
a=1;
do {
if (a-i<=m-r+1
{ if (i==r-1)
{ for (j=0;j<r;j++)
printf(「%4d」,a[j]);
printf(「\n」);
}
a++;
continue;
}
else
{ if (i==0)
return;
a[--i]++;
}
} while (1)
}
main()
{ comb(5,3);
}
4.貪婪法
貪婪法是一種不追求最優解,只希望得到較為滿意解的方法。貪婪法一般可以快速得到滿意的解,因為它省去了為找最優解要窮盡所有可能而必須耗費的大量時間。貪婪法常以當前情況為基礎作最優選擇,而不考慮各種可能的整體情況,所以貪婪法不要回溯。
例如平時購物找錢時,為使找回的零錢的硬幣數最少,不考慮找零錢的所有各種發表方案,而是從最大面值的幣種開始,按遞減的順序考慮各幣種,先盡量用大面值的幣種,當不足大面值幣種的金額時才去考慮下一種較小面值的幣種。這就是在使用貪婪法。這種方法在這里總是最優,是因為銀行對其發行的硬幣種類和硬幣面值的巧妙安排。如只有面值分別為1、5和11單位的硬幣,而希望找回總額為15單位的硬幣。按貪婪演算法,應找1個11單位面值的硬幣和4個1單位面值的硬幣,共找回5個硬幣。但最優的解應是3個5單位面值的硬幣。
【問題】 裝箱問題
問題描述:裝箱問題可簡述如下:設有編號為0、1、…、n-1的n種物品,體積分別為v0、v1、…、vn-1。將這n種物品裝到容量都為V的若干箱子里。約定這n種物品的體積均不超過V,即對於0≤i<n,有0<vi≤V。不同的裝箱方案所需要的箱子數目可能不同。裝箱問題要求使裝盡這n種物品的箱子數要少。
若考察將n種物品的集合分劃成n個或小於n個物品的所有子集,最優解就可以找到。但所有可能劃分的總數太大。對適當大的n,找出所有可能的劃分要花費的時間是無法承受的。為此,對裝箱問題採用非常簡單的近似演算法,即貪婪法。該演算法依次將物品放到它第一個能放進去的箱子中,該演算法雖不能保證找到最優解,但還是能找到非常好的解。不失一般性,設n件物品的體積是按從大到小排好序的,即有v0≥v1≥…≥vn-1。如不滿足上述要求,只要先對這n件物品按它們的體積從大到小排序,然後按排序結果對物品重新編號即可。裝箱演算法簡單描述如下:
{ 輸入箱子的容積;
輸入物品種數n;
按體積從大到小順序,輸入各物品的體積;
預置已用箱子鏈為空;
預置已用箱子計數器box_count為0;
for (i=0;i<n;i++)
{ 從已用的第一隻箱子開始順序尋找能放入物品i 的箱子j;
if (已用箱子都不能再放物品i)
{ 另用一個箱子,並將物品i放入該箱子;
box_count++;
}
else
將物品i放入箱子j;
}
}
上述演算法能求出需要的箱子數box_count,並能求出各箱子所裝物品。下面的例子說明該演算法不一定能找到最優解,設有6種物品,它們的體積分別為:60、45、35、20、20和20單位體積,箱子的容積為100個單位體積。按上述演算法計算,需三隻箱子,各箱子所裝物品分別為:第一隻箱子裝物品1、3;第二隻箱子裝物品2、4、5;第三隻箱子裝物品6。而最優解為兩只箱子,分別裝物品1、4、5和2、3、6。
若每隻箱子所裝物品用鏈表來表示,鏈表首結點指針存於一個結構中,結構記錄尚剩餘的空間量和該箱子所裝物品鏈表的首指針。另將全部箱子的信息也構成鏈表。以下是按以上演算法編寫的程序。
}
5.分治法
任何一個可以用計算機求解的問題所需的計算時間都與其規模N有關。問題的規模越小,越容易直接求解,解題所需的計算時間也越少。例如,對於n個元素的排序問題,當n=1時,不需任何計算;n=2時,只要作一次比較即可排好序;n=3時只要作3次比較即可,…。而當n較大時,問題就不那麼容易處理了。要想直接解決一個規模較大的問題,有時是相當困難的。
分治法的設計思想是,將一個難以直接解決的大問題,分割成一些規模較小的相同問題,以便各個擊破,分而治之。
如果原問題可分割成k個子問題(1<k≤n),且這些子問題都可解,並可利用這些子問題的解求出原問題的解,那麼這種分治法就是可行的。由分治法產生的子問題往往是原問題的較小模式,這就為使用遞歸技術提供了方便。在這種情況下,反復應用分治手段,可以使子問題與原問題類型一致而其規模卻不斷縮小,最終使子問題縮小到很容易直接求出其解。這自然導致遞歸過程的產生。分治與遞歸像一對孿生兄弟,經常同時應用在演算法設計之中,並由此產生許多高效演算法。
分治法所能解決的問題一般具有以下幾個特徵:
(1)該問題的規模縮小到一定的程度就可以容易地解決;
(2)該問題可以分解為若干個規模較小的相同問題,即該問題具有最優子結構性質;
(3)利用該問題分解出的子問題的解可以合並為該問題的解;
(4)該問題所分解出的各個子問題是相互獨立的,即子問題之間不包含公共的子子問題。
上述的第一條特徵是絕大多數問題都可以滿足的,因為問題的計算復雜性一般是隨著問題規模的增加而增加;第二條特徵是應用分治法的前提,它也是大多數問題可以滿足的,此特徵反映了遞歸思想的應用;第三條特徵是關鍵,能否利用分治法完全取決於問題是否具有第三條特徵,如果具備了第一條和第二條特徵,而不具備第三條特徵,則可以考慮貪心法或動態規劃法。第四條特徵涉及到分治法的效率,如果各子問題是不獨立的,則分治法要做許多不必要的工作,重復地解公共的子問題,此時雖然可用分治法,但一般用動態規劃法較好。
分治法在每一層遞歸上都有三個步驟:
(1)分解:將原問題分解為若干個規模較小,相互獨立,與原問題形式相同的子問題;
(2)解決:若子問題規模較小而容易被解決則直接解,否則遞歸地解各個子問題;
(3)合並:將各個子問題的解合並為原問題的解。
6.動態規劃法
經常會遇到復雜問題不能簡單地分解成幾個子問題,而會分解出一系列的子問題。簡單地採用把大問題分解成子問題,並綜合子問題的解導出大問題的解的方法,問題求解耗時會按問題規模呈冪級數增加。
為了節約重復求相同子問題的時間,引入一個數組,不管它們是否對最終解有用,把所有子問題的解存於該數組中,這就是動態規劃法所採用的基本方法。以下先用實例說明動態規劃方法的使用。
【問題】 求兩字元序列的最長公共字元子序列
問題描述:字元序列的子序列是指從給定字元序列中隨意地(不一定連續)去掉若干個字元(可能一個也不去掉)後所形成的字元序列。令給定的字元序列X=「x0,x1,…,xm-1」,序列Y=「y0,y1,…,yk-1」是X的子序列,存在X的一個嚴格遞增下標序列<i0,i1,…,ik-1>,使得對所有的j=0,1,…,k-1,有xij=yj。例如,X=「ABCBDAB」,Y=「BCDB」是X的一個子序列。
考慮最長公共子序列問題如何分解成子問題,設A=「a0,a1,…,am-1」,B=「b0,b1,…,bm-1」,並Z=「z0,z1,…,zk-1」為它們的最長公共子序列。不難證明有以下性質:

⑺ med 和rms是什麼數學演算法

RMS就是均方根值: RMS---root meam square,最原始的是針對正弦波推導出來的,但實際上對所有的波形都適用。電路上的計算基本過程是先平方再平均(積分)最後開方,其中開始時還有絕對值整流的過程。RMS是從有效值的定義里推導出來的計算方法,因此,兩者等效。電路實現時,是這種計算方法的迫近。 均方根值也稱作為效值,它的計算方法是先平方、再平均、然後開方。比如幅度為100V而占空比為0.5的方波信號,如果按平均值計算,它的電壓只有50V,而按均方根值計算則有70.71V。這是為什麼呢?舉一個例子,有一組100伏的電池組,每次供電10分鍾之後停10分鍾,也就是說占空比為一半。如果這組電池帶動的是10Ω電阻,供電的10分鍾產生10A的電流和1000W的功率,停電時電流和功率為零。 那麼在20分鍾的一個周期內其平均功率為500W,這相當於70.71V的直流電向10Ω電阻供電所產生的功率。而50V直流電壓向10Ω電阻供電只能產生的250W的功率。對於電機與變壓器而言,只要均方根電流不超過額定電流,即使在一定時間內過載,也不會燒壞。 它是揚聲器的功率處理能力(或稱揚聲器的額定功率)是一項重要技術參數,它代表揚聲器承受長期連續安全工作的功率輸入能力。 聲音信號不是一種正弦波信號,而是一種隨機的,這些隨機信號可用三個能數來表示,有效值(RMS)又稱均方根值,是以信號峰值等幅的正弦信號的一種測量結果,接近於平均值,基本上代表信號的發熱能量。峰值(Peak)是信號達到的最大電平,對於正弦波來說,峰值電平大於有效值電平3dB,對於音樂信號來說,峰值電平超過有效值可達10-15dB在評定一種揚聲器的位移能力時,峰值是重要的,峰值因子,用來說明峰值電平與有效值電平的比率,對於按AES2-1984的粉紅色雜訊源來說,峰值因子為6dB,即峰值電壓是有效值電壓的4倍。

RMS值實際就是有效值,就是一組統計數據的平方的平均值的平方根。
RMS=(X1平方+X2平方++Xn平方)/n 的1/2次方。
在直流(DC)電路中,電壓或電流的定義很簡單,但在交流(AC)電路中,其定義就較為復雜,有多種定義方式。均方根(rms)指的是定義AC波的有效電壓或電流的一種最普遍的數學方法。
要得出rms值需要對表示AC波形的函數執行三個數學操作:
(1)計算波形函數(一般是正弦波)的平方值。
(2)對第一步得到的函數求時間平均值。
(3)求第二步得到的函數的平方根。
在一個阻抗由純電阻組成的電路中,AC波的rms值通常稱作有效值或DC等價值。比如,一個100V rms的AC源連接著一個電阻器,並且其電流產生50W熱量,那麼對於100V連接著這個電阻器的電源來說也將產生50W的熱量。
對正弦波來說,rms值是峰值的0.707倍,或者是峰-峰值的0.354倍。家用電壓是以rms來表示的。所謂的「117V」的交流電,其峰值(pk)約為165V,峰-峰值(pk-pk)約為330V。

熱點內容
安卓快手極速版在哪裡填寫邀請碼 發布:2025-01-31 22:59:36 瀏覽:319
如何讓給文件夾設置密碼查看 發布:2025-01-31 22:49:07 瀏覽:2
配置動態路由協議配錯了怎麼改 發布:2025-01-31 22:49:07 瀏覽:77
掃行程碼為什麼需要支付密碼 發布:2025-01-31 22:47:08 瀏覽:738
什麼樣的配置能玩地平線4 發布:2025-01-31 22:44:05 瀏覽:241
python正則表達式符號 發布:2025-01-31 22:43:50 瀏覽:391
androidmime 發布:2025-01-31 22:34:44 瀏覽:782
ftp和http的中文含義是 發布:2025-01-31 22:33:48 瀏覽:402
sqlite3存儲圖片 發布:2025-01-31 22:27:14 瀏覽:162
sqlserverphp 發布:2025-01-31 22:22:55 瀏覽:877