挑戰程式設計競賽學習筆記2

2021-10-04 10:32:02 字數 1069 閱讀 6144

書中只給出演算法函式,程式所用資料預設已讀入程式並儲存在全域性變數中。

以高效演算法為目標,需要正確估算各種演算法的複雜度。

縮短執行時間,主要應該從複雜度入手。

程式都從標準輸入按指定格式讀入資料

輸入資料已經由main函式讀入並儲存在全域性變數中

通過呼叫solve函式來求解

在設計滿足問題要求的演算法時,我們不可能挨個去試,應當通過估算演算法複雜度來判斷

在分析複雜度時,我們通常考慮它與什麼成正比,並稱之為演算法的階。

例如

1.1 四重迴圈,每重n次,執行的時間與n⁴成正比。

我們將與n⁴成正比寫作 o(n⁴),將對應的時間寫作 o(n⁴) 時間

程式的執行時間不光取決於複雜度,也會受到諸如迴圈體的複雜性等因素的影響。

但是,因此造成的差距多數情況下最多也就幾十倍。

另一方面,忽略其餘因素,n=1000時,o(n³)時間的演算法和o(n²)時間的演算法差距就是1000倍。

因此要縮短執行時間主要應該從複雜度入手。

估算出演算法的複雜度後,只要將數值可能的最大值帶入帶入複雜的漸進式中,就能簡單的判斷演算法是否能滿足執行時間限制的要求。

例如

考慮 o(n²) 時間的演算法,限制條件是n<=1000,將n=1000代入 n的平方 就得到了1000000。

在這個數值的基礎上,我們就可以結合下表進行判斷。

假設時間限制為1秒

1e6                       完全沒問題

1e7                       勉強能滿足

1e8                       演算法迴圈體稍微複雜一點就很可能超時

挑戰程式設計競賽學習筆記1

const定義的變數值在程式執行過程中不允許發生改變 printf根據格式符輸出對應型別 putchar只能輸出字元 puts可以輸出字串 設計高效且正確的演算法 正確地實現 並且,為了設計演算法,靈活的想象力 演算法的基礎知識 也是必不可少的。程式設計競賽就是以程式設計為主題舉辦的競賽。n個紙片,...

挑戰程式設計競賽學習筆記4

想象力很重要,要從複雜中看出本質。暴搜雖然幾乎萬能,但是越複雜時間越長,能不用就不用。n只螞蟻,均以1cm s的速度,在長為lcm的桿子上爬行。爬到端點掉落,相遇時掉頭爬,已知每只螞蟻據竿子左端的距離xi,朝向未知。求所有螞蟻落下桿子所需的最短時間和最長時間。1 l 1e6 1 n 1e6 0 x ...

挑戰程式設計競賽學習筆記5

不僅要熟練掌握基礎演算法,豐富的想象力亦是非常重要的。二分查詢的複雜度是o logn 的,即便n變得很大,對數時間的演算法依然非常快速。如果把最開始的問題中的n的限制條件改為1 n 1000,最初的四重迴圈o n的4次方 複雜度的演算法顯然不夠,必須改進演算法。for int a 0 a上為最初程式...