暑假訓練總結

2021-08-07 10:11:22 字數 2687 閱讀 7566

題目:暑假acm訓練的實踐與總結

專業班級:

資訊與計算科學2班

姓名:李

雨潔 學號:20164395

2017 年 8 月 25 日

【摘要】 3

1.搜尋

和圖論 4

2.二分查詢和

單調佇列 5

3.樹狀陣列 5

4.總結 6

這個假期的訓練從7月31號開始到今天算是接近尾聲了。

這次訓練

首先是部分

(以及乙個演算法的優化--spa演算法)。另外一種就是最小生成樹的兩大演算法。最短路徑的第乙個演算法就是佛洛依德演算法,簡單暴力的三重迴圈查詢,要領就是第一重迴圈代表了中介點,二三層表示起始點,判斷路徑的大小關係,不斷進行更新即可。最短路徑的第二個演算法是乙個速度極其快的演算法,但是不能用來處理負環的相關問題,這種演算法的基礎就是點的鬆弛技術,是一種單源的最短路徑的演算法,思路就是以乙個點為起點,開始更新,找到到這個點距離最小的點,然後查詢這個點能到達的所有點,若距離縮短,則進行更新,更新完之後再進行下一輪的查詢。最短路徑的第三大演算法就是spa演算法,這個演算法的思路也是更新,距離變小則入棧,出棧更新其他點,如此往復。這個演算法的特殊用法就是判斷負環是否存在(也就是判斷乙個點是否入棧次數大於n)。而對於最小生成樹的第乙個演算法,也是用點更新距離,與最短路徑第二個演算法的不同之處,就是加不加原本的那段距離。

接下來的一段時間我們複習了有關於二分三分以及單調佇列的有關內容。二分查詢又稱折半查詢。在乙個單調有序的集合中查詢元素,每次將集合分為左右兩部分,判斷解在哪個部分中並調整集合上下界,重複直到找到目標元素。

1.區間移動,求區間最值。(這種題目的解決方案就是模板加head處理,如果head的值小於區間的左端點,那麼head++,一直到head的值屬於這個區間,那麼這個head下存的東西就是這個區間內的最大(最小)的值)

2.求某個數兩邊有多少個比他大的(小的)。(這種題目就從兩個方向建立單調佇列,利用的是單調佇列的乙個性質,就是儲存的是上乙個比他大的(小的)值的值或者位置)

3.樹狀陣列樹狀

陣列是乙個查詢和修改複雜度都為log(n)的資料結構。主要用於查詢任意兩位之間的所有元素之和,但是每次只能修改乙個元素的值;經過簡單修改可以在log(n)的複雜度下進行範圍修改,但是這時只能查詢其中乙個元素

的值(如果加入多個輔助陣列則可以實現區間修改與區間查詢)。我們對這塊知識點十分的陌生,而且樹狀陣列和線段樹相關題目的難度較大,無論從理解題目方面亦或是做題方面都比之前來的慢而艱難的多。總的來講樹狀陣列和線段樹都是處理區間問題的一種工具,可以用來優化演算法的時間的複雜度,使得一些本該超時的演算法得以通過。

對於樹狀陣列而言,它的核心就是lowbit(int x)函式建樹,樹狀陣列的元素之間的聯絡都是建立在這乙個簡單的位運算上,也就是return x&(-x),然後用add函式和sum函式完成更新和查詢的操作,樹狀陣列典型例題:

1.也就是樹狀陣列的使用的初衷,點的更新,區間求和,這類問題就是一種最簡單的模板題,用上述三種函式就可以完成,這類問題最典型的就是敵兵布陣。

2.就是用樹狀陣列求逆序數,這種問題一般比較難想到,但一旦想到,處理起來也是一類模板的簡單的問題。如果資料範圍較大(比如資料大小達到了十億),需要對資料進行離散化處理(結構體存邊的權值以及他的位置,按權值排序,再按位置存到乙個新的陣列裡面,然後用模板即可)。

3.就是區間染色問題,這類問題也算是一種模板,可以擴充套件到多維,是樹狀陣列的腦洞更新應用型別,這種題的思路就是直接用sum存點被塗色的次數。

4.就是dp的優化問題,這種問題千變萬化,但是大都於區間難脫干係。

還有個知識點,就是離散化,

離散化,把無限空間中有限的個體對映到有限的空間中去,以此提高

演算法的時空效率。通俗的說,離散化是在不改變資料相對大小的條件下,對資料進行相應的縮小。

要用到離散化的地方就是當以權值為下標的時候,值太大,陣列開不了這麼大。 然後把要離散化的每乙個陣列裡面的數對映到另乙個值小一點的陣列裡面去,因為在那個值小一點的陣列裡本來是沒有東西的。

4.總結

總的而言,我很多知識點理解並不好

,做題較少,更需要對知識點的理解

,還是應該多下功夫

。而後,我認為學習比較重要的是知識點的反覆,反覆是乙個十分重要的過程,尤其在程式設計這種細節極多的專案中。

還有感覺到我的自學部分做的並不太好,顯得有許多疏漏,有很多東西都沒有做到,知識點的遍及面也欠缺了很多。而這一缺陷更需要我在日後的訓練中加以彌補,學會通過比賽的正規題目查詢到自己學習的知識點還欠缺哪些。

中間打了幾場訓練賽,我感覺自己做的不好,但是還是有很多收穫的。

感覺真的打比賽的時候,時間的安排尤為重要。

比如第一次訓練賽

,我先把前兩個題目瀏覽了一遍,但是在看第一題的時候,因為看到它給了圖示,心理上就感覺好像特別複雜,然後就先做了第二題,其實今天下午大部分時間都花在了第二題上面。然後第二題一直沒有ac,當時思路也比較固定,沒有什麼突破點,才又回去做了第一題。後來發現第一題要比第二題容易一些,找到規律即可。解完第一題後,又把第二題改了下方法。感覺現在做題還是手忙腳亂,想先從簡單的下手,但是自己又往往判斷錯誤。還是需要通過訓練積累經驗。

最近幾次的比賽反映出來的,就是模板大致記住,細節處理欠妥,但這是十分致命的,出不了題目是次要的,這種似懂非懂,反而會影響自己的心態,導致往後的比賽無法正常的進行。因此更需要反覆,記住其中的細節所在,也就是細節決定成敗這句話的含義。

在訓練過程中,遇到了很多困難,很多知識自己都感覺很難理解,但是希望自己能堅持下來,不要放棄!加油!

暑假訓練總結 SSL暑假訓練總結

第一周過的還算好吧,覺得飯堂伙食也挺好的,同學也挺好。學習的東西感覺比小學難好多,有種覺得以前學的東西太簡單了的感覺,但多虧了小學的時候基礎打得還算紮實,學得還行,但總是感覺自己就是個菜雞,就是乙個蒟蒻,哎,室友真的太強了。第一周總結 第二週自我感覺挺不錯的,總算追上了部分室友,成績也開始 這一切都...

暑假訓練總結

社會實踐調查報告 題目 關於暑假acm訓練的實踐與總結 專業班級 數學與應用數學專業1班 姓名 李雙智 學號 20164249 2017年8 月25日 摘要 31.樹狀陣列和圖論 42.二分三分以及單調佇列 53.樹狀陣列與單調佇列 54.總結6 摘要 本文主要總結了這個暑假acm實踐的主要內容,以...

暑假訓練總結

這一暑假的訓練結束了,感覺自己仍然是一條鹹魚.一暑假的訓練不僅回顧了之前的知識,還學習了新的知識。首先是複習了搜尋的知識,個人感覺搜尋的題目一般 都比較長 也許是自己寫的太囉嗦,廢 太多.而有時候往往在一些不經意的地方而出錯,所以搜尋的題目一般要仔細的把握,不能在一些地方潦草而過,往往會在下面就卡住...