分布式演算法導論
Ⅰ 如何學習數據分析
【轉自網路】
首先,我要說的是我覺得你是一名在校大學生!Data Mining不是你想的那麼簡單,他不單單和數學有關系,還包括了計算機領域的諸多學科。還有社會工程學、邏輯學等文科和理科的交叉學科!他是一門龐大的體系。你要是真想學我只能給你指條比較快的成才之路,後面的東西自己慢慢學都趕趟!慢慢充實自己!大學四年好好利用!學無止境!
既然是數據分析那你的高等數學必須要過硬,別著急這只是你的其他學科的基礎課。其次是概率與統計,這才是正科,大學那點玩意就是糊弄人的,你要多看這方面的書。這個一定要學好!線性必須要會要精通。因為數據劃分是數據挖掘里最重要的一個環節。這個就是線性范疇里的了。也要精通,學會線性分析你就發現你就學會了很多。數學有這三個底子就可以了。數學分析不要看了。因為那隻是高數的延伸!
計算機你一定要懂。資料庫你必須得學會。三大資料庫ORACLE.SQL.MYSQL原理基本類似觸類旁通!
還有就是培養你的思維,盡量縝密敏捷。這樣才可以發現數據中的不同!因為有的數據挖掘是計算機處理的。有的則是紙面上的。所以必須學會記錄
好了,就先這么多了。你學會了這幾個就是你進軍下一步的基礎,這幾個就夠你學一陣子的了。
祝你好運哥們!
數據挖掘的起點很高——
1、統計學
2、機器學習
3、數學——圖論,最優化理論等。
WEB上的數據結構更加復雜。
python語言————應該學習
抱歉,事情太多,如果不追著就忘了!我認為你作為企業員工對數據挖掘感興趣,最主要的就是從應用和解決問題開始,所以我想把數據挖掘這個狹義定義的內容改成你應該對數據分析感興趣,數據挖掘只是數據分析的一個重要工具和解決方法之一!
數量統計知識方面:我認為統計思想是數學在實踐中最重要的體現,但對於實際工作者最重要的是掌握統計思想,其實統計理論非常復雜,但實際應用往往是比較簡單的!比如,很多人都在大學學了假設檢驗,但實際應用中假設就是看P值是否小於0.05,但是H0是什麼?拒絕還是接受的是什麼現實問題;要理解!
掌握軟體問題:從軟體角度學,是非常好的思路,我基本上就是這樣學的。我常說編軟體的人最懂理論,否則編不出來,編軟體的人最知道應用,否則軟體買不出去;現在軟體越來越友好,把軟體自帶案例做一遍,你會自覺不自覺的掌握軟體解決問題的思路和能解決的問題類型;
數據倉庫問題:OLAP和數據挖掘是數據倉庫建立基礎上的兩個增值應用,從企業整體角度,數據挖掘應該建立在企業數據倉庫完備的基礎上。所以說數據倉庫是針對企業級數據挖掘應用提出的,但我們應該記住,企業從來不是為了數據挖掘建立數據倉庫,而是因為有了數據倉庫後必然會提出數據挖掘的需求!現在隨著數據挖掘軟體的工具智能化,以及數據倉庫和ETL工具的介面友好,對資料庫層面的要求越來越少;
數學不好可能反應了一個人思考問題的方式或深入理解問題的能力,但數學不是工具是腦具,不斷解決問題的過程可以讓我們思考問題更數學化!
沈浩老師建議:
不急,一步一步來!先把本職工作中的數據分析問題理解了,干好了!
熟練玩好Excel軟體工具,這個可以看《Excel高級應用與數據分析》我寫的書,當然有很多Excel論壇和網站,從我的博客就可以連接到。
學習好統計分析方法,我不是單指統計原理,而是統計分析方法,比如回歸分析,因子分析等,不斷進入統計分析解決問題的思考方式;這個可以看看SPSS軟體方面的書和數據案例,通過軟體學習解決數據分析的統計問題,這方面的書很多,當然你也可以關注我的博客,不斷增加統計分析方法解決數據分析問題的思路,自己對照著完成!
在上述問題有了比較好的理解後,也就是你應該算是一個數據分析能手的時候,開始進入數據挖掘領域,你會發現用數據挖掘思想解決問題具有智能化、自動化的優勢,接下來,你需要考慮數據建模的過程,通過學習Clementine軟體或SAS的挖掘工具,不斷理解數據挖掘與原來的數據分析工具有什麼不同或優勢!
當前面都是了解並且能夠得心應手後,你就要有針對性的掌握你工作所在行業的問題,例如:電信行業的解決方案問題:客戶流失、客戶價值、客戶離網、客戶保持、客戶響應、客戶交叉銷售等商業模型,同時與數據分析和數據挖掘統一在一起的解決方案!
接下來,你應該掌握資料庫的一些原理和操作,特別是SQL語言的方式
你到了這個階段,就應該有全面解決問題的能力,比如挖掘出來的知識或商業規則如何推送到營銷平台上等等
梳理自己的知識結構,不僅會操作,現在你應該成為專家了,要能夠宣揚你的知識能力和領導力,當然也要表明你在數據挖掘領域的專業特長
要經常幫助同事和行業朋友,比如幫助解決數據分析問題,幫助咨詢,甚至給大家講課,這對你的知識梳理和能力的提高非常重要,你的自信心會更強!
有興趣,可以建立一個博客或什麼,不斷寫點東西,經常思考和總結
結交廣泛的朋友!
關於入門的教材:
互聯網,其實不用買什麼書網路基本都有;要有好的搜索能力,當然包括搜各種軟體!
SPSS和Clementine軟體的說明和案例,都做一遍;
《數據挖掘——客戶關系管理的藝術》
《調查研究中的統計分析法》
《Excel高級應用與數據分析》
《數據展現的藝術》
Ⅱ 地球科學研究中的超級計算
王群
1 緒論
包括地質、地理、大氣、海洋等眾多學科在內的地球科學,是自然科學中直接面向人類與自然關系的部分。地球科學不僅是認識地球固態、液體和氣態各圈層及其與人類關系的渠道,而且通過找礦勘探、氣象預測、水文、測繪、地震等學科的科技實踐活動,在資源、能源、環境和防災、減災等方面直接為社會經濟服務。
衛星通信技術、網路技術和計算機技術,改變傳統地學研究的模式。遙感、信息技術和各種實時觀測、分析技術的發展,使地球科學進入了覆蓋全球、穿越圈層,亦即地球系統科學的新階段,從局部現象的描述推進到行星范圍的機理探索,獲得了全球性和系統性的信息。
在應用方面,地球科學的作用幾乎無所不在,從採掘業、工業、農業到建設規劃、旅遊和軍事,都是地球科學施展的領域。而且,隨著社會發展而出現的環境惡化和自然災害後果的加重,使得原來主要面向資源的地球科學朝環境和減災防災發展,從而拓寬了地球科學為社會服務的領域。
現代化的探測手段、信息技術的應用,生成了PB/TB級的地質空間數據,需要萬億次以上的超級計算機處理和解釋、存取和利用。另一方面,數字信息和通信環境的發展,也改變了傳統基礎學科研究的手段和方法,一個多學科交叉的研究隊伍是完成大型科學研究和工程實現的重要保證。先進的超級計算機和網格計算技術為基礎交叉學科的研究提供一個多學科共享資源平台。2002年以來,美國、英國、日本、澳大利亞和歐盟都啟動「e-Research」或「e-Science」項目,投資額從1億到10億美元不等,其目的是利用網格技術和中間件技術把全國或區域范圍的大學或研究室的超級計算機連接起來,形成一個虛擬的協同多學科資源共享平台。與此同時,先進發達國家正在建立以地球科學為核心的多學科資源共享平台。
2 超級計算機
正如Moore定律的解釋,計算機的運行速度正快速增加(每18個月增加一倍),製造費用急劇下降,超級計算成本趨於合理,購買一個萬億次計算能力的超級計算機,目前我國大多數大學可以支付得起。根據超級計算機的性能最新統計TOP500 顯示(截至2004年12月),其中358台是2004年最新安裝的,2003年安裝了95台。兩者相加佔世界最快500台計算機的90%以上,如表1所示。加快計算機的速度在技術上已不是難題,關鍵是軟體系統的開發,而這正是我們的薄弱環節。
在基礎學科研究領域,地球科學是應用超級計算機最多的領域。根據TOP500的最新統計(截至2004年12月),如表2所示,在最高性能的500台超級計算機中,地球物理佔了51台,占總數的10%以上。如果加天氣和氣象研究、天氣預報等,地球科學佔用的超級計算機的比例還要大。
表1
表2
目前我國許多大學和研究機構也開展了超級計算體系結構的研究,例如,以Linux操作系統為主的集群式計算機結構體系。這種體系在大型計算機和超級計算機昂貴時,為超級計算任務提供了一個可行的解決方案。但是現在已不能滿足更大規模計算的要求。其主要問題是性能比差,可靠性低,維護困難,擴展性差,安全性差,研究人員在系統的構造上花太多的精力,費用也不一定低。
2003年,美國兩院院士、美國《時代》周刊封面人物陳世卿博士回到中國,在深圳蜆殼星盈公司發明了超級刀片計算機。陳世卿博士亦是世界著名CRAY超級計算機CRAY-MP和Y-MP開發的領導者。
超級刀片計算機的「刀片」設計理念類似於噴氣發動機的渦輪「葉片」。這些「葉片」隨時可以取下來更換,將它們絞合在一起便產生強大的動力。超級刀片計算機充分運用了這種設計理念,深入淺出,化繁為簡,採用全新的技術,對計算節點的升級只需要增加「刀片」不需要重新布線和配置。這種計算機如同發動機上插滿了一個個「刀片」,每個「刀片」就是一個運算單元,理論上可以無限擴充,而且可以在不停機的情況下隨時增加和更換。超級刀片計算機採用了嶄新的設計理念和系統架構,運算速度可超過每秒50萬億次浮點數,達到了美日等先進國家超級計算機的水平。超級刀片計算機具有持久的生命力,安全可靠,合理的價格性能比,實時協同模式等性能。
3 地球科學研究的超級計算問題
地球科學研究的超級計算問題包括:地震數據處理和解釋、遙感信息處理和解釋,大規模地理信息系統,地質空間數據處理和可視化,地球、大氣和海洋等各種自然現象動態模擬,如地震,洪水,沙塵暴等,工程地質結構模擬,材料分子動力學模擬等等。另外,在地球科學的研究中,有許多超級計算涉及多學科,跨學科問題。有些問題是實時的,協同工作流模式。
4 基於高性能網路的超級計算
隨著計算機和信息技術的發展和應用,特別是高速網和相關設備的建設和應用,已經深刻地影響到科學研究的方法,改變了研究的手段,同時,導致了e-Research和e-Science概念的出現。
e-Science是對一個超大規模的、需要全球科學家協同合作的、利用互聯網及相關技術的科學研究基礎設施的定義。這些協同科學研究的一個最典型的特徵是,科學家需要存取海量級的數據集,利用獨特的科學研究設施,消耗大量的科學計算資源,執行高性能的分析、建模和可視化顯示。這種超大規模的研究的另一個重要方面是為科學家和跨學科之間的信息交流,新概念萌發提供了學科交叉的平台。
e-Research是e-Science更一般的定義和概括,它包含了非理科研究的行為和活動。例如e-Research包括人類學和社會學的研究,為了協同工作和知識共享,e-Research也有利用分布式計算資源的特徵。
網格技術(Grid Technologies)在e-Research和e-Science的發展中扮演了一個重要角色。與顧客和企業可以獲取電力供應一樣,網格使研究員和研究機構以某種規定的方式,存取網路上分布的數據倉庫,特殊的科學設備,獲取知識服務,以及共享強大的計算功能。他們可以實現靈活多變的、安全的知識共享,並且在個體研究者、研究機構以及資源動態組合中,協調科學研究問題的求解。這種方式通常也稱為虛擬組織(Virtual Organization)。
計算基礎設施(Cyberinfrastructure)代表了一個由分布式計算機、信息和通信技術組建的、新型的、虛擬科學和工程知識環境。它實現了一個高效,多種形式進行科學研究的平台。
科學家通過對新知識的挖掘、互動式建模、利用模擬和模擬工具、共同協作解決復雜的科學和工程技術問題,這些導致了基礎科學研究設施正在發生變化。復雜的科學和工程技術問題要求我們的新型基礎科學研究設施必須是跨學科的、分布式的、集成共享平台。天文學(Astronomy)、生物學(Biology)、地球科學(Geosciences)、公共衛生(Public Health)和納米材料(Nano-materials)通常都需要實現信息集成、數據分析和安全的知識共享。它們都需要安全地、可操作地、連續地存取物理設備(例如計算機、磁碟陣列、儀表儀器等)、數據和信息(大量的數據集、商業和科學資料庫、信息和軟體庫,視頻和圖像庫)以及特定的專家和學者。
e-Research中間件是具有特定功能的軟體,該軟體為整個計算基礎設施上的應用系統、計算資源、研究機構和個人之間的知識管理、知識共享、任務合作提供標準的通用工具和服務,它是e-Research計算基礎設施的重要組件。
美國、英國、歐洲共同體、日本等都實施了龐大的e-Research計算基礎設施的研究計劃,他們希望計劃可以增加國家長期的經濟繁榮以及發揮基礎設施所提供的知識分布的功力。許多研究計劃已經研發出了重要的中間件,一些項目是國家之間的合作計劃,或交流項目,共同開發跨大洲的通用中間件。
通過國家自然科學基金(NSF)的資助,美國目前正在考慮每年增加投資10億美金建造和開發一個高性能計算基礎設施計劃(Advanced Cyberinfrastructure Program),其中的三分之一(大約3.95億美元)將投到中間件的技術研究以及相應的開發活動中。表3列舉了一些重要的e-Research基礎設施研發計劃以及大約投入到中間件研發經費。
表3
雖然我國在計算基礎設施(Cyberinfrastructure)建設中投入了一定的研究經費,但是報告顯示有效地利用它獲取研究資源的效率是較低的、耗時的,需要較多的人力。用戶迫使使用不可靠的、手工的方法去發現合適的資源;有時需要與資源的擁有者協商;有時需要通過低效、耗時、昂貴的手段利用這些資源;有時甚至需要跨洲飛行。對存取高速網上資源、設備、服務和數據缺乏足夠的認識,導致了我們失去了很多機會。另外,用戶也給系統的安全帶來了許多不確定因數,需要防止非授權人員對資源的入侵。由於標准化、系統支持和維護以及用戶界面的不完善,在支持和維護軟體過程中研究人員需要投入更多的時間和精力。
地球科學需要有一個互信的、協同的、交互的、基於高速網的資源環境,為軟體服務提供支持的中間件可以達到該目的。雖然我國ICT(Information and Computer Technology)研究人員對許多中間件的關鍵技術和服務做了大量的調查研究,但他們大多是學科單一的研究小組和企業,缺乏中心協調和一個特殊應用的驅動。因此,在我國中間件研究項目內部以及與國際中間件研究項目之間,都應該建立更多的協調機制。當前,我國對中間件基礎設施研究的資助基金是有限的、支離破碎的,從而導致了一些項目的重復和低效。
我國需要一個公開中間件研究計劃(Open middleware program),它可以保證這些研究活動的集成和整體協調,可以把現有的傳統中間件擴展和改造成符合國際標準的OMP(Open middleware program)體系結構,並提供特殊應用領域的服務。該中間件研究計劃還將識別和填補我們與國際中間件研究技術的差異,把目前研究項目的軟體更新到可以被e-Research研究機構應用的軟體。
目前的網格服務中間件(身份管理,存取控制,供貨管理,預訂服務,通知服務),當運行在現有的計算基礎設施的時候,是很脆弱的,不可靠的。網格服務組件需要工程化,使組件更魯棒,更可靠。用戶可以完全透明地存取網格共享的設備、計算和數據資源。我們需要擴大網格服務中間件的研究和投資力度,提高它的標准化、魯棒性和可用性。
實施公開中間件計劃重要目的之一是解決和完善OGSA網格服務之間的界面、基於網際網路的應用層中間件、數字圖書館和信息管理服務、知識服務管理等。在過去的幾年裡,全球網格聯盟GGF(Global Grid Forum)開發了網格基礎設施技術要求(Grid infrastructure specifications),例如Globus Toolkit和Open Grid Services Architecture(OGSA)。全球網格聯盟(包括Globus聯盟,HP和IBM)集聚在一起開發符合WSRF(WS-Resource Frame-work)形式的網路服務。這也將使得網格研究機構牽動W3C和OASIS開發的技術和工具,現已吸引到大量的工業界投資。WSRF和相關的技術要求目前還不是一個工業標准,OMP的作用之一跟蹤這些發展,確保它們反映和了解我國e-Research和網格技術的現狀。
現有的中間件的工具和服務應該重新認識,並使它們更加可靠、實用。
現有的中間件的工具和服務應該更具有可操作性、共享性、客戶化,並且能夠與更大的框架集成、與網格環境集成。
為此,需要開發新的中間件工具和服務。在缺乏以下功能的情況更應該考慮開發新的中間件:網格安全,網格管理和組裝,服務適應的質量,工作流引擎,協同工具,多媒體語義索引,智能服務發現,決策支持和假設測定軟體,數據和知識的驗證和校訂,自動表示機制,協同可視化,模擬和模擬以及為應用系統科學家設計的高端網格用戶界面。
在領域特殊的科學數據倉庫中存在大量的異構數據集,例如空間數據、時間數據、圖像、視頻、音頻、3D、光譜、圖形和多媒體等,這些數據應該能存取、共享以及與其他領域的信息資源、數字圖書館(發表的文章和論文)和網站集成。
知識網格層需要加入到現有的計算和數據網格中,這將涉及定義知識管理服務和網格管理之間的界面以及實現知識網格服務和網格環境的集成。
加大研究工作的協調和增加資金的投入可以防止工作的重復,縮小與國際的差距。
5 協同計算中間件
理論上講,中間件處在用戶之間、應用系統之間,或用來解決復雜科學和工程問題的資源之間(見下圖)。中間件提供了一組通用的服務和工具,容許研究人員和應用系統在處理計算、數據倉庫、其他分布資源時,就好像它們是一個超大型的虛擬設施。中間件把一組應用系統需要的核心服務放在一個標準的、無所不在的容器中。這種通用的服務品簡化了應用系統的開發,提供了系統的魯棒性和交互操作性,減少了許多重復的工作,並在各方面提高效率。
計算基礎設施的關鍵組件圖
雖然這里把中間件分為三個服務和工具類型,但是還有一些其他傳統的方法劃分中間件的空間。另外,有些組件(例如,安全、語義、來源等)實際上橫跨在所有三個分類。
網格服務和資源管理中間件:該中間件包括一個公開網格服務設施OGS(Open Grid Services Infrastructure),提供網格數據和計算資源之間的以及使用這些資源高端應用服務之間的存取、通信、安全、認證、記賬和協調服務。計算和數據網格依賴網格服務中間件,因而又稱該層為資源管理中間件(Resource Management Middleware)。
知識管理中間件:該中間件提供了大量的服務和工具,以實現對各種類型的大型數據倉庫和視頻信息存儲倉庫的索引、歸檔、查詢、分析、集成、管理和表示等。這些工具可以實現對多學科的數據集的整合和自動索引,並且實現互動式分析、建模和可視化。工具還可以挖掘、獲取和發布新層次的知識,共享新的注釋。
協同中間件:該中間件提供服務和工具以支持形式和非形式化的,實時和非實時的協同活動,這些活動可能出現在遠程科學家之間、研究機構之間或資源(動態,可擴展的虛擬組織)之間。表4列出了這些中間件的基本功能,它們是該研究項目典型需要集成和需要研發的。
表4
續表
6 結論
地球系統科學的發展在經濟社會可持續發展中佔有重要地位。
地球系統科學的研究需要應用大型科學儀器設備和超大規模計算設施,處理PB、TB級地質空間數據集。
現代地球系統科學研究涉及大量的多學科和交叉學科的問題求解,因此需要一個協同多學科資源共享平台和使用該平台的技術標准和規范。
地球系統科學的研究不應是一個孤立的行為,應與世界聯合共同研究,該資源共享平台可以參與世界e-Research和Geo Grid網格建設中去。
我國地球系統科學基礎研究的超級計算設施較差,特別是大學里,需要加大投入和整合我們的基礎研究資源。
建立以地球科學超級計算和地質空間數據處理為目的的基礎研究平台。
實現地球科學基礎研究為目的的多學科資源共享環境和地學網格計算環境。
開展超級並行計算、分布式協同處理、多學科資源共享的中間件研發以及相關的應用基礎研究。
為參加更大規模的國家乃至世界級科學研究網格計算(e-Research Grid R&D)奠定基礎。
參考文獻
汪品先,趙鵬大,丑紀范,李德仁,殷鴻福.2003.從落實可持續發展戰略看中國地球科學教育的未來.教育部科學技術委員會專家建議,第11期(總第25期)
龔建華,林琿.2001.虛擬地理環境——在線虛擬現實的地理學透視.當代科學前沿論叢.北京:高等教育出版社
江斌,黃波,陸鋒.2002.GIS環境下的空間分析和地學視覺化.當代科學前沿論叢.北京:高等教育出版社
鄔建國.2000.景觀生態學——格局、過程、尺度與等級.當代科學前沿論叢.北京:高等教育出版社
浦端良,宮鵬.2000.高光譜遙感及其應用.當代科學前沿論叢.北京:高等教育出版社
張有學,尹安.2002.地球的結構、演化和動力學.當代科學前沿論叢.北京:高等教育出版社
陳長勝.2003.海洋生態系統動力學與模型.當代科學前沿論叢.北京:高等教育出版社
L.Foster,C.Kesselman.2005.網格計算(英文版).北京:機械工業出版社
A.Grama,A.Gupta,G.Karypis and V.Kumar(張武等譯).2005.並行計算導論.北京:機械工業出版社
J.Duato,S.Yalamanchili and L.Ni(張民選等譯).2004.並行計算機互聯網路技術——一種工程方法.北京:電子工業出版社
G.Tel(霍紅衛譯).2004.分布式演算法導論.北京:機械工業出版社
W.Stallings(齊望東等譯).2003.高速網路與互聯網——性能與服務質量.北京:電子工業出版社
R.Buyya(鄭緯民等譯).2001.高性能集群計算——結構與系統.北京:電子工業出版社
R.Buyya(鄭緯民等譯).2001.高性能集群計算——編程與應用.北京:電子工業出版社
Ⅲ 胡凱教授的《分布式計算系統導論》怎麼樣
國家級「十一五」規劃權威教材,獲北航2016年教材一等獎,已被十餘所重點大學教材採用
Ⅳ 大數據時代 無處不在的演算法應用
大數據時代 無處不在的演算法應用
能不能講講演算法在工作中的運用?你個人學習演算法的過程是怎樣的?我對演算法還是有點怕。除此之外,你認為大學是應該多花時間學應用技術還是理論知識呢?
今天就來聊聊我自己學習演算法的過程,以及演算法在實際工作中的應用。
以前,我們認為大數據總是優於好演算法。也就是說,只要數據量足夠大,即使演算法沒有那麼好,也會產生好的結果。
前一陣子「極客時間」 App 發布了一條極客新聞:「演算法比數據更重要,AlphaGo Zero 完勝舊版。」新聞的內容是谷歌人工智慧團隊 DeepMind 發布了新版的 AlphaGo 計算機程序,名為 AlphaGo Zero。這款軟體能夠從空白狀態開始,不需要人類輸入任何命令,便可以迅速自學圍棋,並以 100 比 0 的戰績擊敗了上一代 AlphaGo。
AlphaGo Zero 最大的突破在於實現了「白板理論」。白板理論認為:嬰兒是一塊白板,可以通過後天學習和訓練來提高智力。AI 的先驅圖靈認為,只要能用機器製造一個類似於小孩的 AI,然後加以訓練,就能得到一個近似成人智力,甚至超越人類智力的 AI。
自學成才的 AlphaGo Zero 正是實現了這一理論。AlphaGo 的首席研究員大衛·席爾瓦(David Silver)認為,從 AlphaGo Zero 中可以發現,演算法比所謂的計算或數據量更為重要。事實上,AlphaGo Zero 使用的計算要比過去的版本少一個數量級,但是因為使用了更多原理和演算法,它的性能反而更加強大。
由此可見,在大數據時代,演算法的重要性日漸明晰。一個合格的程序員,必須掌握演算法。
我不知道大家是怎樣一步步開始精通演算法和數據結構的。大二時,我第一次接觸到了《數據結構》,因為從來沒有過這方面的思維訓練,當時的我學習這門課比較費力。那時候接觸到的編程比較少,所以並沒有很多實際經驗讓我欣賞和體味:一個好的數據結構和演算法設計到底 「美」 在哪裡。
開始學習的時候,我甚至有點死記硬背的感覺,我並不知道 「如果不這樣設計」,實際上會出現哪些問題。各種時間和空間復雜度對我而言,也僅僅是一些不能融入到實際問題的數學游戲。至於「每種最壞情況、平均情況的時間空間復雜度與各種排序」,這些內容為什麼那麼重要,當時我想,可能因為考試會考吧。
沒想到後來的時日,我又與演算法重新結緣。可能是因為萊斯大學給的獎學金太高了,所以每個研究生需要無償當五個學期的助教 。好巧不巧,我又被演算法老師兩次挑中當助教。所以,在命運強制下,一本《演算法導論》就這樣被我前前後後仔細學習了不下四遍。這樣的結果是,我基本做過整本書的習題,有些還不止做了一遍。我學習演算法的過程,就是反復閱讀《演算法導論》的過程。
那麼,學習演算法到底有什麼用處呢?
首先,演算法是面試的敲門磚國內的情況我不太清楚,但就矽谷的 IT 公司而言,不但電話面試偏演算法,現場面試至少有兩輪都是考演算法和編程的。
大一些老一些的公司,像谷歌、Facebook、領英、Dropbox 等,都是直接在白板上寫程序。小一些新一些的公司,如 Square、Airbnb 等,都是需要現場上機寫出可運行的程序。Twitter、Uber 等公司則是白板上機兼備,視情況而定。
雖說還有其它考系統設計等部分,但如果演算法沒有打好基礎,第一關就很難過,而且演算法要熟悉到能夠現場短時間內寫出正解,所以很多人准備面試前都需要刷題。
有一次我當面試官,電話面試另外一個人,當時是用 Codepad 共享的方式,讓對方寫一個可運行的正則表達式解析器。45 分鍾過去了,對方並沒有寫出來。我就例行公事地問:「你還有什麼問題想問或者想了解么?」 對方估計因為寫不出程序很有挫敗感,就反問:「你們平時工作難道就是天天寫正則表達式的解析器么?」
一瞬間,我竟無言以對。想了想,我回復說:「不用天天寫。那我再給你 15 分鍾,你證明給我看你還會什麼,或者有什麼理由讓我給你進一步面試的機會?」 對方想了一會,默默掛掉了電話。
老實說,我對目前面試中偏重演算法的程度是持保留意見的。演算法題答得好,並不能說明你有多牛。牛人也有因為不願刷題而馬失前蹄的時候。但是除了演算法測試,顯然也沒有更好的方法佐證候選人的實力;然而怎樣才能最優化面試流程,這也是個討論起來沒完的話題,並且每次討論必定無果而終。
其次,編程時用到的更多是演算法思想,而不是寫具體的演算法說到實際工作中真正需要使用演算法的機會,讓我想一想 —— 這個范圍應該在 10% 的附近遊走。
有些朋友在工作中遇到演算法場景多些,有的少些。更多的時候,是對業務邏輯的理解,對程序語言各種特性的熟練使用,對代碼風格和模式的把握,各種同步非同步的處理,包括代碼測試、系統部署是否正規化等等。需要設計甚至實現一個演算法的機會確實很少,即使用到,現學可能都來得及。
但是熟悉基本演算法的好處在於:如果工作需要讀的一段代碼中包含一些基本演算法思想,你會比不懂演算法的人理解代碼含義更快。讀到一段爛代碼,你知道為什麼爛,爛在哪,怎麼去優化。
當真的需要在程序中設計演算法的時候,熟悉演算法的你會給出一個更為完備的方案,對程序中出現的演算法或比較復雜的時間復雜度問題你會更有敏感性。熟悉演算法你還可以成為一個更優秀的面試官,可以和別的工程師聊天時候不被鄙視。
最後,不精通演算法的工程師永遠不是好工程師當然,除了演算法導論中那些已成為經典的基本演算法以及演算法思想(Divide-and-conquer,Dynamic programming)等,其實我們每天接觸到的各種技術中,演算法無處不在。
就拿人人都會接觸的存儲為例吧,各種不同的資料庫或者鍵值存儲的實現,就會涉及各種分片(Sharding)演算法、緩存失敗(Cache Invalidation)演算法、 鎖定(Locking)演算法,包括各種容錯演算法(多復制的同步演算法)。 雖然說平時不太會去寫這些演算法 —— 除非你恰恰是做資料庫實現的 —— 但是真正做到了解這項技術的演算法細節和實現細節,無論對於技術選型還是對自己程序的整體性能評估都是至關重要的。
舉個例子,當你在系統里需要一個鍵值存儲方案的時候,面對可供選擇的各種備選方案,到底應該選擇哪一種呢?
永遠沒有一種方案在所有方面都是最佳的。就拿 Facebook 開源的 RocksDB 來說吧。了解它歷史的人都知道,RocksDB 是構建在 LevelDB 之上的,可以在多 CPU 伺服器上高效運行的一種鍵值存儲。而 LevelDB 又是基於谷歌的 BigTable 資料庫系統概念設計的。
早在 2004 年,谷歌開始開發 BigTable,其代碼大量的依賴谷歌內部的代碼庫,雖然 BigTable 很牛,卻因此無法開源。2011 年,谷歌的傑夫·迪恩和桑傑·格瑪沃爾特開始基於 BigTable 的思想,重新開發一個開源的類似系統,並保證做到不用任何谷歌的代碼庫,於是就有了 LevelDB。這樣一個鍵值存儲的實現也用在了谷歌瀏覽器的 IndexedDB 中,對於谷歌瀏覽器的開源也提供了一定的支持。
我曾經在文章中提到過 CockroachDB,其實又可以看作是基於 RocksDB 之上的一個分布式實現。從另一個層面上講,CockroachDB 又可以說是 Spanner 的一個開源實現。知道這些,就知道這些資料庫或鍵值存儲其實都同出一系。再來看看 LevelDB 底層的 SSTable 演算法,就知道他們都是針對高吞吐量(high throughput),順序讀 / 寫工作負載(sequential read/write workloads)有效的存儲系統。
當然,一個系統里除了最基本的演算法,很多的實現細節和系統架構都會對性能及應用有很大的影響。然而,對演算法本身的理解和把握,永遠是深入了解系統不可或缺的一環。
類似的例子還有很多,比如日誌分析、打車軟體的調度演算法。
拿我比較熟悉的支付領域來說吧,比如信用卡 BIN 參數的壓縮,從服務端到移動 App 的數據傳輸,為了讓傳輸數據足夠小,需要對數據進行壓縮編碼。
每個國家,比如中國、韓國、墨西哥信用卡前綴格式都不一樣,如何盡量壓縮同時又不會太復雜,以至於影響移動 App 端的代碼復雜度,甚至形成 Bug 等,也需要對各種相關演算法有詳盡地了解,才有可能做出最優的方案。
關於演算法我們來總結一下:
在大數據時代,數據和演算法都同等重要,甚至演算法比計算能力或數據量更為重要。
如何學習演算法呢?讀經典著作、做題,然後在實踐中閱讀和使用演算法。
演算法是面試的敲門磚,可以幫助你得到一份自己喜歡的工作。
寫程序中用到的更多是演算法思想,不是寫具體的演算法。
不精通演算法的工程師永遠不會是一個優秀的工程師,只有對各種相關演算法有詳盡理解,才有可能做出最優的方案。
Ⅳ 大學本科計算機專業課程有哪些(軟體開發)
1. 計算機底層
這實際上就是兵哥哥說的《計算機組成原理》,我推薦的書是《深入理解計算機系統》,1000%的會比你的課本給你更多的東西。不管是寫程序做軟體還是搞科研發論文,不對底層有一個清晰的認識,你的整個前進道路都是模糊不清的。而只對體系結構的了解是遠遠不夠的,深挖才是歸途,為什麼現在很多解析內存CPU技術的博文博客火呢?因為大家都忽略啊!又因為大家都知道這是多麼有用啊!不做底層的分析,你怎麼去精準的定位問題呢?怎麼去寫出切合真實計算邏輯的簡單而又高效的優秀代碼呢?別鬧了。我同意一個觀點——讀優秀的代碼,從OS開始。讀這些就是你學習認知底層的過程,就是在站在巨人肩膀上遠眺的歷程。
2. 數學
過硬的數學功底使得你能看到一些新技術的出現而不茫然,看到的舊的技術能快速的跟進上手。這就是所謂「知識」和「技能」的關系,將工具運用到純熟的地步,你會發現別人遇到的很多問題在你這里都不是問題了,看起論文來也得心應手啦,這就是潛移默化和下意識的作用。
3. C/C++
排在第三位是因為我覺得不是極其重要了。當然,c語言是基本功我就不在贅述。
一門語言對你的作用是認識到計算機的「思考方式」與人類的不同,想要更加精確簡單(KISS原則)的實現自己的想法,就要按照這個邏輯思路去執行。而選擇C語言是因為它是成熟的,是最為值得探究的語言,也是你今後可能進入Unix,Linux,嵌入式,甚至於IOS方向的基石。
4. 演算法設計
依託數學的知識,在演算法上的成績應該不會太次。《演算法導論》是要看的沒錯。如果時間少的話,《編程珠璣》《編程之美》《APUE》,這些書是要接觸的。
5. 英語/(日語)
不得不承認美帝和倭寇就是比我們先進。
學習英語的好處不言而喻,打破這層壁壘就會讓你感受到真正的世界的樣子,去那些純英文的編程網站,BBS,討論組,個人博客,增長見識的同時是你在逐步的認清這個世界,知道外面的人在做什麼在想什麼,現如今的潮流是什麼(為什麼不提媒體我覺得你應該懂得),更進一步你未來的發展方向是什麼,是否和大環境有沖突,這是你這一生究竟能達到多大成就的一個很重要的潛在因素,也是為你今後走出校園做一些非常必要的知識儲備和心理預備役。
日語的問題,是在英語之後的一個可選項,IT方面的日企非常多,待遇也非常好,我們懷抱著「師夷長技」的心態去學習就好了。
Ⅵ 編程入門
想快速開發一些小軟體.可以學vb.net
還有delphi
RAD開發的兩種.
然後再是
c#.java.c++.
這幾種是現在比較流行的!!
計算機語言的種類非常的多,總的來說可以分成機器語言,匯編語言,高級語言三大類。
學習編程,從何入手
如果您想學習編程,卻又不知從何入手,那麼您不妨看看下面的幾種學習方案,可能會給您一些啟示吧!
==============================================
方案一 Basic語言 & Visual Basic
優點
(1)Basic 簡單易學,很容易上手。
(2)Visual Basic 提供了強大的可視化編程能力,可以讓你輕松地做出漂亮的程序。
(3)眾多的控制項讓編程變得象壘積木一樣簡單。
(4)Visual Basic 的全部漢化讓我們這些見了English就頭大的人喜不自禁。
缺點
(1)Visual Basic 不是真正的面向對象的開發文具。
(2)Visual Basic 的數據類型太少,而且不支持指針,這使得它的表達能力很有限。
(3)Visual Basic 不是真正的編譯型語言,它產生的最終代碼不是可執行的,是一種偽代碼。它需要一個動態鏈接庫去解釋執行,這使得Visual Basic 的編譯速度大大變慢。
綜述:方案一適合初涉編程的朋友,它對學習者的要求不高,幾乎每個人都可以在一個比較短的時間里學會vB編程,並用VB 做出自己的作品。對於那些把編程當做游戲的朋友來說,VB 是您最佳的選擇。
Basic/Visual Basic簡介
==============================================
方案二 Pascal語言 & Delphi
優點
(1)Pascal語言結構嚴謹,可以很好地培養一個人的編程思想。
(2)Delphi是一門真正的面向對象的開發工具,並且是完全的可視化。
(3)Delphi使用了真編譯,可以讓你的代碼編譯成為可執行的文件,而且編譯速度非常快。
(4)Delphi具有強大的資料庫開發能力,可以讓你輕松地開發資料庫。
缺點
Delphi幾乎可以說是完美的,只是Pascal語言的過於嚴謹讓人感覺有點煩。
綜述: 方案二比較適合那些具有一定編程基礎並且學過Pascal語言的朋友。
Pascal語言簡介
Delphi簡介
==============================================
方案三 C語言 & Visual C++
優點
(1)C語言靈活性好,效率高,可以接觸到軟體開發比較底層的東西。
(2)微軟的MFC庫博大精深,學會它可以讓隨心所欲地進行編程。
(3)VC是微軟製作的產品,與操作系統的結合更加緊密。
缺點
對使用者的要求比較高,既要具備豐富的C語言編程經驗,又要具有一定的WINDOWS編程基礎,它的過於專業使得一般的編程愛好者學習起來會有不小的困難。
綜述: VC是程序員用的東西。如果你是一個永不滿足的人,而且可以在編程上投入很大的精力和時間,那麼學習VC你一定不會後悔的。
==============================================
方案四 C++語言 & C++ Builder
優點
(1)C++語言的優點全部得以繼承。
(2)完全的可是化。
(3)極強的兼容性,支持OWL、VCL和MFC三大類庫。
(4)編譯速度非常快。
缺點
由於推出的時間太短,關於它的各種資料還不太多。
綜述:我認為C++ Builder 是最好的編程工具。它既保持了C++語言編程的優點,又做到了完全的可視化。
==============================================
方案五 SQL語言 & Power Builder
對於一些傳統的數據開發人員來說,Foxpro系列也許讓他們感到更加熟悉。但是對於初學者來說,PowerBuilder也許是最好的資料庫開發工具。各種各樣的控制項,功能強大的PowerBuilder語言都會幫助你開發出自己的資料庫應用程序。
[NextPage]
JSP簡介
在Sun正式發布JSP(Java Server Pages)之後,這種新的Web應用開發技術很快引起了人們的關注。JSP為創建高度動態的Web應用提供了一個獨特的開發環境。按照 Sun 的說法,JSP能夠適應市場上包括Apache WebServer 、IIS4.0在內的85%的伺服器產品。
JSP與ASP的簡單比較
JSP與Microsoft的ASP技術非常相似。兩者都提供在HTML代碼中混合某種程序代碼、由語言引擎解釋執行程序代碼的能力。在ASP或JSP環境下,HTML代碼主要負責描述信息的顯示樣式,而程序代碼則用來描述處理邏輯。普通的HTML頁面只依賴於Web伺服器,而ASP和JSP頁面需要附加的語言引擎分析和執行程序代碼。程序代碼的執行結果被重新嵌入到HTML代碼中,然後一起發送給瀏覽器。ASP和JSP都是面向Web伺服器的技術,客戶端瀏覽器不需要任何附加的軟體支持。
ASP的編程語言是VBScript之類的腳本語言,JSP使用的是Java,這是兩者最明顯的區別。
此外,ASP與JSP還有一個更為本質的區別:兩種語言引擎用完全不同的方式處理頁面中嵌入的程序代碼。在ASP下,VBScript代碼被ASP引擎解釋執行;在JSP下,代碼被編譯成Servlet並由Java虛擬機執行,這種編譯操作僅在對JSP頁面的第一次請求時發生。
運行環境
執行 JSP 代碼需要在伺服器上安裝 JSP 引擎。此處我們使用的是 Sun 的 JavaServer Web Development Kit ( JSWDK )。為便於學習,這個軟體包提供了大量可供修改的示例。安裝 JSWDK 之後,只需執行 startserver 命令即可啟動伺服器。在默認配置下伺服器在埠 8080 監聽,使用 http://localhost:8080 即可打開預設頁面。
在運行 JSP 示例頁面之前,請注意一下安裝 JSWDK 的目錄,特別是" work "子目錄下的內容。執行示例頁面時,可以在這里看到 JSP 頁面如何被轉換成 Java 源文件,然後又被編譯成 class 文件(即 Servlet )。 JSWDK 軟體包中的示例頁面分為兩類,它們或者是 JSP 文件,或者是包含一個表單的 HTML 文件,這些表單均由 JSP 代碼處理。與 ASP 一樣, JSP 中的 Java 代碼均在伺服器端執行。因此,在瀏覽器中使用"查看源文件"菜單是無法看到 JSP 源代碼的,只能看到結果 HTML 代碼。所有示例的源代碼均通過一個單獨的" examples "頁面提供。
Java Servlet是一種開發Web應用的理想構架。 JSP以Servlet技術為基礎,又在許多方面作了改進。JSP頁面看起來象普通HTML頁面,但它允許嵌入執行代碼,在這一點上,它和ASP技術非常相似。利用跨平台運行的JavaBean 組件,JSP為分離處理邏輯與顯示樣式提供了卓越的解決方案。JSP必將成為ASP技術的有力競爭者。
[NextPage]
SQL語言簡介
SQL全稱是「結構化查詢語言(Structured Query Language)」,最早的是IBM的聖約瑟研究實驗室為其關系資料庫管理系統SYSTEM R開發的一種查詢語言,它的前身是SQUARE語言。SQL語言結構簡潔,功能強大,簡單易學,所以自從IBM公司1981年推出以來,SQL語言,得到了廣泛的應用。如今無論是像Oracle ,Sybase,Informix,SQL server這些大型的資料庫管理系統,還是像Visual Foxporo,PowerBuilder這些微機上常用的資料庫開發系統,都支持SQL語言作為查詢語言。
Structured Query Language包含4個部分:
數據查詢語言DQL-Data Query Language SELECT
數據操縱語言DQL-Data Manipulation Language INSERT, UPDATE, DELETE
數據定義語言DQL-Data Definition Language CREATE, ALTER, DROP
數據控制語言DQL-Data Control Language COMMIT WORK, ROLLBACK WORK
SQL的優點
SQL廣泛地被採用正說明了它的優點。它使全部用戶,包括應用程序員、DBA管理員和終端用戶受益非淺。
(1) 非過程化語言
SQL是一個非過程化的語言,因為它一次處理一個記錄,對數據提供自動導航。SQL允許用戶在高層的數據結構上工作,而不對單個記錄進行操作,可操作記錄集。所有SQL 語句接受集合作為輸入,返回集合作為輸出。SQL的集合特性允許一條SQL語句的結果作為另一條SQL語句的輸入。 SQL不要求用戶指定對數據的存放方法。 這種特性使用戶更易集中精力於要得到的結果。所有SQL語句使用查詢優化器,它是RDBMS的一部分,由它決定對指定數據存取的最快速度的手段。查詢優化器知道存在什麼索引,哪兒使用合適,而用戶從不需要知道表是否有索引,表有什麼類型的索引。
(2) 統一的語言
SQL可用於所有用戶的DB活動模型,包括系統管理員、資料庫管理員、 應用程序員、決策支持系統人員及許多其它類型的終端用戶。基本的SQL 命令只需很少時間就能學會,最高級的命令在幾天內便可掌握。 SQL為許多任務提供了命令,包括:
● 查詢數據
● 在表中插入、修改和刪除記錄
● 建立、修改和刪除數據對象
● 控制對數據和數據對象的存取
● 保證資料庫一致性和完整性
以前的資料庫管理系統為上述各類操作提供單獨的語言,而SQL 將全部任務統一在一種語言中。
(3) 是所有關系資料庫的公共語言
由於所有主要的關系資料庫管理系統都支持SQL語言,用戶可將使用SQL的技能從一個RDBMS轉到另一個。所有用SQL編寫的程序都是可以移植的。
[NextPage]
Java語言簡介
一. Java的由來
當1995年SUN推出Java語言之後,全世界的目光都被這個神奇的語言所吸引。那麼Java到底有何神奇之處呢?
Java語言其實最是誕生於1991年,起初被稱為OAK語言,是SUN公司為一些消費性電子產品而設計的一個通用環境。他們最初的目的只是為了開發一種獨立於平台的軟體技術,而且在網路出現之前,OAK可以說是默默無聞,甚至差點夭折。但是,網路的出現改變了OAK的命運。
在Java出現以前。Internet上的信息內容都是一些乏味死板的HTML文檔。這對於那些迷戀於WEB瀏覽的人們來說簡直不可容忍。他們迫切希望能在WEN中看到一些互動式的內容,開發人員也極希望能夠在WEB上創建一類無需考慮軟硬體平台就可以執行的應用程序,當然這些程序還要有極大的安全保障。對於用戶的這種要求,傳統的編程語言顯得無能為力,面SUN的工程師敏銳地察覺到了這一點,從1994年起,他們開始將OAK技術應用於WEB上,並且開發出了HotJava的第一個版本。當SUN公司1995年正式以Java這個名字推出的時候,幾乎所有的WEB開發人員都想到:噢,這正是我想要的。於是Java成了一顆耀眼的明星,丑小鴨一下了變成了白天鵝。
二. Java的定義
Java是一種簡單的,面象對象的,分布式的,解釋的,鍵壯的安全的,結構的中立的,可移植的,性能很優異的多線程的,動態的語言。
Java的開發環境有不同的版本,如sun公司的Java Developers Kit, 簡稱 JDK。後來微軟公司推出了支持Java規范的Microsoft Visual J++ Java開發環境,簡稱 VJ++。
三. Java的特點
1. 平台無關性
平台無關性是指Java能運行於不同的平台。Java引進虛擬機 原理,並運行於虛擬機,實現不同平台的Java介面之間。使 用Java編寫的程序能在世界范圍內共享。Java的數據類型與 機器無關,Java虛擬機(Java Virtual Machine)是建立在 硬體和操作系統之上,實現Java二進制代碼的解釋執行功能, 提供於不同平台的介面的。
2. 安全性
Java的編程類似C++,學習過C++的讀者將很快掌握Java的精 髓。Java舍棄了C++的指針對存儲器地址的直接操作,程序 運行時,內存由操作系統分配,這樣可以避免病毒通過指 針侵入系統。Java對程序提供了安全管理器,防止程序的 非法訪問。
3. 面向對象
Java 吸取了C++面向對象的概念,將數據封裝於類中,利用類 的優點,實現了程序的簡潔性和便於維護性。類的封裝性、 繼承性等有關對象的特性,使程序代碼只需一次編譯,然後 通過上述特性反復利用。程序員只需把主要精力用在類和接 口的設計和應用上。Java 提供了眾多的一般對象的類,通 過繼承即可使用父類的方法。在 Java 中,類的繼承關系是單一的非多重的,一個子類 只有一個父類,子類的父類又有一個父類。Java 提供的 Object 類及其子類的繼承關系如同一棵倒立的樹形,根類 為 Object 類, Object 類功能強大,經常會使用到它及其 它派生的子類。
4. 分布式
Java建立在擴展TCP/IP網路平台上。庫函數提供了用HTTP和FTP協議傳送和接受信息的方法。這使得程序員使用網路上的文件和使用本機文件一樣容易。
5. 鍵壯性
Java致力於檢查程序在編譯和運行時的錯誤。類型檢查幫助檢查出許多開發早期出現的錯誤。Java自已操縱內存減少了內存出錯的可能性。Java還實現了真數組,避免了覆蓋數據的可能。這些功能特徵大大提高了開發Java應用程序的周期。Java提供: Null指針檢測、 數組邊界檢測、 異常出口、 Byte code校驗。
[NextPage]
PowerBuilder簡介
PowerBuilder的產生
PowerBuilder是美國著名的資料庫應用開發工具生產廠商PowerSoft推出的成功產品,其第一版於1991年6月正式投入市場。它是完全按照客戶/伺服器體系結構研製設計的,採用面向對象技術,圖形化的應用開發環境,是資料庫的前端開發工具。
PowerBuilder的特點
它支持應用系統同時訪問多種資料庫,其中既包括Oracel,Sybase之類的大型資料庫,又包括FOXPRO之類支持ODBC介面的小型資料庫,PowerBuilder是完全可視化的資料庫開發工具,它提供了大量的控制項,大大加快了項目的開發速度,也使開發者更容易掌握資料庫的開發。
它使用的編程語言叫做工PowerScripr,它也是一種高級的,結構化的編程語言。PowerScript提供了一套完整的嵌入式SQL語句,開發人員可以像使用其它語句一樣自由地使用SQL語言,這樣就大大增強了程序操縱和訪問資料庫的能力。可以說PowerBuilder既適合初學者快速學習資料庫的開發,又可以讓有經驗的開發人員開發出功能強大的資料庫,是一種適用面非常廣的開發工具。
PowerBuilder是一個用來進行客戶/伺服器開發的完全的可視化開發環境。使用PowerBuilder,你可以用一種可視的直觀的方式來創建應用程序的用戶界面和資料庫介面。這是一個總的概念,實際上是開發人員使用PowerBuilder去開發應用程序,由於所開發的各種應用程序充分利用了圖形用戶介面(GUI)的優點,所以PowerBuilder被認為是一個圖形工具。
在客戶/伺服器結構的應用中,PowerBuilder具有描述多個資料庫連接與檢索的能力。特別是PowerBuilder能從大多數流行的RDBMS中存取數據,且不管數據存放在什麽地方;另外,各種應用程序又可以獨立於RDBMS,因為PowerBuilder可以使用資料庫的標准操作語言SQL(結構化查詢語言)進行。
使用PowerBuilder,可以很容易地開發出功能強大的圖形界面的訪問伺服器資料庫的應用程序,PowerBuilder提供了建立符合工業標準的應用程序(例如訂單登記、會計及製造系統)所需的所有工具。
PowerBuilder應用程序由窗口組成,這些窗口包含用戶與之交互的控制項。開發人員可以使用所有標准空間(如按鈕、復選框、下拉式列表框或編輯框)以及PowerBuilder提供的特殊的使應用程序更易於開發和使用的控制項。
通常人們把PowerBuilder看成是一種開發工具,實際上它比其他工具強得多,是一種強有力的開發環境。開發人員不僅能用它來開發用戶容易使用的各種應用程序還可以通過PowerBuilder修改資料庫,利用400多個內部定義函數,可以開發能和其他應用程序進行的各種應用程序。
PowerBuilder正在成為客戶/伺服器應用開發的標准。相對於其他任何客戶/伺服器開發環境,PowerBuilder使開發人員的工作更快、成本更低、質量更高、功能更強。
PowerBuilder為應用開發提供了全面綜合性的支持,可以分別概括為如下幾點:
事件驅動的應用程序
功能強大的編程語言與函數
面向對象的編程
跨平台開發
開放的資料庫連結系統
PowerBuilder開發環境
PowerBuilder開發環境由一系列集成的圖形畫板(Painter)組成,應用開發人員通過簡單的滑鼠操作即可設計、建立、交互檢驗和測試客戶/伺服器應用程序。
Ⅶ 計算機專業學演算法的都學些什麼演算法,有什麼書可以看的學的話需要些什麼基礎的
計算機演算法非常多的
A*搜尋演算法
俗稱A星演算法。這是一種在圖形平面上,有多個節點的路徑,求出最低通過成本的演算法。常用於游戲中的NPC的移動計算,或線上游戲的BOT的移動計算上。該演算法像Dijkstra演算法一樣,可以找到一條最短路徑;也像BFS一樣,進行啟發式的搜索。
Beam Search
束搜索(beam search)方法是解決優化問題的一種啟發式方法,它是在分枝定界方法基礎上發展起來的,它使用啟發式方法估計k個最好的路徑,僅從這k個路徑出發向下搜索,即每一層只有滿意的結點會被保留,其它的結點則被永久拋棄,從而比分枝定界法能大大節省運行時間。束搜索於20 世紀70年代中期首先被應用於人工智慧領域,1976 年Lowerre在其稱為HARPY的語音識別系統中第一次使用了束搜索方法。他的目標是並行地搜索幾個潛在的最優決策路徑以減少回溯,並快速地獲得一個解。
二分取中查找演算法
一種在有序數組中查找某一特定元素的搜索演算法。搜索過程從數組的中間元素開始,如果中間元素正好是要查找的元素,則搜索過程結束;如果某一特定元素大於或者小於中間元素,則在數組大於或小於中間元素的那一半中查找,而且跟開始一樣從中間元素開始比較。這種搜索演算法每一次比較都使搜索范圍縮小一半。
Branch and bound
分支定界(branch and bound)演算法是一種在問題的解空間樹上搜索問題的解的方法。但與回溯演算法不同,分支定界演算法採用廣度優先或最小耗費優先的方法搜索解空間樹,並且,在分支定界演算法中,每一個活結點只有一次機會成為擴展結點。
數據壓縮
數據壓縮是通過減少計算機中所存儲數據或者通信傳播中數據的冗餘度,達到增大數據密度,最終使數據的存儲空間減少的技術。數據壓縮在文件存儲和分布式系統領域有著十分廣泛的應用。數據壓縮也代表著尺寸媒介容量的增大和網路帶寬的擴展。
Diffie–Hellman密鑰協商
Diffie–Hellman key exchange,簡稱「D–H」,是一種安全協議。它可以讓雙方在完全沒有對方任何預先信息的條件下通過不安全信道建立起一個密鑰。這個密鑰可以在後續的通訊中作為對稱密鑰來加密通訊內容。
Dijkstra』s 演算法
迪科斯徹演算法(Dijkstra)是由荷蘭計算機科學家艾茲格·迪科斯徹(Edsger Wybe Dijkstra)發明的。演算法解決的是有向圖中單個源點到其他頂點的最短路徑問題。舉例來說,如果圖中的頂點表示城市,而邊上的權重表示著城市間開車行經的距離,迪科斯徹演算法可以用來找到兩個城市之間的最短路徑。
動態規劃
動態規劃是一種在數學和計算機科學中使用的,用於求解包含重疊子問題的最優化問題的方法。其基本思想是,將原問題分解為相似的子問題,在求解的過程中通過子問題的解求出原問題的解。動態規劃的思想是多種演算法的基礎,被廣泛應用於計算機科學和工程領域。比較著名的應用實例有:求解最短路徑問題,背包問題,項目管理,網路流優化等。這里也有一篇文章說得比較詳細。
歐幾里得演算法
在數學中,輾轉相除法,又稱歐幾里得演算法,是求最大公約數的演算法。輾轉相除法首次出現於歐幾里得的《幾何原本》(第VII卷,命題i和ii)中,而在中國則可以追溯至東漢出現的《九章算術》。
最大期望(EM)演算法
在統計計算中,最大期望(EM)演算法是在概率(probabilistic)模型中尋找參數最大似然估計的演算法,其中概率模型依賴於無法觀測的隱藏變數(Latent Variable)。最大期望經常用在機器學習和計算機視覺的數據聚類(Data Clustering)領域。最大期望演算法經過兩個步驟交替進行計算,第一步是計算期望(E),利用對隱藏變數的現有估計值,計算其最大似然估計值;第二步是最大化(M),最大化在 E 步上求得的最大似然值來計算參數的值。M 步上找到的參數估計值被用於下一個 E 步計算中,這個過程不斷交替進行。
快速傅里葉變換(FFT)
快速傅里葉變換(Fast Fourier Transform,FFT),是離散傅里葉變換的快速演算法,也可用於計算離散傅里葉變換的逆變換。快速傅里葉變換有廣泛的應用,如數字信號處理、計算大整數乘法、求解偏微分方程等等。
哈希函數
HashFunction是一種從任何一種數據中創建小的數字「指紋」的方法。該函數將數據打亂混合,重新創建一個叫做散列值的指紋。散列值通常用來代表一個短的隨機字母和數字組成的字元串。好的散列函數在輸入域中很少出現散列沖突。在散列表和數據處理中,不抑制沖突來區別數據,會使得資料庫記錄更難找到。
堆排序
Heapsort是指利用堆積樹(堆)這種數據結構所設計的一種排序演算法。堆積樹是一個近似完全二叉樹的結構,並同時滿足堆積屬性:即子結點的鍵值或索引總是小於(或者大於)它的父結點。
歸並排序
Merge sort是建立在歸並操作上的一種有效的排序演算法。該演算法是採用分治法(Divide and Conquer)的一個非常典型的應用。
RANSAC 演算法
RANSAC 是」RANdom SAmpleConsensus」的縮寫。該演算法是用於從一組觀測數據中估計數學模型參數的迭代方法,由Fischler and Bolles在1981提出,它是一種非確定性演算法,因為它只能以一定的概率得到合理的結果,隨著迭代次數的增加,這種概率是增加的。該演算法的基本假設是觀測數據集中存在」inliers」(那些對模型參數估計起到支持作用的點)和」outliers」(不符合模型的點),並且這組觀測數據受到雜訊影響。RANSAC 假設給定一組」inliers」數據就能夠得到最優的符合這組點的模型。
RSA加密演演算法
這是一個公鑰加密演算法,也是世界上第一個適合用來做簽名的演算法。今天的RSA已經專利失效,其被廣泛地用於電子商務加密,大家都相信,只要密鑰足夠長,這個演算法就會是安全的。
並查集Union-find
並查集是一種樹型的數據結構,用於處理一些不相交集合(Disjoint Sets)的合並及查詢問題。常常在使用中以森林來表示。
Viterbi algorithm
尋找最可能的隱藏狀態序列(Finding most probable sequence of hidden states)。
Ⅷ 分布式演算法導論的內容簡介
本書詳細介紹了分布式演算法及其理論,結合大量定理、引理、命題等的證明,討論了點到點消息傳遞模型上的演算法、計算機通信網路中實現的演算法,重點是分布式應用的控制演算法(如波動演算法、廣播演算法、選舉演算法、同步系統演算法等),還涉及了利用分布式演算法實現容錯計算、方向偵聽和故障檢測器等方面的內容。本書條理清晰、深入淺出,適合作為大學本科高年級和研究生的分布式演算法課程的教材和參考書,對於具有實踐經驗的專業人員也大有幫助。
Ⅸ 大學軟體工程專業教材都有哪些
1、《編譯原理》
教材:《編譯原理》, Alfred V. Aho, Jeffrey D.,ullman著,李建中,姜守旭 譯.
2、《解釋器構造》
教材:《編譯原理》, Alfred V. Aho, Jeffrey D.,ullman著,李建中,姜守旭 譯.
3、《計算機導論》
輔助教材:
《計算機文化》(New Perspective of Computer Science, 6th Edition),電子工業出版社,(美)帕森斯(Parsons J.J),2004
或《計算機文化》(New Perspective of Computer Science, 8th Edition), 電子工業出版社,(美)帕森斯(Parsons J.J),2005
(9)分布式演算法導論擴展閱讀:
軟體工程專業的主幹課程:
1、主幹學科:馬克思主義理論、大學外語、高等數學、大學物理、物理實驗、線性代數、概率論與數理統計、程序設計語言、數據結構、離散數學、操作系統、編譯技術、軟體工程概論、統一建模語言、軟體體系結構、軟體需求、軟體項目管理
2、該專業除了學習公共基礎課外,還將系統學習離散數學、數據結構、演算法分析、面向對象程序設計、現代操作系統、資料庫原理與實現技術、編譯原理、軟體工程、軟體項目管理、計算機安全等課程,根據學生的興趣還可以選修一些其它選修課。
3、實踐環節:畢業實習、課程設計、計算機工程實踐、生產實習、畢業設計。
參考資料來源:網路—軟體工程專業
Ⅹ 分布式演算法導論的目錄
第1章 導論:分布式系統
1.1 分布式系統的定義
1.1.1 動機
1.2 計算機網路
1.1.3 廣域網路
1.1.4 區域網
1.1.5 多處理器計算機
1.1.6 協同操作進程
1.2 體系結構和語言
1.2.1 結構
1.2.2 0si參考模型
1.2.3 區域網絡osi模型:ieee標准
1.2.4 語言支持
1.3 分布式演算法
1.3.1 分布式演算法與集中式演算法
1.3.2 一個例子:單消息通信
1.3.3 研究領域
1.4 本書概要
第一部分 協 議
第2章 模型