日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算法专题(1)-信息学基本解题流程!

發布時間:2023/12/31 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法专题(1)-信息学基本解题流程! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

算法專題(1)-信息學基本解題流程!

【文章來源:清北學堂微信訂閱號noipnoi】

摘要

本次系列文章主要介紹信息學以下知識點

今天我們主要看信息學基本解題流程:

一、?基本解題流程

1.概述:

????信息學中解算法題跟數學中解應用題十分類似,大致分為以下四個步驟:題意理解與模型建立、算法設計與復雜度分析、代碼編寫、調試。

?

2.?知識點梳理:

??題意理解與模型建立

????題意理解是算法設計的第一步,也是非常關鍵的一步。與做數學應用題一樣,需要將原題抽象成相對應的數學或邏輯形式,再參考不同的模型進行建模。常見的模型有搜索模型、組合數學模型、動態規劃模型、樹圖模型等。

??算法設計與復雜度分析

????設計算法與分析復雜度是整個解題過程中最重要的部分。設計算法時,需要考慮算法的正確性,尤其是對于貪心類型的題目求解時。分析復雜度可以大致確認算法能跑多快,在比賽中可以過多少個數據點。

????通常來講,計算機在一秒內的運算次數大致是107(千萬)到108(億)的量級,如果把n代入復雜度的表達式,得數大于107,就會有超時的可能。

?

??代碼編寫

????寫代碼之前,在紙上寫一下偽代碼,既可以幫助整理思路,也可以加快代碼編寫的速度。在代碼的編寫過程中,變量命名規則,循環中左右括號的分布(左括號是否換號),縮進等需要有一個固定的格式。這樣不僅可以使得代碼更加美觀,也可在后續調試中減少不必要的麻煩。關鍵代碼部分應適當加些注釋,方便自己調試。

?

??代碼調試

????在代碼編寫完成后,不能保證其完全正確,這時候,需要對其進行調試。調試過程大致分為以下幾點:

靜態查錯:不要運行程序。靜下心來,慢慢地用你的思路、框圖和偽代碼檢查代碼,看是否有打錯的或者漏打的內容。一般要先查局部,后查整體。(調試前先靜態查錯,如果忽略,很容易因為長時間找不到錯誤而造成緊張、焦慮的情緒,從而影響答題。)

?

黑箱測試:測試示例。如果示例的結果都不對,就應該考慮算法的正確性,并檢查代碼是否寫錯。

?

構造小數據:根據程序功能設計幾個數據,檢查程序是否計算出正確結果。

?

構造極端數據:在時間允許的情況下,按照題目中的數據要求,嘗試構造極端數據,測試自己的程序。

?

輸出中間結果:有時候程序的結果不正確,但通過直接觀察代碼無法找到問題,可在代碼中的關鍵部分輸出中間結果,以查看代碼中哪部分有錯。注意:在提交之前,需要將這些用于調試的輸出注釋掉。

?

單步調試:有些情況下,在輸出中間結果調試時仍然找不到問題,可以進行單步調試。要注意耐心。

?

3.?重難點分析:

  • 題意必須理解透徹,模型需要建立正確。
  • 算法設計時,需要把握其正確性(尤其是貪心算法)和可行性(算法復雜度)。
  • 偽代碼很重要,代碼中適當的注釋也是必要的。代碼編寫時需注意細節。
  • 代碼調試時,應先靜態后動態,先整體后局部。
  • ?

?

4.?例題解析:

例題1-1:數字三角形

【問題描述】有一個層數為n (n≤1000)?的數字三角形(如下圖)。現有一只螞蟻從頂層開始向下走,每走下一級時,可向左下方向或右下方向走。求走到底層后它所經過數?字的總和的最大值。

?

1

6 ?3

8 ?2 ?6

2 ?1 ?6 ?5

3 ?2 ?4 ?7 ?6

最大值=1+3+6+6+7=23

【分析】本題題目描述比較清晰,可按照題目意思直接理解題意,也可構建模型。模型構建后,本題可抽象為一個圖,圖中共有n層頂點(n≤1000),每個頂點有一個權重,第i層的頂點有i個,其中第i層中第k的頂點與i+1層中第k和k+1個頂點有路徑。需要求解的是,從第1層走到第第n層的路徑中,經過頂點權重和最大的路徑的權重和。

?

題意理解后,接下來就是要設計算法。本例題中,一個樸素的算法是直接模擬。先從(1,1)點開始,每次向下左下或者右下走,記錄路徑上的數字和,當走到第n層的時候結束,記錄可行解。繼續模擬,直到所有可能情況都被計算過。記錄最大的數字和,算法結束。

?

上述算法簡單易懂,但是實現起來復雜度很高。對于i層第k個節點(i,k),可以向左下走到(i+1,k)或向右下走到(i+1,k+1),每個節點上都有兩種可行方案,每一次模擬需要走n個節點。那么需要模擬的次數是2(n-1),也就是說,時間復雜度是O(2(n-1))。這種復雜度下,顯然不能在限定時間內出解。

?

當一開始設計的算法復雜度無法滿足要求時,需要考慮更有效的算法。本例中,因為只要求解可行路徑上的最大頂點和,那么對于節點(i,k)只要保存走到這個節點時,已走路徑的最大頂點和,記作f(i,k)。由于螞蟻只能往下走,不會再回頭。對于節點(i,k),它的最大值只可能從節點(i-1,k-1)或節點(i-1,k)中更新,即

?

最后只要求解第n層中f的最大值即可。由于每個節點只會被更新一次,時間復雜度變為O(n*(n+1)/2),即O(n2)。該方法運用的是動態規劃的思路,在之后動態規劃的章節會具體講述。

例題1-2:作業調度方案NOIP2006

【問題描述】我們現在要利用m臺機器加工n個工件,每個工件都有m道工序,每道工序都在不同的指定的機器上完成。每個工件的每道工序都有指定的加工時間。

每個工件的每個工序稱為一個操作,我們用記號j-k表示一個操作,其中j為1到n中的某個數字,為工件號;k為1到m中的某個數字,為工序號,例如2-4表示第2個工件第4道工序的這個操作。在本題中,我們還給定對于各操作的一個安排順序。

例如,當n=3,m=2時,“1-1,1-2,2-1,3-1,3-2,2-2”就是一個給定的安排順序,即先安排第1個工件的第1個工序,再安排第1個工件的第2個工序,然后再安排第2個工件的第1個工序,等等。

?

一方面,每個操作的安排都要滿足以下的兩個約束條件。

(1)?對同一個工件,每道工序必須在它前面的工序完成后才能開始;

(2)?同一時刻每一臺機器至多只能加工一個工件。

?

另一方面,在安排后面的操作時,不能改動前面已安排的操作的工作狀態。

由于同一工件都是按工序的順序安排的,因此,只按原順序給出工件號,仍可得到同樣的安排順序,于是,在輸入數據中,我們將這個安排順序簡寫為“1 1 2 3 3 2”。

?

還要注意,“安排順序”只要求按照給定的順序安排每個操作。不一定是各機器上的實際操作順序。在具體實施時,有可能排在后面的某個操作比前面的某個操作先完成。

?

例如,取n=3,m=2,已知數據如下:

?

工件號

機器號/加工時間

工序1

工序2

1

1/3

2/2

2

1/2

2/5

3

2/2

1/4

則對于安排順序“1 1 2 3 3 2”,下圖中的兩個實施方案都是正確的。但所需要的總時間分別是10與12。

?

當一個操作插入到某臺機器的某個空檔時(機器上最后的尚未安排操作的部分也可以看作一個空檔),可以靠前插入,也可以靠后或居中插入。為了使問題簡單一些,我們約定:在保證約束條件(1)(2)的條件下,盡量靠前插入。并且,我們還約定,如果有多個空檔可以插入,就在保證約束條件(1)(2)的條件下,插入到最前面的一個空檔。于是,在這些約定下,上例中的方案一是正確的,而方案二是不正確的。

?

顯然,在這些約定下,對于給定的安排順序,符合該安排順序的實施方案是唯一的,請你計算出該方案完成全部任務所需的總時間。

?

【輸入】

第一行為兩個數:m n(其中m<20表示機器數,n<20表示工件數)

第2行:2n個用空格隔開的數,為給定的安排順序。

接下來的2n行,每行都是用空格隔開的m個正整數,每個數不超過20。

其中前n行依次表示每個工件的每個工序所使用的機器號,第1個數為第1個工序的機器號,第2個數為第2個工序機器號,等等。后n行依次表示每個工件的每個工序的加工時間。可以保證,以上各數據都是正確的,不必檢驗。

?

【輸出】

輸出只有一個正整數,為最少的加工時間。

【樣例輸入】

2 3

1 1 2 3 3 2

1 2

1 2

2 1

3 2

2 5

2 4

【樣例輸出】

10

?

【分析】本題題目冗長,需耐心讀題,理解題意。本題中最重要的內容是兩個約束與兩個約定。

約束:

  • 對同一個工件,每道工序必須在它前面的工序完成后才能開始;
  • 同一時刻每一臺機器至多只能加工一個工件。

約定:

  • 保證約束條件(1)(2)的條件下,盡量靠前插入
  • 如果有多個空檔可以插入,就在保證約束條件(1)(2)的條件下,插入到最前面的一個空檔。

?

????理解了這些約束與約定,本題就是一個簡單的模擬題。按照題目所給的安排順序進行模擬,對于順序中的每一個工件,根據約束與約定,插入到機器中。

?

轉載于:https://www.cnblogs.com/qbxt/p/10943920.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的算法专题(1)-信息学基本解题流程!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。