導航:首頁 > 源碼編譯 > pc數字演算法

pc數字演算法

發布時間:2022-08-03 02:20:21

① 秒差距(PC)是什麼單位 1PC=

秒差距(英文Parsec, 縮寫pc)是天文學上的一種長度單位。
1PC(秒差距)=30835997962819660.8米。

秒差距(parsec)是一種最古老的,同時也是最標準的測量恆星距離的方法。它是建立在三角視差的基礎上的。以地球公轉軌道的平均半徑(一個天文單位,AU)為底邊所對應的三角形內角稱為視差。當這個角的大小為1角秒時,這個三角形(由於1秒的角的所對應的兩條邊的長度差異完全可以忽略,因此,這個三角形可以想像成直角三角形,也可以想像成等腰三角形)的一條邊的長度(地球到這個恆星的距離)就稱為1秒差距。

秒差距是周年視差的倒數,當天體的周年視差為 0.1" 時,它的距離為10秒差距,當天體的周年視差為0.01"時,它的距離便為100秒差距,依次類推。周年視差π = 1''的恆星與地球的距離r為206265AU,這個距離定義為1秒差距(1pc)。由此可知,1pc = AU = 206,265 AU = 3.08568×10 m = 3.2616 光年。天文學家通常使用秒差距而不是天文單位來描述天體的距離。

天體的視差越大,則其距離就越近。反之,則視差越小,離我們越遠。離我們最近的恆星(太陽除外)比鄰星的秒差距約為1.29pc(4.22光年)。

② 嚴書數據結構P31演算法2.12MergeList-L中 pc->next=papa:pb怎麼理解

while(pa&&pb){...} 表明兩個鏈表都非空,此時根據data的大小來選擇。
循環結束後有一個鏈表已經空了,pc->next=pa?pa:pb;這句話是把剩下非空的那個接到pc後面。

③ 電腦隨機數是如何生成的

電腦產生的隨機數稱為偽隨機數,是通過演算法模擬的,看上去和隨機數一樣,實際上能算出來的數就是可以預見的數(對你來說不可預見,對電腦則是可預見),不是真正的隨機數。

④ 誰能告訴我如何用計算機編程的語言比如1和0表示出1到10的數字

本文字數:4894 字
閱讀本文大概需要:13 分鍾

寫在之前

我們都知道,對於同一個問題來說,可以有多種解決問題的演算法。盡管演算法不是唯一的,但是對於問題本身來說相對好的演算法還是存在的,這里可能有人會問區分好壞的標準是什麼?這個要從「時效」和「存儲」兩方面來看。

人總是貪婪的,在做一件事的時候,我們總是期望著可以付出最少的時間、精力或者金錢來獲得最大的回報,這個類比到演算法上也同樣適用,那就是花最少的時間和最少的存儲做成最棒的解決辦法,所以好的演算法應該具備時效高和存儲低的特點。這里的「時效」是指時間效率,也就是演算法的執行時間,對於同一個問題的多種不同解決演算法,執行時間越短的演算法效率越高,越長的效率越低;「存儲」是指演算法在執行的時候需要的存儲空間,主要是指演算法程序運行的時候所佔用的內存空間。

時間復雜度

首先我們先來說時間效率的這個問題,這里的時間效率就是指的演算法的執行時間,時間的快慢本來就是一個相對的概念,那麼到了演算法上,我們該用怎樣的度量指標去度量一個演算法的時間效率(執行時間)呢?

剛開始我們想出了一種事後統計方法,我稱它為「馬後炮式」,顧名思義,就是對於要解決的某個問題,費盡心思想了 n 種解法,提前寫好演算法程序,然後攢了一堆數據,讓它們分別在電腦上跑,跑完瞭然後比較程序的運行時間,根據這個來判斷演算法時效的高低。這種的判斷技術計算的是我們日常所用的時間,但這並不是一個對我們來說有用的度量指標,因為它還依賴於運行的機器、所用的編程語言、編譯器等等等等。相反,我們需要的是一個不依賴於所用機器或者編程語言的度量指標,這種度量指標可以幫助我們判斷演算法的優劣,並且可以用來比較演算法的具體實現。

我們的科學家前輩們發現當我們試圖去用執行時間作為獨立於具體程序或計算機的度量指標去描述一個演算法的時候,確定這個演算法所需要的步驟數目非常重要。如果我們把演算法程序中的每一步看作是一個基本的計量單位,那麼一個演算法的執行時間就可以看作是解決一個問題所需要的總步驟數。但是由於演算法的執行過程又各不相同,所以這個每一步,即這個基本的計量單位怎麼去選擇又是一個令人頭禿的問題。

下面我們來看一個簡單的求和的函數:

defget_sum(n): sum = 0for i in range(1,n+1): sum += i return sumprint(get_sum(10))

我們仔細去分析一下上述代碼,其實可以發現統計執行求和的賦值語句的次數可能是一個好的基本計數單位,在上面 get_sum 函數中,賦值語句的數量是 1 (sum = 0)加上 n (執行 sum += i 的次數)。

我們一般用一個叫 T 的函數來表示賦值語句的總數量,比如上面的例子可以表示成 T(n) = n + 1。這里的 n 一般指的是「數據的規模大小」,所以前面的等式可以理解為「解決一個規模大小為 n,對應 n+1 步操作步數的問題,所需的時間為 T(n)」。

對於 n 來說,它可以取 10,100,1000 或者其它更大的數,我們都知道求解大規模的問題所需的時間比求解小規模要多一些,那麼我們接下來的目標就很明確了,那就是「尋找程序的運行時間是如何隨著問題規模的變化而變化」。

我們的科學家前輩們又對這種分析方法進行了更為深遠的思考,他們發現有限的操作次數對於 T(n) 的影響,並不如某些占據主要地位的操作部分重要,換句話說就是「當數據的規模越來越大時,T(n) 函數中的某一部分掩蓋了其它部分對函數的影響」。最終,這個起主導作用的部分用來對函數進行比較,所以接下來就是我們所熟知的大 O閃亮登場的時間了。

大 O 表示法

「數量級」函數用來描述當規模 n 增加時,T(n) 函數中增長最快的部分,這個數量級函數我們一般用「大 O」表示,記做 O(f(n))。它提供了計算過程中實際步數的近似值,函數 f(n) 是原始函數 T(n) 中主導部分的簡化表示。

在上面的求和函數的那個例子中,T(n) = n + 1,當 n 增大時,常數 1 對於最後的結果來說越來不越沒存在感,如果我們需要 T(n) 的近似值的話,我們要做的就是把 1 給忽略掉,直接認為 T(n) 的運行時間就是 O(n)。這里你一定要搞明白,這里不是說 1 對 T(n) 不重要,而是當 n 增到很大時,丟掉 1 所得到的近似值同樣很精確。

再舉個例子,比如有一個演算法的 T(n) = 2n^2+ 2n + 1000,當 n 為 10 或者 20 的時候,常數 1000 看起來對 T(n) 起著決定性的作用。但是當 n 為 1000 或者 10000 或者更大呢?n^2 起到了主要的作用。實際上,當 n 非常大時,後面兩項對於最終的結果來說已經是無足輕重了。與上面求和函數的例子很相似,當 n 越來越大的時候,我們就可以忽略其它項,只關注用 2n^2 來代表 T(n) 的近似值。同樣的是,系數 2 的作用也會隨著 n 的增大,作用變得越來越小,從而也可以忽略。我們這時候就會說 T(n) 的數量級 f(n) = n^2,即 O(n^2)。

最好情況、最壞情況和平均情況

盡管前面的兩個例子中沒有體現,但是我們還是應該注意到有時候演算法的運行時間還取決於「具體數據」而不僅僅是「問題的規模大小」。對於這樣的演算法,我們把它們的執行情況分為「最優情況」、「最壞情況」和「平均情況」。

某個特定的數據集能讓演算法的執行情況極好,這就是最「最好情況」,而另一個不同的數據會讓演算法的執行情況變得極差,這就是「最壞情況」。不過在大多數情況下,演算法的執行情況都介於這兩種極端情況之間,也就是「平均情況」。因此一定要理解好不同情況之間的差別,不要被極端情況給帶了節奏。

對於「最優情況」,沒有什麼大的價值,因為它沒有提供什麼有用信息,反應的只是最樂觀最理想的情況,沒有參考價值。「平均情況」是對演算法的一個全面評價,因為它完整全面的反映了這個演算法的性質,但從另一方面來說,這種衡量並沒有什麼保證,並不是每個運算都能在這種情況內完成。而對於「最壞情況」,它提供了一種保證,這個保證運行時間將不會再壞了,**所以一般我們所算的時間復雜度是最壞情況下的時間復雜度**,這和我們平時做事要考慮到最壞的情況是一個道理。

在我們之後的演算法學習過程中,會遇到各種各樣的數量級函數,下面我給大家列舉幾種常見的數量級函數:

為了確定這些函數哪些在 T(n) 中佔主導地位,就要在 n 增大時對它們進行比較,請看下圖(圖片來自於 Google 圖片):

在上圖中,我們可以看到當 n 很小時,函數之間不易區分,很難說誰處於主導地位,但是當 n 增大時,我們就能看到很明顯的區別,誰是老大一目瞭然:

O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n)

我們下面就來分析幾個上述所說的「數量級函數」:

1.常數函數

n = 100 # 1 次sum = (1 + n) *n / 2 # 1 次print(sum) # 1 次

上述演算法程序的 f(n) = 3,可能有人看到這會說那麼時間復雜度就是 O(f(n)) = O(3),其實這個是錯的,這個函數的時間復雜度其實是 O(1)。這個對於初學者來說是很難理解的一種結果,其實你可以把 sum = (1 + n) * n / 2 多復制幾次再來看:

a = 100 # 1 次sum = (1 + n) * n / 2 # 1 次sum = (1 + n) * n / 2 # 1 次sum = (1 + n) * n / 2 # 1 次sum = (1 + n) * n / 2 # 1 次sum = (1 + n) * n / 2 # 1 次sum = (1 + n) * n / 2 # 1 次print(sum) # 1 次

上述演算法的 f(n) = 8,事實上你可以發現無論 n 為多少,上述兩段代碼就是 運行 3 次和運行 8 次的區別。這種與數據的規模大小 n 無關,執行時間恆定的演算法我們就叫它具有 O(1) 的時間復雜度。不管這個常數是多少,我們都記作是 O(1),而不是 O(3) 或者是 O(8)。

2.對數函數

cnt = 1while cnt < n: cnt *= 2 # O(1)

上面的演算法程序的時間復雜度就是 O(logn),這個是怎麼算出來的呢?其實很簡單:上述的代碼可以解釋成 cnt 乘以多少個 2 以後才能大於等於 n,我們假設個數是 x,也就是求 2^x = n,即 x = log2n,所以這個循環的時間復雜度就是 O(logn)。

最後呢,我們來看看下面的這個例子,藉助這段代碼來詳細的說一下我們如何對其時間復雜度進行詳細的分析:

a = 1b = 2c = 3for i inrange(n):for j inrange(n): x = i * i y = j * j z = i * jfor k inrange(n): u = a * k + b v = c * cd = 4

上面的代碼沒有任何意義,甚至不是一個可運行的代碼,我只是用來說明你在以後如何對代碼進行執行分析,關於代碼本身可不可以運行,就不需要你在這關心了。

上面的代碼其實我們要分的話可以分成 4 部分:第 1 部分是 a,b,c 這 3 個賦值語句,執行次數也就是 3 次;第二部分是 3n^2,因為是循環結構,裡面有 x,y,z 這 3 個賦值語句,每個語句執行了 n^2 次;第 3 部分是 2n,因為裡面是 2 個賦值語句,每條語句被執行了 n 次;最後第 4 部分是常數 1,只有 d 這么 1 條賦值語句。所以我們得到的 T(n
) = 3+3n^2 +2n+1 = 3n^2+2n+4,看到指數項,我們自然的發現是 n^2 做主導,當 n 增大時,後面兩項可以忽略掉,所以這個代碼片段的數量級就是 O(n^2)。

空間復雜度

類比於時間復雜度的討論,一個演算法的空間復雜度是指該演算法所耗費的存儲空間,計算公式計作:S(n) = O(f(n))。其中 n 也為數據的規模,f(n) 在這里指的是 n 所佔存儲空間的函數。

一般情況下,我們的程序在機器上運行時,刨去需要存儲程序本身的輸入數據等之外,還需要存儲對數據操作的「存儲單元」。如果輸入數據所佔空間和演算法無關,只取決於問題本身,那麼只需要分析演算法在實現過程中所佔的「輔助單元」即可。如果所需的輔助單元是個常數,那麼空間復雜度就是 O(1)。

空間復雜度其實在這里更多的是說一下這個概念,因為當今硬體的存儲量級比較大,一般不會為了稍微減少一點兒空間復雜度而大動干戈,更多的是去想怎麼優化演算法的時間復雜度。所以我們在日常寫代碼的時候就衍生出了用「空間換時間」的做法,並且成為常態。比如我們在求解斐波那契數列數列的時候我們可以直接用公式去遞歸求,用哪個求哪個,同樣也可以先把很多結果都算出來保存起來,然後用到哪個直接調用,這就是典型的用空間換時間的做法,但是你說這兩種具體哪個好,偉大的馬克思告訴我們「具體問題具體分析」。

寫在之後

如果上面的文章你仔細看了的話,你會發現我不是直接上來就告訴你怎麼去求時間復雜度,而是從問題的產生,到思考解決的辦法,到「馬後炮」,再到 T(n),最後到 O(n)一步一步來的。這樣做的原因呢有兩個:一是為了讓你了解大 O 到底是怎麼來的,有時候搞明白了由來,對於你接下來的學習和理解有很大的幫助;二是為了讓這個文章看起來不是那麼枯燥,我覺得很多時候上來扔給你一堆概念術語,很容易就讓人在剛看到它的時候就打起了退堂鼓,循序漸進的來,慢慢引導著更容易接受一些。

很多人從大學到工作,代碼寫了不少依然不會估算時間復雜度,我感覺倒不是學不會,而是內心沒有重視起來。你可能覺得計算機的更新換代很快,CPU 處理速度的能力越來越棒,沒必要在一些小的方面斤斤計較,其實我覺得你是 too young too naive。我們隨便來算一個簡單的例子:有兩台電腦,你的電腦的運算速度是我的電腦的 100 倍,同樣一道問題,明明稍微想一想用 O(n) 可以做出來,你偏偏要懶,直接暴力 O(n^2),那麼當 n 的數據稍微增大一些,比如上萬上十萬,到底誰的運算速度快還用我再告訴你嗎?

所以今後在寫演算法的時候,請好好學會用時間復雜度估算一下自己的代碼,然後想想有沒有更有效率的方法去改進它,你只要這樣做了,相信慢慢的你的代碼會寫的越來越好,頭會越來越禿。(逃

最後說一點的是,估算演算法的復雜度這件事你不要指望一下子看了一篇文章就想弄懂,這個還是要有意識的多練,比如看到一個程序的時候有意識的估算一下它的復雜度,准備動手寫代碼的時候也想想有沒有更好的優化方法,有意識的練習慢慢就會來了感覺。這篇文章我就用了幾個小例子,大概的估算方式就是這樣。之後我還會繼續寫一些關於「數據結構與演算法」相關的文章和一些具體的實戰題目,都會帶大家繼續分析它們的時間復雜度,敬請期待。

⑤ MSP430中PC的相關問題

PC就是存放當前程序運行到的代碼所在地址的寄存器,所以里邊是地址。
棧,你可以理解成以前醫院里插掛號條那個簽子,如果後邊插上去的單子,就得先拿下來,之前插上去的,反而要後拿;或者認為是個桶,放里放和桶一樣大的餅,要把底下的餅拿出來,就得等上邊的餅拿走,新放上去的餅能新拿出來。所以叫「後進先出」
中斷向量就是中斷源觸發後CPU要跳轉到的特定地址,中斷,就是打斷之前正在執行的東西,比如你正在吃飯,電話響了,你要做的就是先放下碗筷(相當於壓棧,保護吃飯現場),然後接電話(跳轉到中斷服務),接完以後,掛機,拿碗筷(RET,恢復吃飯現場),然後繼續吃。

⑥ 加拿大pc演算法教程

1.三級流水線:其實對於PC = PC +8這個問題很簡單,這兩個PC其實代表著不同的意義,第一個PC是對於CPU而言,而第二個PC而言是我們通過編譯器看到的PC(PC指向程序正在運行的那一條指令),但是對於CPU的PC是永遠指向取指那個步,故PC = PC +8。

2.五級流水線; ARM9流水線包括取指(fetch)、解碼(decode)、執行(excute)、緩沖/數據(buffer/data)、回寫(write-back)寄存器堆。ARM9流水線在解碼階段已經開始讀取操作數寄存器,因此解碼階段的PC值和取指階段的PC值關系為:PC(decode)=PC(fetch)+4。因此執行階段的PC值和解碼階段的PC值關系為:PC(excute)=PC(decode)+4。

3.對於軟中斷函數的返回時的PC:如下

ARM Thumb

SWI PC-8 PC-4

xxx 》 PC -4 PC-2 (異常返回將執行這條指令)

yyy PC PC

因此返回指令為: MOV PC , LR

原因:異常是由指令本身引起的,因此內核在計算LR時的PC值並沒有被更新。對於ARM狀態,因為SWI指令表示將跳到異常處理函數,此時SWI這條指令的PC = PC -8,當進入異常處理函數之前,硬體會自動把PC-4保存到LR寄存器中,所以異常處理函數結束後直接MOV PC, LR就行,就會跳到xxx這一條指令去執行。對於Thumb狀態同理。

4.對於IRQ和FIQ中斷函數返回時的PC:

ARM Thumb

xxx PC-12 PC-6 (程序在運行這條代碼時就產生了中斷信號)

yyy 》 PC-8 PC-4 (異常返回將執行這條指令)

zzz PC-4 PC-2

www PC PC

返回指令為: SUBS PC, LR, #4

原因:異常在當前指令執行完成後才會被響應,因此內核在計算LR時的PC值已被更新。對於ARM狀態,程序在執行xxx這條指令時,中斷信號產生,但是由於中斷必須在這一條指令執行完之後才會被響應,執行完後,則此時對於CPU的PC已經指向了www這條指令的取指,在中斷函數函數時應該執行yyy這條指令,雖然硬體會把PC-4的值賦值給LR寄存器,但是這是指向zzz這條指令的,所以返回時應該SUBS PC, LR, #4。對於Thumb狀態同理。

⑦ PLC和PC的優缺點

一、PLC的優缺點

優點:功能強,硬體配套齊全,用戶使用方便,適應性強;可靠性高,抗干擾能力強;編程方法簡單,維修工作量少,維修方便;體積小,能耗低。

缺點:不能用於主電路的斷路器,只能進行邏輯控制。

二、PC機的優缺點

優點:能實現原來PLC的控制功能,並且具有更強的數據處理能力、強大的網路通訊功能以及能夠執行比較復雜的控制演算法和其近乎無限制的存儲容量等優勢。

缺點:基於PC的自動化控制也有其不足之處,其設備的可靠性、實時性和穩定性都較差。



PLC工作過程的特點

1、PLC採用集中采樣、集中輸出的工作方式,這種方式減少了外界干擾的影響。

2、PLC的工作過程是循環掃描的過程,循環掃描時間的長短取決於指令執行速度、用戶程序的長度等因素。

3、輸出對輸入的影響有滯後現象。PLC採用集中采樣、集中輸出的工作方式,當采樣階段結束後,輸入狀態的變化將要等到下一個采樣周期才能被接收,因此這個滯後時間的長短又主要取決於循環周期的長短。此外,影響滯後時間的因素還有輸入濾波時間、輸出電路的滯後時間等。

4、輸出映像寄存器的內容取決於用戶程序掃描執行的結果。

5、輸出鎖存器的內容由上一次輸出刷新期間輸出映像寄存器中的數據決定。

6、PLC當前實際的輸出狀態由輸出鎖存器的內容決定。

⑧ powerpc 與dsp 及普通pc什麼區別

PowerPC就是 由IBM www.IBM.com 、Motorola www.Motorola.com 和Apple www.Apple.com 聯合開發的高性能32位和64位RISC微處理器系列,以與壟斷PC機市場的Intel微處理器和微軟公司的軟體相競爭。PowerPC微處理器1994年推出。因此,基於PowerPC的計算機通過在PowerPC上運行一個特殊程序就可運行DOS或傳統的Macintosh軟體,這種特殊程序可分別識別和執行80386或68030CPU的機器指令。

IBM以前跟Intel競爭過桌面處理器市場,但由於市場策略不當等原因,IBM沒賺到什麼錢,於是決定退出桌面市場。POWER系列處理器是它退出桌面市場後才開發出來的伺服器用處理器,蘋果電腦用的處理器只是Power系列裡的一種,據說是IBM為蘋果特製的簡化版本,而蘋果獨一無二的經營理念使蘋果電腦與其它PC都不兼容,所以目前的Power系列處理器不能用於桌面PC。目前蘋果電腦因PowerPC處理器不適合蘋果發展而轉而使用Intel處理器。

DSP: DSP數字信號處理(Digital Signal Processing,簡稱DSP)是一門涉及許多學科而又廣泛應用於許多領域的新興學科。20世紀60年代以來,隨著計算機和信息技術的飛速發展,數字信號處理技術應運而生並得到迅速的發展。數字信號處理是一種通過使用數學技巧執行轉換或提取信息,來處理現實信號的方法,這些信號由數字序列表示。在過去的二十多年時間里,數字信號處理已經在通信等領域得到極為廣泛的應用。德州儀器、Freescale等半導體廠商在這一領域擁有很強的實力。

DSP(digital singnal processor)是一種獨特的微處理器,是以數字信號來處理大量信息的器件。其工作原理是接收模擬信號,轉換為0或1的數字信號,再對數字信號進行修改、刪除、強化,並在其他系統晶元中把數字數據解譯回模擬數據或實際環境格式。它不僅具有可編程性,而且其實時運行速度可達每秒數以千萬條復雜指令程序,遠遠超過通用微處理器,是數字化電子世界中日益重要的電腦晶元。它的強大數據處理能力和高運行速度,是最值得稱道的兩大特色。

DSP晶元,也稱數字信號處理器,是一種特別適合於進行數字信號處理運算的微處理器器,其主要應用是實時快速地實現各種數字信號處理演算法。根據數字信號處理的要求,DSP晶元一般具有如下主要特點:

(1)在一個指令周期內可完成一次乘法和一次加法;
(2)程序和數據空間分開,可以同時訪問指令和數據;
(3)片內具有快速RAM,通常可通過獨立的數據匯流排在兩塊中同時訪問;
(4)具有低開銷或無開銷循環及跳轉的硬體支持;
(5)快速的中斷處理和硬體I/O支持;
(6)具有在單周期內操作的多個硬體地址產生器;
(7)可以並行執行多個操作;
(8)支持流水線操作,使取指、解碼和執行等操作可以重疊執行。
當然,與通用微處理器相比,DSP晶元的其他通用功能相對較弱些。

⑨ 一般的PC視頻採集卡採用幀內壓縮的演算法把數字化的視頻存儲成___文件

頂一下吧,不知道你想幹啥,是做填空題啊!

閱讀全文

與pc數字演算法相關的資料

熱點內容
用什麼工具製作安卓應用 瀏覽:484
單片機數碼管的代碼 瀏覽:775
第一款安卓手機是什麼牌子 瀏覽:394
java非同步web 瀏覽:270
51單片機讀tf卡 瀏覽:936
linux下獲取文件 瀏覽:318
加密文件電腦顯示無屏幕截取許可權 瀏覽:352
虛榮安卓用什麼充值 瀏覽:752
阿里雲沒有伺服器如何備案 瀏覽:706
python用戶特性總結 瀏覽:730
華為門鑰匙加密卡怎麼辦 瀏覽:921
南京解壓車要帶什麼 瀏覽:567
天堂2編譯視頻教程 瀏覽:397
伺服器沒有進程怎麼辦 瀏覽:789
阿里雲發布新物種神龍雲伺服器 瀏覽:64
數據結構遞歸演算法統計二叉樹節點 瀏覽:672
ev3怎麼編程 瀏覽:706
gzip壓縮教程 瀏覽:353
解壓模擬例子 瀏覽:989
流媒體伺服器如何實現視頻轉發 瀏覽:62