第一篇:數(shù)據(jù)結(jié)構(gòu)與算法實(shí)驗(yàn)班學(xué)習(xí)體會(huì)
數(shù)據(jù)結(jié)構(gòu)與算法實(shí)驗(yàn)班學(xué)習(xí)體會(huì)
000648043 姚金宇
我是計(jì)算機(jī)系2006級(jí)本科生,在大二上學(xué)期選修了張銘老師的數(shù)據(jù)結(jié)構(gòu)與算法實(shí)驗(yàn)班。數(shù)據(jù)結(jié)構(gòu)與算法課是每一個(gè)計(jì)算機(jī)專(zhuān)業(yè)學(xué)生的必修課,從我目前所學(xué)習(xí)的后續(xù)課程,包括算法設(shè)計(jì)、編譯技術(shù)等課程來(lái)看,這門(mén)課是其非常重要的基礎(chǔ)課程之一。
我從初中就開(kāi)始接觸高中的信息學(xué)奧林匹克競(jìng)賽,對(duì)數(shù)據(jù)結(jié)構(gòu)與算法方面的相關(guān)知識(shí)接觸的比較早。張老師為了更有針對(duì)性地對(duì)具有不同基礎(chǔ)的學(xué)生進(jìn)行因材施教,開(kāi)設(shè)了數(shù)據(jù)結(jié)構(gòu)算法實(shí)驗(yàn)班,我很榮幸地被批準(zhǔn)通過(guò)選修實(shí)驗(yàn)班的課。通過(guò)一個(gè)學(xué)期的學(xué)習(xí),我加深了對(duì)數(shù)據(jù)結(jié)構(gòu)與算法的相關(guān)知識(shí)的理解,并通過(guò)張老師細(xì)致地講解,將自己過(guò)去從高中競(jìng)賽所學(xué)到的離散的、碎片式的知識(shí)點(diǎn)連貫地串了起來(lái),形成了一套較為完整的知識(shí)體系。我想這對(duì)于我后續(xù)的學(xué)習(xí)和對(duì)更高層次數(shù)據(jù)結(jié)構(gòu)與算法知識(shí)的探索,都是大有裨益的。
我認(rèn)為,在這門(mén)課的學(xué)習(xí)過(guò)程中,張老師所引導(dǎo)我們掌握的不僅僅是知識(shí)點(diǎn)與問(wèn)題的簡(jiǎn)單聯(lián)系,而是進(jìn)行拓展性地思考和探索。例如樹(shù)的順序存儲(chǔ),除了講解各種帶標(biāo)記的存儲(chǔ)方法以外,我們還討論了這些存儲(chǔ)方式中記錄的信息是不是都是必須的、如何用最少的標(biāo)記信息表示一棵樹(shù)等問(wèn)題。這就讓我們對(duì)原本看似平凡的知識(shí)有更深刻的認(rèn)識(shí)。另外,我們所完成的作業(yè)和練習(xí)也都不是簡(jiǎn)單的解題訓(xùn)練,很多問(wèn)題都是帶有可研究性與可擴(kuò)展性的,甚至很多問(wèn)題沒(méi)有單一的結(jié)論,這就引導(dǎo)我們創(chuàng)造性地應(yīng)用所學(xué)的知識(shí)去研究問(wèn)題、解決問(wèn)題。
張老師在實(shí)驗(yàn)班的課堂上不但注重基礎(chǔ)知識(shí)的講解,還會(huì)適當(dāng)介紹一些較為高級(jí)的數(shù)據(jù)結(jié)構(gòu)(例如伸展樹(shù)、后綴樹(shù)等),以及一些較新的算法研究成果。這些介紹不僅對(duì)于鞏固基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)有很強(qiáng)的促進(jìn)作用,還讓對(duì)我們往后更難的課程更有信心。事實(shí)上,我認(rèn)為算法與數(shù)據(jù)結(jié)構(gòu)在我們計(jì)算機(jī)專(zhuān)業(yè)課程的學(xué)習(xí)中是無(wú)處不在的,圖論中的樹(shù)、圖模型,組合數(shù)學(xué)中模型的計(jì)數(shù),編譯技術(shù)中關(guān)于文法的分析、自動(dòng)機(jī)模型,無(wú)一不包含數(shù)據(jù)結(jié)構(gòu)與算法的理論。能夠更快、更好地掌握后續(xù)這些課程的知識(shí)體系,于我在數(shù)據(jù)結(jié)構(gòu)與算法課中所學(xué)是分不開(kāi)的。我是北大ACM隊(duì)員之一,并于今年代表北京大學(xué)參加了第32屆ACM-ICPC國(guó)際大學(xué)生程序設(shè)計(jì)競(jìng)賽全球總決賽,獲得了第13名。ACM-ICPC競(jìng)賽十分注重選手對(duì)于模型抽象的能力、對(duì)于數(shù)據(jù)結(jié)構(gòu)與算法的理解以及編程能力。這門(mén)課程對(duì)我參加ACM競(jìng)賽無(wú)疑也是幫助甚大。它讓我更系統(tǒng)、透徹地理解了數(shù)據(jù)結(jié)構(gòu)與算法的相關(guān)知識(shí),對(duì)于在賽場(chǎng)上的解題能力和解題速度都有很大的提高??偠灾瑥埨蠋煹臄?shù)據(jù)結(jié)構(gòu)與算法這門(mén)課程作為我的必修課之一,對(duì)于我計(jì)算機(jī)專(zhuān)業(yè)的學(xué)習(xí)是幫助很大并且影響深遠(yuǎn)的。
北京大學(xué)計(jì)算機(jī)系2006級(jí)本科生
000648043 姚金宇
2008年4月14日
第二篇:數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計(jì) 心得體會(huì) 學(xué)習(xí)體會(huì)
課程設(shè)計(jì)的心得體會(huì)
陳康蔭080401200708級(jí)計(jì)科系計(jì)本(2)班
完成了這次的二元多項(xiàng)式加減運(yùn)算問(wèn)題的課程設(shè)計(jì)后,我的心得體會(huì)很多,細(xì)細(xì)梳理一下,有以下幾點(diǎn):
1、程序的編寫(xiě)中的語(yǔ)法錯(cuò)誤及修改
因?yàn)槲以诮鉀Q二元多項(xiàng)式問(wèn)題中,使用了鏈表的方式建立的二元多項(xiàng)式,所以程序的空間是動(dòng)態(tài)的生成的,而且鏈表可以靈活地添加或刪除結(jié)點(diǎn),所以使得程序得到簡(jiǎn)化。但是出現(xiàn)的語(yǔ)法問(wèn)題主要在于子函數(shù)和變量的定義,降序排序,關(guān)鍵字和函數(shù)名稱(chēng)的書(shū)寫(xiě),以及一些庫(kù)函數(shù)的規(guī)范使用,這些問(wèn)題均可以根據(jù)編譯器的警告提示,對(duì)應(yīng)的將其解決。
2、程序的設(shè)計(jì)中的邏輯問(wèn)題及其調(diào)整
我在設(shè)計(jì)程序的過(guò)程中遇到許多問(wèn)題,首先在選擇數(shù)據(jù)結(jié)構(gòu)的時(shí)候選擇了鏈表,但是鏈表的排序比較困難,特別是在多關(guān)鍵字的情況下,在一種關(guān)鍵字確定了順序以后,在第一關(guān)鍵字相同的時(shí)候,按某種順序?qū)Φ诙P(guān)鍵字進(jìn)行排序。在此程序中共涉及到3個(gè)量數(shù),即:系數(shù),x的指數(shù)和y的指數(shù),而關(guān)鍵字排是按x的指數(shù)和y的指數(shù)來(lái)看,由于要求是降冪排序且含有2個(gè)關(guān)鍵字,所以我先選擇x的指數(shù)作為第一關(guān)鍵字,先按x的降序來(lái)排序,當(dāng)x的指數(shù)相同時(shí),再以y為關(guān)鍵字,按照y的指數(shù)大小來(lái)進(jìn)行降序排列。
另外,我在加法函數(shù)的編寫(xiě)過(guò)程中也遇到了大量的問(wèn)題,由于要同時(shí)比較多個(gè)關(guān)鍵字,而且設(shè)計(jì)中涉及了數(shù)組和鏈表的綜合運(yùn)用,導(dǎo)致反復(fù)修改了很長(zhǎng)的時(shí)間才完成了一個(gè)加法的設(shè)計(jì)。但是,現(xiàn)在仍然有一個(gè)問(wèn)題存在:若以0為系數(shù)的項(xiàng)是首項(xiàng)則顯示含有此項(xiàng),但是運(yùn)算后則自動(dòng)消除此項(xiàng),這樣是正確的。但是當(dāng)其不是首項(xiàng)的時(shí)候,加法函數(shù)在顯示的時(shí)候有0為系數(shù)的項(xiàng)時(shí),0前邊不顯示符號(hào),當(dāng)然,這樣也可以理解成當(dāng)系數(shù)為0時(shí),忽略這一項(xiàng)。這也是本程序中一個(gè)不完美的地方。
我在設(shè)計(jì)減法函數(shù)的時(shí)候由于考慮不夠充分就直接編寫(xiě)程序,走了很多彎路,不得不停下來(lái)仔細(xì)研究算法,后來(lái)發(fā)現(xiàn)由于前邊的加法函數(shù)完全適用于減法,只不過(guò)是將二元多項(xiàng)式B的所有項(xiàng)取負(fù)再用加法函數(shù)即可,可見(jiàn)算法的重要性不低于程序本身。
3、程序的調(diào)試中的經(jīng)驗(yàn)及體會(huì)
我在調(diào)試過(guò)程中,發(fā)生了許多小細(xì)節(jié)上的問(wèn)題,它們提醒了自己在以后編程的時(shí)候要注意細(xì)節(jié),即使是一個(gè)括號(hào)的遺漏或者一個(gè)字符的誤寫(xiě)都會(huì)造成大量的錯(cuò)誤,浪費(fèi)許多時(shí)間去尋找并修改,總結(jié)的教訓(xùn)就是寫(xiě)程序的時(shí)候,一定要仔細(xì)、認(rèn)真、專(zhuān)注。
我還有一個(gè)很深的體會(huì)就是格式和注釋?zhuān)捎谄綍r(shí)不注意格式和注釋這方面的要求,導(dǎo)致有的時(shí)候在檢查和調(diào)試的時(shí)候很不方便。有的時(shí)候甚至剛剛完成一部分的編輯,結(jié)果一不注意,就忘記了這一部分程序的功能。修改的時(shí)候也有不小心誤刪的情況出現(xiàn)。如果注意格式風(fēng)格,并且養(yǎng)成隨手加注釋的習(xí)慣,就能減少這些不必要的反復(fù)和波折。還有一點(diǎn),就是在修改的時(shí)候,要注意修改前后的不同點(diǎn)在哪里,改后調(diào)試結(jié)果要在原有的基礎(chǔ)上更加精確。
第三篇:數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計(jì) 心得體會(huì) 學(xué)習(xí)體會(huì)
課程設(shè)計(jì)的心得體會(huì)
剛一開(kāi)始抽到題目,我一看覺(jué)得無(wú)從下手,由于那個(gè)時(shí)候很多課都還在進(jìn)行著,也就是抽空思考一下思路,也到圖書(shū)館中借了相關(guān)的書(shū)來(lái)參考,但沒(méi)有進(jìn)行很深入的研究。課程設(shè)計(jì)開(kāi)始的時(shí)候,我開(kāi)始思考我該如何去求解,確定了算法之后,就開(kāi)始寫(xiě)程序,修改錯(cuò)誤,調(diào)試,直至完成,在這一過(guò)程中,讓我學(xué)會(huì)了很多東西。
在課程設(shè)計(jì)結(jié)束后,我對(duì)書(shū)本,也就是我們的教材的認(rèn)識(shí)有了很大的提高。以前我覺(jué)得能看懂書(shū)上的知識(shí),能寫(xiě)出算法就認(rèn)為自己學(xué)的還可以。可是通過(guò)課程設(shè)計(jì),通過(guò)我對(duì)書(shū)上知識(shí)的研究,我發(fā)現(xiàn)其實(shí)書(shū)上有很多東西是我沒(méi)有領(lǐng)略到的。我的算法的核心思想就是圖的深度優(yōu)先搜索遍歷,在用鄰接表對(duì)圖完成存儲(chǔ)之后,我就開(kāi)始仔細(xì)的看書(shū)上有關(guān)圖的遍歷的知識(shí),包括深度優(yōu)先搜索遍歷和廣度優(yōu)先搜索遍歷,就那么幾頁(yè)紙,我看了不知道多少遍。剛一開(kāi)始看一下,覺(jué)得自己會(huì)了,然后做程序,遇到問(wèn)題再拿書(shū)看,沒(méi)看一次我對(duì)算法的理解就更進(jìn)了一步。通過(guò)這次課程設(shè)計(jì),讓我明白了書(shū)上的知識(shí)看似是很有限的,但它蘊(yùn)含的東西值得我們?nèi)セǜ嗟臅r(shí)間去研究。學(xué)知識(shí)不能只學(xué)表面的知識(shí),做出一個(gè)深度優(yōu)先搜索遍歷程序不等于你就掌握了深度優(yōu)先搜索遍歷算法,其他知識(shí)也是這樣,其他科目的學(xué)習(xí)也同樣是這樣。學(xué)習(xí)要抓住知識(shí)的精髓。
在課程設(shè)計(jì)這兩個(gè)星期中,讓我明白了獨(dú)立思考的重要性。一個(gè)東西只有經(jīng)過(guò)自己的思考,自己明白了才是真的明白了,別人說(shuō)的再明白不等于我明白。在思考的過(guò)程中,我發(fā)現(xiàn)對(duì)一個(gè)問(wèn)題,你思考的月深入,可以挖掘的東西就越多。我做的題目是分酒問(wèn)題:三個(gè)酒杯,一個(gè)能裝8kg,一個(gè)能裝5kg,一個(gè)能裝3kg,8kg是空的,5kg和3kg是滿(mǎn)的,不借助其他工具,最終分出兩個(gè)4kg。看似無(wú)從下手,但經(jīng)過(guò)思考之后我確立了用圖來(lái)求解,但是怎樣抽象成圖,抽象成什么樣的圖,模型確立后,圖有很多種存儲(chǔ)結(jié)構(gòu),采用哪一種存儲(chǔ)結(jié)構(gòu)是最優(yōu)的等等問(wèn)題都要去思考。最終我確定采用鄰接表作為存儲(chǔ)結(jié)構(gòu),圖的深度優(yōu)先搜索遍歷來(lái)求解。
獨(dú)立思考很重要,跟別人交流也很重要。在我和別人交流的時(shí)候,開(kāi)闊了我的思維空間,很多原先我沒(méi)想到的東西一下子就蹦出來(lái)了,而且能填補(bǔ)我知識(shí)的空白。跟老師交流就更重要了,以老師的知識(shí)層面和對(duì)問(wèn)題的見(jiàn)解,他的想法具有很強(qiáng)的針對(duì)性和可行性。做好程序后,在寫(xiě)實(shí)驗(yàn)報(bào)告的時(shí)候,我發(fā)現(xiàn)在寫(xiě)實(shí)驗(yàn)報(bào)告的過(guò)程中,我對(duì)我的算法有了更進(jìn)一步的認(rèn)識(shí),因?yàn)槲乙獙?xiě)出來(lái),寫(xiě)出來(lái)的實(shí)驗(yàn)報(bào)告不僅我自己能看明白,更關(guān)鍵的是別人能看明白。這樣就要求我用簡(jiǎn)練的語(yǔ)言來(lái)描述我的算法,而且對(duì)我的語(yǔ)言組織能力也是一次考驗(yàn)。
總之,這次課程設(shè)計(jì)讓我對(duì)數(shù)據(jù)結(jié)構(gòu)有了更深的認(rèn)識(shí),不僅體現(xiàn)在知識(shí)上,還體現(xiàn)在對(duì)知識(shí)的認(rèn)識(shí)、對(duì)學(xué)習(xí)的認(rèn)識(shí)和對(duì)方法的認(rèn)識(shí)。
第四篇:數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計(jì) 心得體會(huì) 學(xué)習(xí)體會(huì)
課程設(shè)計(jì)的心得體會(huì)
每一次課程設(shè)計(jì),都有不一樣的感受,通過(guò)課程設(shè)計(jì),對(duì)我而言,得到的不僅僅是知識(shí),更是獲得知識(shí)的方法,這顯得更加的重要。
本次課程設(shè)計(jì),我的設(shè)計(jì)題目是校園導(dǎo)游程序,本程序主要用到的是課本中圖的知識(shí),以校園中的景點(diǎn)作為頂點(diǎn),以景點(diǎn)間的路徑作為邊,就構(gòu)成了圖。我用到的時(shí)臨界表存儲(chǔ)結(jié)構(gòu),這樣對(duì)空間的浪費(fèi)不至于很大。主要完成的功能是最短路徑和所有路徑的算法,最短路徑用的是書(shū)上的Dijkstra算法,原來(lái)我對(duì)這個(gè)算法的只是出于一個(gè)對(duì)大致的過(guò)程知道的程度,課程設(shè)計(jì)之后,我對(duì)該算法可以說(shuō)是很熟悉了,不管是算法思想還是代碼。另一個(gè)主要功能是求兩個(gè)景點(diǎn)間的所有路徑,這個(gè)算法書(shū)上沒(méi)有提到,我一步步的摸索,用了一個(gè)遞歸的思想,再經(jīng)過(guò)不斷的修改,一次次的單步運(yùn)行,通過(guò)查看相應(yīng)變量的變化情況,將此算法實(shí)現(xiàn)的。最后完成整個(gè)程序。
課程設(shè)計(jì),本人感覺(jué)對(duì)于寫(xiě)程序,首先要要的是思想,即完成每個(gè)功能需要的算法思想,在想好思想后,就要具體到代碼,計(jì)算機(jī)能夠識(shí)別的代碼,代碼寫(xiě)好后,大多情況下是有錯(cuò)誤的,首先要排除語(yǔ)法錯(cuò)誤,然后時(shí)語(yǔ)義錯(cuò)誤,在排錯(cuò)的過(guò)程中,我用到的最多的是單步運(yùn)行,感覺(jué)單步運(yùn)行這種方式很管用,通過(guò)一步步的運(yùn)行,通過(guò)每一步的運(yùn)行,觀察其中變量的變化情況,可以很容易的知道代碼是哪一步出了錯(cuò)誤,這樣對(duì)排錯(cuò)有很大的幫助。在課程設(shè)計(jì)的過(guò)程中,曾遇到過(guò)很多的問(wèn)題,如對(duì)路徑字符串的處理,整個(gè)遞歸一步步的往下調(diào)用和返回過(guò)程,還有很多細(xì)節(jié)的問(wèn)題。在遇到問(wèn)題時(shí),首先想到的是自己思考,分析過(guò)程,查找資料,上網(wǎng)百度,通過(guò)自己的努力還沒(méi)有解決時(shí),這是首先需要問(wèn)的是自己旁邊的同學(xué),和同學(xué)討論,有時(shí)還爭(zhēng)得面紅耳赤,如果最后將此不下,就向老師提問(wèn)。這課程設(shè)計(jì)的過(guò)程中,我?guī)缀跛械膯?wèn)題處理流程就是這個(gè)樣子的。我感覺(jué)這就是一種學(xué)習(xí)的方法,在學(xué)習(xí)中遇到難題時(shí)的學(xué)習(xí)方法,要把這種學(xué)習(xí)的方法變成一種習(xí)慣,這才是每次課程設(shè)計(jì)應(yīng)達(dá)到的一種效果。
課程設(shè)計(jì)提供了這樣一種學(xué)習(xí)的機(jī)會(huì),可以隨時(shí)隨地向老師請(qǐng)教,和老師交流的一個(gè)機(jī)會(huì),和同學(xué)互相討論的機(jī)會(huì)。課程設(shè)計(jì)教會(huì)了我,如何用計(jì)算機(jī)程序來(lái)處理現(xiàn)實(shí)中的實(shí)際問(wèn)題。將現(xiàn)實(shí)中的實(shí)際問(wèn)題先轉(zhuǎn)化為數(shù)學(xué)模型,然后將數(shù)學(xué)模型用程序解決的一種能力。
第五篇:數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計(jì) 心得體會(huì) 學(xué)習(xí)體會(huì)(42)
心得體會(huì)
通過(guò)本次課程設(shè)計(jì),對(duì)圖的概念有了一個(gè)新的認(rèn)識(shí),在學(xué)習(xí)離散數(shù)學(xué)的時(shí)候,總覺(jué)得圖是很抽象的東西,但是在學(xué)習(xí)了《數(shù)據(jù)結(jié)構(gòu)與算法》這門(mén)課程之后,我慢慢地體會(huì)到了其中的奧妙,圖能夠在計(jì)算機(jī)中存在,首先要捕捉他有哪些具體化、數(shù)字化的信息,比如說(shuō)權(quán)值、頂點(diǎn)個(gè)數(shù)等,這也就說(shuō)明了想要把生活中的信息轉(zhuǎn)化到計(jì)算機(jī)中必須用數(shù)字來(lái)完整的構(gòu)成一個(gè)信息庫(kù),而圖的存在,又涉及到了頂點(diǎn)之間的聯(lián)系。圖分為有向圖和無(wú)向圖,而無(wú)向圖又是有向圖在權(quán)值雙向相等下的一種特例,如何能在計(jì)算機(jī)中表示一個(gè)雙向權(quán)值不同的圖,這就是一件很巧妙的事情,經(jīng)過(guò)了思考和老師同學(xué)的幫助,我用edges[i][j]=up和edges[j][i]=up就能實(shí)現(xiàn)了一個(gè)雙向圖信息的存儲(chǔ)。
對(duì)整個(gè)程序而言,Dijkstra算法始終都是核心內(nèi)容,其實(shí)這個(gè)算法在實(shí)際思考中并不難,也許我們誰(shuí)都知道找一個(gè)路徑最短的方法,及從頂點(diǎn)一步一步找最近的路線并與其直接距離相比較,但是,在計(jì)算機(jī)中實(shí)現(xiàn)這么一個(gè)很簡(jiǎn)單的想法就需要涉及到很多專(zhuān)業(yè)知識(shí),為了完成設(shè)計(jì),在前期工作中,基本都是以學(xué)習(xí)C語(yǔ)言為主,所以浪費(fèi)了很多時(shí)間,比如說(shuō)在程序中,刪除頂點(diǎn)和增加頂點(diǎn)的模塊中都有和建圖模塊相互重復(fù)的函數(shù),但是由于技術(shù)的原因,只能做一些很累贅的函數(shù),可見(jiàn)在調(diào)用知識(shí)點(diǎn),我沒(méi)有掌握好。不過(guò),有了這次課程設(shè)計(jì)的經(jīng)驗(yàn)和教訓(xùn),我能夠很清楚的對(duì)自己定一個(gè)合適的水平,而且在這次課程設(shè)計(jì)中我學(xué)會(huì)了運(yùn)用兩個(gè)新的函數(shù)sprintf()和包涵在#include