1. 程式人生 > 實用技巧 >『初賽常考考點複習』

『初賽常考考點複習』

時間複雜度

漸進符號

\(\Theta(f(n))\)表示函式\(f(n)\)的漸進上下界,\(O(f(n))\)表示函式\(f(n)\)的漸進上界,\(\Omega(f(n))\)表示函式\(f(n)\)的漸進下界。

其含義是,存在確定的常數\(n_0,c_1,c_2\),當\(n\geq n_0\)時,都滿足:

\[c_1f(n)\leq \Theta(f(n))\leq c_2f(n),\ O(f(n))\leq c_2f(n),\ c_1f(n)\leq \Omega(f(n)) \]

勢能分析法

首先,我們可以假設總共有\(m\)次操作,每次操作的實際消耗時間\(t_i\)難以估計,那麼我們可以引入一個勢能\(\Phi_i\)

表示第\(i\)次操作完後的某個特徵值,然後用\(a_i=t_i+\Delta\Phi=t_i+\Phi_i-\Phi_{i-1}\)表示第\(i\)次操作的均攤時間,那麼有:

\[\sum_{i=1}^m t_i=\sum_{i=1}^m(a_i-\Delta \Phi)=\sum_{i=1}^m a_i+\Phi_0-\Phi_m \]

那麼就可以通過分析\(\sum_{i=1}^m a_i+\Phi_0-\Phi_m\)的大小來分析\(m\)次操作的總時間。

分治時間分析:解遞迴式

Master Theorem

對於遞迴式\(T(n)=aT\left(\dfrac{n}{b}\right)+f(n),\forall n\geq b\)

,若在\(n< b\)\(T(n)=\Theta(1)\),則:

\[T(n)= \begin{cases} \Theta\left(n^{\log_b a}\right), & f(n)=O\left(n^{\log_b a-\epsilon}\right) \\ \Theta(f(n)), & f(n)=\Omega\left(n^{\log_b a+\epsilon}\right) \\ \Theta\left(n^{\log_b a}\log^{k+1}n\right), &f(n)=\Theta\left(n^{\log_b a}\log ^k n\right),k\geq 0 \end{cases} \]

Akra-Bazzi Theorem

對於遞迴式\(T(n)=\displaystyle\sum_\limits{i=1}^{k}a_iT\left(\dfrac{n}{b_i}\right)+f(n),\forall n\geq b\),若在\(n< b\)\(T(n)=\Theta(1)\),則:

\[T(n)=\Theta\left( n^p\left( 1+\int_{1}^n \frac{f(x)}{x^{p+1}}\text d x \right) \right), \text{where} \sum_{i=1}^k\frac{a_i}{b_i^p}=1 \]

例如:

\(T(n)=3T\left(\dfrac{n}{2}\right)+4T\left( \dfrac{n}{4} \right)+n\),找到\(p=2\),那麼\(T(n)=\Theta\left( n^2\left(1+\displaystyle\int_1^n \dfrac{\text d x}{x^2}\right) \right)=\Theta(n^2)\)

\(T(n)=2T\left(\dfrac{n}{2}\right)+\log n\),找到\(p=1\),那麼\(T(n)=\Theta\left( n\left(1+ \displaystyle\int_1^n \dfrac{\log x}{x^2} \text dx \right) \right)=\Theta(n-\log n)=\Theta(n)\)

\(\displaystyle \int\frac{\ln x}{x^2}\text d x\)可以用分部積分公式:\(\displaystyle \int u\text d v=uv-\displaystyle \int v\text d u\)

\[\text{let}\ u = \ln x,\text d v=\frac{\text d x}{x^2}\Rightarrow v=\int x^{-2}\text d x=-x^{-1} \\ \begin{aligned} \\ \int\frac{\ln x}{x^2}\text dx & = -x^{-1}\ln x+\int x^{-1}\text d(\ln x) \\ & = -\frac{\ln x}{x}+\int x^{-2}\text d x = -\frac{\ln x+1}{x} \end{aligned} \]

\(T(n)=2T\left( \dfrac{n}{2} \right)+\dfrac{n}{\log n}\),找到\(p=1\),那麼\(T(n)=\Theta\left(n\left( 1+\displaystyle \int _1^n \dfrac{\text d x}{x\log x} \right)\right)=\Theta(n+n\log \log n)=\Theta(n\log \log n)\)

\(\displaystyle \int \dfrac{\text d x}{x \log x}\)可以用換元積分方法:

\[\text{let } u=\log x\Rightarrow \text d u = \frac{\text d x}{x},\text dx=x\text d u \\ \begin{aligned} \int \dfrac{\text d x}{x \log x} & = \int \frac{x\text d u}{xu}=\int \frac{\text du}{u}=\log u = \log\log x \end{aligned} \]

遞迴樹方法

\(1.\) 解遞迴式\(T(n)=\sqrt n\times T(\sqrt n)+n\)\(n\)足夠小時\(T(n)=1\)

\(\text{Solution}:\) 顯然遞迴樹的每一層的總大小為\(O(n)\),且每次遞迴數字的位數減半,數字有\(\lg n\)位,那麼遞迴樹深度就是\(\log_2 \lg n\),故\(T(n)=O(n\log_2 \lg n)\)

\(2.\) 解遞迴式\(T(n)=4\sqrt n\times T(\sqrt n)+n\)\(n\)足夠小時\(T(n)=1\)

\(\text{Solution}:\) 不妨設\(f(x)\)表示遞迴樹第\(x\)層的節點大小,\(g(x)\)表示遞迴樹第\(x\)層的節點數量,列出遞推方程:

\[\begin{cases} f(x)=\sqrt {f(x-1)}, & f(0)=n \\ g(x)=g(x-1)\times 4\sqrt{f(x-1)}, & g(0)=1 \end{cases} \]

顯然\(f(x)=n^{2^{-x}}\),那麼

\[g(x)=g(x-1)4n^{2^{-x}}=\prod_{i=1}^x4n^{2^{-i}}=4^xn^{\sum_{i=1}^x 2^{-i}}=4^xn^{1-2^{-x}} \]

\(S(x)\)表示遞迴樹第\(x\)層的時間總消耗,顯然\(S(x)=f(x)g(x)=n\times 4^x\),所以:

\[T(n)=\sum_{i=0}^{\log_2 \lg n}S(i)=n \sum_{i=0}^{\log _2 \lg n}4^i =O\left(n \left(2^{\log_2 \lg n}\right)^2 \right)=O\left( n\lg^2 n \right) \]

演算法和問題複雜性

問題:對於一個包含由\(0\)\(1\)組成的字串集合\(S\),以某個\(01\)字串\(x\)作為輸入,要求某個圖靈機判斷\(x\)在不在\(S\)裡面。這裡的圖靈機可以先想象成平時我們用的計算機,\(S\)也可以被看成我們要解決的問題。注意我們的問題非常簡單,就是要判斷某個字串\(x\)是否在某個集合\(S\)裡面,下面是定義:

  • \(\text P\)類問題:有一個圖靈機在多項式時間內能夠判斷\(x\)是否在\(S\)裡面。
  • \(\text{NP}\):有一個圖靈機\(M\),如果某個字串\(x\)\(S\)裡面,那麼存在一個驗證字串\(u\)(注意這個\(u\)是針對這個\(x\)的,而且長度必須是\(x\)長度的多項式\(|u|=|x|^c\)關係),\(M\)\(x\)\(u\)作為輸入,能夠驗證\(x\)真的是在\(S\)裡面。
  • \(\text{NP-hard}\):如果某個問題\(S\)\(\text{NP-hard}\),那麼對於任意一個\(\text{NP}\)問題,我們都可以把這個\(\text{NP}\)問題在多項式時間之內轉化為\(S\),並且原問題的答案和轉化後\(S\)的答案是相同的。也就是說只要我們解決了\(S\),那麼就解決了所有的\(\text{NP}\)問題。
  • \(\text{NP-complete}\):一個問題既是\(\text {NP-hard}\),又是\(\text{NP}\)問題。

  • 對問題複雜性的討論基於問題的性質:求解性問題,而非計數\(/\)構造等其他問題。
  • \(\text{NP}\)問題的定義為對於一個證據\(u\)可以在多項式時間內驗證,\(\text P\)\(\text{NP}\)的子集,不能說所有\(\text{NP}\)問題都不確定是否存在多項式時間的演算法,因為\(\text P\)問題也是\(\text {NP}\)問題,已經確定存在多項式時間的演算法。

全國青少年資訊學奧林匹克競賽系列活動簡介

背景

\(1984\)鄧小平指出:“計算機的普及要從娃娃做起。”中國計算機學會於\(1984\)年創辦全國青少年計算機程式設計競賽(即\(\text{NOI}\)),當年參加競賽的有\(8000\)多人。這一新的活動形式受到黨和政府的關懷,得到社會各界的關注與支援。中央領導王震同志出席了首屆競賽發獎大會,並對此項活動給予了充分肯定。

各活動及其簡介

\(\text{NOI}\)系列活動包括:全國青少年資訊學奧林匹克競賽和全國青少年資訊學奧林匹克網上同步賽、全國青少年資訊學奧林匹克聯賽、冬令營、選拔賽和出國參加\(\text{IOI}\)

\(\text{NOI}\)全國青少年資訊學奧林匹克\(\text{NOI}\))是國內包括港澳在內的省級代表隊最高水平的大賽,自\(1984\)年至今,在國內包括香港、澳門組織競賽活動。每年經各省選拔產生\(5\)名選手(其中一名是女選手),由中國計算機學會在計算機普及較好的城市組織進行比賽。這一競賽記個人成績,同時記團體總分。

\(\text{NOI}\)期間,舉辦同步夏令營\(\text{NOI}\)網上同步賽,給那些程式設計愛好者和高手提供機會。為增加競賽的競爭性、對抗性和趣味性以及視覺化,\(\text{NOI}\)組織進行團體對抗賽,團體對抗賽實質上是程式對抗賽,其成績納入總分計算。

\(\text{NOIP}\)全國青少年資訊學奧林匹克聯賽(\(\text{National Olympiad in Informatics in Provinces}\)簡稱\(\text{NOIP}\))自\(1995\)年至今。每年由中國計算機學會統一組織。\(\text{NOIP}\)在 同一時間、不同地點以各省市為單位由特派員組織。全國統一大綱、統一試卷。初、高中或其他中等專業學校的學生可報名參加聯賽。聯賽分初賽複賽兩個階段。初賽考察通用和實用的電腦科學知識,以筆試為主。複賽為程式設計,須在計算機上除錯完成。參加初賽者須達到一定分數線後才有資格參加複賽。聯賽分普及組和提高組兩個組別,難度不同,分別面向初中和高中階段的學生。

冬令營:全國青少年資訊學奧林匹克冬令營(簡稱冬令營)自\(1995\)年起。每年在寒假期間開展為期一週的培訓活動。冬令營共8天,包括授課、 講座、討論、測試等。參加冬令營的營員分正式營員和非正式營員獲得\(\text{NOI}\)\(20\)名的選手和指導教師為正式營員,非正式營員限量自願報名參加。在冬令營授課的是著名大學的資深教授及已獲得國際金牌學生的指導教師。

\(\text{APIO}\)亞洲與太平洋地區資訊學奧賽\(\text{Asia Pacific Informatics Olympiad}\),簡稱\(\text{APIO}\)\(2007\)年建立,該競賽為區域性的網上準同步賽,是亞洲和太平洋地區每年一次的國際性賽事,旨在給青少年提供更多的賽事機會,推動亞太地區的資訊學奧林匹克的發展。\(\text{APIO}\)每年\(5\)月舉行,由不同的國家輪流主辦。每個參賽團參賽選手上限為\(100\)名,其中成績排在前\(6\)名的選手作為代表該參賽團的正式選手統計成績。\(\text{APIO}\)中國賽區由中國計算機學會組織參賽,獲獎比例將參照\(\text{IOI}\)

選拔賽:選拔參加國際資訊學奧林匹克中國代表隊的競賽(曾經簡稱\(\text{CTSC}\),現為\(\text{CTS}\))。\(\text{IOI}\)的選手是從獲\(\text{NOI}\)\(20\)名選手中選拔出來的,獲得前\(4\)名的優勝者代表中國參加國際競賽。選拔科目包括:\(\text{NOI}\)成績、冬令營成績、論文和答辯、平時作業、選拔賽成績、口試。上述專案加權產生最後成績。

\(\text {IOI}\): 出國參加國際資訊學奧林匹克競賽\(\text{International Olympiad in Informatics}\),簡稱\(\text{IOI}\))。由中國計算機學會組織代表隊,代表中國參加國際每年一次的\(\text{IOI}\)中國是\(\text{IOI}\)創始國之一\(\text{IOI}2000\)由中國主辦,\(\text{CCF}\)承辦。出國參賽得到中國科協和國家自然科學基金委的資助。自\(1989\)年開始,我國在\(\text{NOI}\)(網上同步賽\(99\)年開始)、\(\text{NOIP}\)、冬令營、選拔賽的基礎上,組織參加國際資訊學奧林匹克競賽。十幾年中選拔\(75\)人次參加了\(\text{IOI}\),累計獲金牌\(46\)塊、銀牌\(17\)塊,銅牌\(12\)塊。這些選手不僅在國際大賽中有好的表現,而且在現代的資訊學科上也大展才華。

\(\text{CSP-J/S}\)\(\text{CCF}\)非專業級軟體能力認證\(\text{Certified Software Professional Junior/Senior}\),簡稱\(\text{CSP-J/S}\))創辦於\(2019\)年,是由\(\text{CCF}\)統一組織的評價計算機非專業人士演算法和程式設計能力的活動。在同一時間、不同地點以各省市為單位由\(\text{CCF}\)授權的省認證組織單位和總負責人組織。全國統一大綱、統一認證題目,任何人均可報名參加。\(\text{CSP-J/S}\)分兩個級別進行,分別為\(\text{CSP-J}\)(入門級,\(\text{Junior}\))和\(\text{CSP-S}\)(提高階,\(\text{Senior}\)),兩個級別難度不同,均涉及演算法和程式設計。\(\text{CSP-J/S}\)分第一輪和第二輪兩個階段。第一輪考察通用和實用的電腦科學知識,以筆試為主,部分省市以機試方式認證。第二輪為程式設計,須在計算機上除錯完成。第一輪認證成績優異者進入第二輪認證,第二輪認證結束後,\(\text{CCF}\)將根據\(\text{CSP-J/S}\)各組的認證成績和給定的分數線,頒發認證證書。\(\text{CSP-J/S}\)成績優異者,可參加\(\text{NOI}\)省級選拔,省級選拔成績優異者可參加\(\text{NOI}\)

C++常見的資料型別

資料型別 佔用空間 資料範圍
無值型void \(0\text{ byte}\) 無值域
布林型bool \(1\text{ byte}\) \(\{\text{false,true}\}\)
有符號短整型short [int] /signed short [int] \(2\text{ byte}\) \([-2^{15},2^{15})\)
無符號短整型unsigned short [int] \(2\text{ byte}\) \([0,2^{16})\)
有符號整型int /signed [int] \(4\text{ byte}\) \([-2^{31},2^{31})\)
無符號整型unsigned [int] \(4\text{ byte}\) \([0,2^{32})\)
有符號長整型long [int]/signed long [int] \(4\text{ byte}\) \([-2^{31},2^{31})\)
無符號長整型unsigned long [int] \(4\text{ byte}\) \([0,2^{32})\)
有符號長整型long long/signed long long \(8\text{ byte}\) \([-2^{63},2^{63})\)
無符號長整型unsigned long long \(8\text{ byte}\) \([0,2^{64})\)
有符號字元型char/signed char \(1\text{ byte}\) \([-2^7,2^7)\)
無符號字元型unsigned char \(1\text{ byte}\) \([0,2^8)\)
寬字元型wchar_t (unsigned short) \(2\text{ byte}\) \([0,2^{16})\)
單精度浮點型float \(4\text{ byte}\) \([-3.4\times 10^{-38},3.4\times 10^{38}]\)
雙精度浮點型double \(8\text{ byte}\) \([-1.7\times 10^{-308},1.7\times 10^{308}]\)

邏輯運算子和C++中的運算子

邏輯運算子

常見的邏輯運算子:\(\land\)\(\lor\)\(\lnot\)\(\oplus\),其運算優先順序為\(\lnot>\and>\oplus>\lor\)

C++中的運算子

\(\text{C++}\)當中的運算子有\(16\)個優先等級,同一級的運算子按照結合順序運算。

優先順序\(1\)() [] -> . :: ++ --,結合序:從左到右。

優先順序\(2\)! ~ ++ -- - + * & (type) sizeof,結合序:從右到左。

優先順序\(3\)->* .*,結合序:從左到右。

優先順序\(4\)* / %,結合序:從左到右。

優先順序\(5\)+ -,結合序:從左到右。

優先順序\(6\)>> <<,結合序:從左到右。

優先順序\(7\)< <= > >=,結合序:從左到右。

優先順序\(8\)== !=,結合序:從左到右。

優先順序\(9\)&,結合序:從左到右。

優先順序\(10\)^,結合序:從左到右。

優先順序\(11\)|,結合序:從左到右。

優先順序\(12\)&&,結合序:從左到右。

優先順序\(13\)||,結合序:從左到右。

優先順序\(14\)?:,結合序:從右到左。

優先順序\(15\)= += -= *= /= %= &= |= ^= <<= >>=,結合序:從右到左。

優先順序\(16\),,結合序:從左到右。

排序演算法

排序演算法 平均時間複雜度 最差時間複雜度 最好時間複雜度 空間複雜度 穩定性
插入排序 \(O(n^2)\) \(O(n^2)\) \(O(n)\) \(O(n)\) 穩定
選擇排序 \(O(n^2)\) \(O(n^2)\) \(O(n^2)\) \(O(n)\) 不穩定
希爾排序 \(O\left(n^{\frac{3}{2}}\right)\) \(O(n\log^2 n)\) \(O(n)\) \(O(n)\) 不穩定
堆排序 \(O(n\log n)\) \(O(n\log n)\) \(O(n\log n)\) \(O(n)\) 不穩定
氣泡排序 \(O(n^2)\) \(O(n^2)\) \(O(n)\) \(O(n)\) 穩定
快速排序 \(O(n\log n)\) \(O(n^2)\) \(O(n\log n)\) \(O(n)\) 不穩定
歸併排序 \(O(n\log n)\) \(O(n\log n)\) \(O(n\log n)\) \(O(n)\) 穩定
計數排序 \(O(n+V)\) \(O(n+V)\) \(O(n+V)\) \(O(n+V)\) 穩定
桶排序 \(O(n\log \dfrac{n}{k})\) \(O(n\log n)\) \(O(n)\) \(O(n+k)\) 穩定
基數排序 \(O(n\lg V)\) \(O(n\lg V)\) \(O(n\lg V)\) \(O(10n)\) 穩定

\(\boldsymbol{notes}\):計數排序為利用值域大小的陣列統計排名的排序,桶排序則將資料分\(k\)個組,組內用其他演算法排序,當資料分佈均勻時\(O\left( n+k\left(\dfrac{n}{k}\log\dfrac{n}{k}\right) \right)\)近似於\(O(n)\),此時空間為\(O(n+k)\)

計算機發展史中的重要事件,年份和人物

計算機發展代別劃分

代別 年代 邏輯電子元件
第一代 \(1946-1958\) 電子管
第二代 \(1959-1964\) 電晶體
第三代 \(1965-1970\) 積體電路
第四代 \(1970-\text{now}\) 大規模超大規模積體電路

重要事件

  • \(1936\)年英國數學家圖靈提出了圖靈機的概念,\(1950\)年提出了圖靈試驗。

  • \(1944\)年,美籍匈牙利數學家馮諾依曼提出計算機基本結構和工作方式的設想,其理論要點為:\(1.\) 計算機硬體由儲存器,運算器,控制器,輸入輸出裝置組成。\(2.\) 儲存程式思想。至今為止計算機人採用馮諾依曼架構。

  • \(1946\)\(2\)月,在美國賓夕法尼亞大學誕生了世界上第一臺電子計算機\(\text{ENIAC}\)

  • \(1966\)年圖靈獎設立,唯一獲獎的華裔電腦科學家姚期智在\(2000\)年獲獎。

  • \(1971\)年英特爾公司推出了世界上第一款微處理器\(4004\),字長是\(4\)位,是\(4\)為微處理器。

  • \(1978\)年英特爾公司推出的\(8086\)是第一個\(16\)位的微處理器。

  • \(1985\)年英特爾公司生產出\(32\)位字長的處理器\(80836\)

  • \(1989\)年我國第一個公用分組交換網\(\text{CNPAC}\)建成執行。

  • \(1993\)年英特爾公司生產出\(64\)位字長的處理器\(80586\),名為\(\text{Pentium}\)

重要人物

  • 美籍匈牙利數學家 \(\text{John von Neumann}\)

馮諾伊曼對世界上第一臺電子計算機\(\text{ENIAC}\)(電子數字積分計算機)的設計提出過建議,\(1945\)\(3\)月他在共同討論的基礎上起草了一個全新的“儲存程式通用電子計算機方案”——\(\text{EDVAC}\)\(\text{Electronic Discrete Variable Automatic Computer}\)的縮寫)。這對後來計算機的設計有決定性的影響,特別是確定計算機的結構,採用儲存程式以及二進位制編碼等,至今仍為電子計算機設計者所遵循。

\(1946\)年,馮·諾依曼開始研究程式編制問題,他是現代數值分析——計算數學的締造者之一,他首先研究線性代數和算術的數值計算,後來著重研究非線性微分方程的離散化以及穩定問題,並給出誤差的估計。他協助發展了一些演算法,特別是蒙特卡羅方法

  • 英國數學家,邏輯學家 \(\text{Alan Mathison Turing}\)

\(1931\)年圖靈進入劍橋大學國王學院,畢業後到美國普林斯頓大學攻讀博士學位,第二次世界大戰爆發後回到劍橋,後曾協助軍方破解德國的著名密碼系統\(\text{Enigma}\),幫助盟軍取得了二戰的勝利。

圖靈對於人工智慧的發展有諸多貢獻,提出了一種用於判定機器是否具有智慧的試驗方法,即圖靈試驗,至今,每年都有試驗的比賽。此外,圖靈提出的著名的圖靈機模型為現代計算機的邏輯工作方式奠定了基礎。

圖靈獎於\(1966\)年由美國計算機協會\(\text{ACM}\)設立,專門獎勵那些對計算機事業做出重要貢獻的個人。

  • 英國數學家,程式設計師 \(\text{Ada Lovelace}\)

著名英國詩人拜倫之女,計算機程式創始人,建立了迴圈和子程式概念。

為計算程式擬定“演算法”,寫作的第一份“程式設計流程圖”,被珍視為“第一位給計算機寫程式的人”。為了紀念阿達·奧古斯塔對現代電腦與軟體工程所產生的重大影響,美國國防部將耗費巨資,歷時近\(20\)年研製成功的高階程式語言命名為\(\text{Ada}\)語言,它被公認為是第四代計算機語言的主要代表。

  • 美國電腦科學家 \(\text{John McCarthy}\)

\(1971\)年的圖靈獎授予提出“人工智慧”這一術語並使之成為一個重要的學科領域的斯坦福大學教授約翰·麥卡錫。

  • 英國數學家,機械工程師 \(\text{Charles Babbage}\)

查爾斯·巴比奇由於提出了差分機與分析機的設計概念,被視為計算機先驅。\(1828\)年至\(1839\)年,巴比奇曾在劍橋大學擔任盧卡斯數學教授席位。

  • 英國數學家,資訊理論創始人 \(\text{Claude Elwood Shannon}\)

夏農於\(1940\)年在普林斯頓高階研究所期間開始思考資訊理論與有效通訊系統的問題。經過\(8\)年的努力,夏農在\(1948\)\(6\)月和\(10\)月在《貝爾系統技術雜誌》(\(\text{Bell System Technical Journal}\))上連載發表了具有深遠影響的論文《通訊的數學原理》。\(1949\)年,夏農又在該雜誌上發表了另一著名論文《噪聲下的通訊》。在這兩篇論文中,夏農闡明瞭通訊的基本問題,給出了通訊系統的模型,提出了資訊量的數學表示式,並解決了通道容量、信源統計特性、信源編碼、通道編碼等一系列基本技術問題。兩篇論文成為了資訊理論的奠基性著作。

  • 美國科學家,英特爾公司創始人 \(\text{Gordon Moore}\)

創立\(\text{Inter}\)公司,提出摩爾定律:積體電路上可以容納的電晶體數目在大約每經過\(24\)個月便會增加一倍。換言之,處理器的效能每隔兩年翻一倍。

  • 荷蘭電腦科學家 \(\text{Edsger Wybe Dijkstra}\)

曾在\(1972\)年獲得圖靈獎,之後,他還獲得過\(1974\)\(\text{AFIPS Harry Goode Memorial Award}\)\(1989\)\(\text{ACM SIGCSE}\)電腦科學教育教學傑出貢獻獎,以及\(2002\)\(\text{ACM PODC}\)最具影響力論文獎。提出了著名的貪心最短路演算法\(\text{Dijkstra}\)

  • 美國電腦科學家 \(\text{Robert Tarjan}\)

羅伯特·塔揚與約翰霍普克羅夫特共同於\(1986\)年獲得圖靈獎。羅伯特·塔揚證明了並查集時間複雜度,提出圖論連通性的\(\text{Trajan}\)演算法,離線求解樹上最近公共祖先的\(\text{Trajan}\)演算法,提出\(\text{Splay}\)樹,動態樹,斐波那契堆等資料結構。

計算機語言

機器語言

用二進位制程式碼來編寫計算機程式,又稱二進位制語言,書寫困難,記憶複雜,難以掌握。

組合語言

比機器語言簡單,但仍屬於低階語言,工作量大,繁瑣,可移植性差。

graph LR 1[彙編源程式] --翻譯程式--> 2[目標程式] 2[目標程式] --連線程式--> 3[可執行程式]

高階語言

通過翻譯程式翻譯成機器語言形式的目標程式,翻譯有兩種方式:編譯方式和解釋方式。

編譯方式:由編譯程式將源程式轉化成二進位制程式碼,生成目標程式,然後把目標程式連線成可執行程式。

graph LR 1[高階語言源程式] --編譯程式--> 2[目標程式] 2[目標程式] --連線程式--> 3[可執行程式]

解釋方式:源程式進入計算機時,解釋程式邊掃描邊解釋,解釋一條執行一條,不產生目標程式。

graph LR 1[高階語言源程式] --解釋程式--> 2[可執行程式]

常見的計算機語言

編譯性語言:\(\text{C/C++, Pascal/Object, Fortran, Cobol, Delphi}\)

解釋性語言:\(\text{ASP, PHP, Java, JavaScript, VBScript, Perl, Python, Ruby, MATLAB}\)

面嚮物件語言:\(\text{Simula 67, Smalltalk, EIFFEL, C++, Java, C#, Python, Go}\)

面向過程語言:\(\text{Fortran, C}\)

References

\([1]\text{zqy}.(2005).\text{Fake with its applications,6(66),1-114514}.\)

\([2]\text{zqy's blogs : cnblogs},\)雲煙永珍但過眼\(.\)