上周技术关注:函数式编程另类指南
生活随笔
收集整理的這篇文章主要介紹了
上周技术关注:函数式编程另类指南
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
- [網站設計, 用戶體驗] 改進網頁可讀性(Readability)的7個方法 >>
- [用戶體驗, delicious] 美味書簽(del.icio.us)的用戶體驗改進項目 >>
從了解公司的商業戰略開始,進行全面的研究。之后首先進行了專家評估,建立了一個Listening Labs進行用戶情景研究,觀察和訪談。根據前面一系列研究結果,制定出用戶體驗的戰略,最后設計了15個頁面的框架原型,以揭示用戶體驗戰略如何貫徹到執行中。 - [編程思想, Lisp] 函數式編程另類指南 >>
函數式編程是對阿隆左·丘奇理論的實踐應用。但也并非全部 lambda 演算都被應用到了實踐中,因為 lambda 演算不是被設計為在物理局限下工作的。因此,象面向對象的編程一樣,函數式編程是一系列理念,而不是嚴格的教條。現在有很多種函數式編程語言,他們中的大多數以不同方式完成不同任務。在本文中我將就最廣泛使用的源自函數式編程的思想作一解釋,并將用Java語言舉例。(的確,你可以用Java寫出函數式的程序如果你有顯著的受虐傾向)。在下面的小節中,我將會把Java作為一種函數式語言,并對其稍加修改使它成為一種可用的函數式語言。現在開始吧。 - [數學, google, 算法] 數學之美 系列十六(上) 不要把所有的雞蛋放在一個籃子里 -- 談談最大熵模型 >>
最大熵原理指出,當我們需要對一個隨機事件的概率分布進行預測時,我們的預測應當滿足全部已知的條件,而對未知的情況不要做任何主觀假設。(不做主觀假設這點很重要。)在這種情況下,概率分布最均勻,預測的風險最小。因為這時概率分布的信息熵最大,所以人們稱這種模型叫“最大熵模型”。我們常說,不要把所有的雞蛋放在一個籃子里,其實就是最大熵原理的一個樸素的說法,因為當我們遇到不確定性時,就要保留各種可能性。 - [數學, google, 財經股票, 算法] 數學之美 系列十六(下)- 不要把所有的雞蛋放在一個籃子里 最大熵模型 >>
拉納帕提成功地將上下文信息、詞性(名詞、動詞和形容詞等)、句子成分(主謂賓)通過最大熵模型結合起來,做出了當時世界上最好的詞性標識系統和句法分析器。拉納帕提的論文發表后讓人們耳目一新。拉納帕提的詞性標注系統,至今仍然是使用單一方法最好的系統。科學家們從拉納帕提的成就中,又看到了用最大熵模型解決復雜的文字信息處理的希望。最大熵模型,可以說是集簡與繁于一體,形式簡單,實現復雜。值得一提的是,在Google的很多產品中,比如機器翻譯,都直接或間接地用到了最大熵模型。我們知道,決定股票漲落的因素可能有幾十甚至上百種,而最大熵方法恰恰能找到一個同時滿足成千上萬種不同條件的模型。達拉皮垂兄弟等科學家在那里,用于最大熵模型和其他一些先進的數學工具對股票預測,獲得了巨大的成功。從該基金 1988 年創立至今,它的凈回報率高達平均每年 34%。 - [MapReduce, google, 搜索技術] Map Reduce - the Free Lunch is not over? >>
MapReduce中最重要的兩個詞就是Map(映射)和Reduce(規約)。初看Map/Reduce這兩個詞,熟悉Function Language的人一定感覺很熟悉。FP把這樣的函數稱為”higher order function”(”High order function”被成為Function Programming的利器之一哦),也就是說,這些函數是編寫來被與其它函數相結合(或者說被其它函數調用的)。如果說硬要比的化,可以把它想象成C里面的CallBack函數,或者STL里面的Functor。比如你要對一個STL的容器進行查找,需要制定每兩個元素相比較的Functor(Comparator),這個Comparator在遍歷容器的時候就會被調用。拿前面說過圖像處理程序來舉例,其實大多數的圖像處理操作都是對圖像矩陣進行某種運算。這里的運算通常有兩種,一種是映射,一種是規約。拿兩種效果來說,”老照片”效果通常是強化照片的G/B值,然后對每個象素加一些隨機的偏移,這些操作在二維矩陣上的每一個元素都是獨立的,是Map操作。而”雕刻”效果需要提取圖像邊緣,就需要元素之間的運算了,是一種Reduce操作。再舉個簡單的例子,一個一維矩陣(數組)[0,1,2,3,4]可以映射為[0,2,3,6,8](乘2),也可以映射為[1,2,3,4,5](加1)。它可以規約為0(元素求積)也可以規約為10(元素求和)。面對復雜問題,古人教導我們要“分而治之”,英文中對應的詞是”Divide and Conquer“。Map/Reduce其實就是Divide/Conquer的過程,通過把問題Divide,使這些Divide后的Map運算高度并行,再將Map后的結果Reduce(根據某一個Key),得到最終的結果。Googler發現這是問題的核心,其它都是共性問題。因此,他們把MapReduce抽象分離出來。這樣,Google的程序員可以只關心應用邏輯,關心根據哪些Key把問題進行分解,哪些操作是Map操作,哪些操作是Reduce操作。其它并行計算中的復雜問題諸如分布、工作調度、容錯、機器間通信都交給Map/Reduce Framework去做,很大程度上簡化了整個編程模型。MapReduce的另一個特點是,Map和Reduce的輸入和輸出都是中間臨時文件(MapReduce利用Google文件系統來管理和訪問這些文件),而不是不同進程間或者不同機器間的其它通信方式。我覺得,這是Google一貫的風格,化繁為簡,返璞歸真。接下來就放下其它,研究一下Map/Reduce操作。(其它比如容錯、備份任務也有很經典的經驗和實現,論文里面都有詳述) - [google, 比賽] Google Code Jam 2006補充報道——中國選手成績斐然 >>
2006 年11月7日,Google(谷歌)中國公司今天宣布,在剛剛結束的國際頂級編程比賽--2006年Google(谷歌)全球編程挑戰賽決賽中,中國選手取得了參賽以來的最佳成績。來自中國的選手王穎勇奪本次比賽的第二名,另有6名選手進入前50名,本次比賽共有13名中國選手成功入圍前100名,其中就包括了本次比賽唯一的中學生,來自中國廣東中山的中學生余江偉。據了解,此次中國進入決賽的選手人數僅次于俄羅斯,排名全球第二。來自俄羅斯的選手獲得了本次比賽的冠軍。 - [MapReduce, Google, 搜索技術] MapReduce: Simplified Data Processing on Large Clusters >>
MapReduce is a programming model and an associated implementation for processing and generating large data sets. Users specify a map function that processes a key/value pair to generate a set of intermediate key/value pairs, and a reduce function that merges all intermediate values associated with the same intermediate key. Many real world tasks are expressible in this model, as shown in the pap - [.NET開發] .NET 3.0 資源列表 >>
- [mail, 數學] 發一封郵件做一道數學題 100%剿滅垃圾郵件 >>
國內Windows平臺郵件系統提供商WinWebMail Server,最新提供了據稱可以100%剿滅垃圾郵件的數學題反垃圾模式,它嘗試通過要求發信方回答隨機數學題的方式來徹底解決困擾互聯網多年的垃圾郵件問題. - [開發工具, .NET開發] 使用WebDevHelper輔助ASP.NET AJAX程序開發 >>
WebDevHelper是微軟公司ASP.NET Team架構師Nikhil Kothari在業余時間的小作品(贊嘆人家架構師對技術的執著,加上對編碼的熱愛……),其中包含一些輔助Web開發的小工具,包括DOM查看、HTTP Trace、JavaScript Console、ASP.NET ViewState查看等雜項功能。今天Nikhil Kothari剛剛發布了WebDevHelper一個最新版本——0.8.4.0,其中非常引人注目的就是對ASP.NET AJAX開發的有力支持。 - [IIS, 開發工具] 使用IIS Request Viewer查看當前IIS連接 >>
如果有自己的服務器,如果想查看當前IIS連接情況:例如有多少個請求,每個請求的動作,請求的Url,請求的IP等信息,使用微軟的IIS Diagnostics Toolkit無疑是非常好的選擇,利用它的IIS Request Viewer,查看當前連接以及連接狀態,一目了然,非常方便好用。 - [.NET開發, LINQ] 在ASP.NET中使用LINQ(第一部分) >>
我將在接下來的幾周中發表一系列文章來介紹怎樣在ASP.NET工程 中使用LINQ/DLINQ/XLINQ。下面這第一個走過場的示范將幫助你了解一些LINQ重要的基本概念。 - [InfoQ, TheServerSide, Java] InfoQ-China發布在即,敬請關注支持 >>
和InfoQ全球網站一樣,InfoQ-China將繼續秉承“扎根社區、服務社區、引領社區”的經營理念。來自軟件開發者社區的支持是InfoQ-China內容及時性、專業性的重要保證,InfoQ-China也為支持幫助我們的專家創造更多提升個人聲望、參與社區交流的機會。您可以通過以下幾種方式幫助我們: 1. 瀏覽InfoQ-China網站,發表您的評論,將您對我們網站的意見和建議告訴我們的編輯,將InfoQ-China介紹給您的同事朋友。 2. 提供新聞線索。InfoQ-China關注中國企業軟件開發領域的變化與創新,尤其是Java、.NET、Ruby、敏捷方法等領域。如果您了解這些領域發生的任何值得關注的事,請告訴我們的編輯,我們渴望聽到您的聲音。 3. 撰寫技術文章。如果您是上述領域的專家,并且有獨到的經驗心得希望與別人分享,InfoQ-China將是您最合適的投稿平臺。InfoQ-China有專業的技術編輯審核您的作品,與您共同商討完善。優秀的作品在發表之后還會由InfoQ-China將其翻譯為英文,介紹給全世界的開發者社區。InfoQ的全球化平臺將為您創造獨一無二的與世界主流社區交流的機會。 4. 撰寫mini-book。如果您希望用您的寶貴經驗著書立說、又苦于缺乏圖書寫作及出版的經驗,mini-book將是一個好的起點。您可以將初具雛形的著作以mini-book的形式發表在InfoQ-China,從而盡快得到讀者的關注與反饋。InfoQ-China與清華大學出版社、電子工業出版社、人民郵電出版社等國內知名出版機構建立了緊密的聯系,在圖書出版流程上也能為您提供支持。
CSDN技術網摘生成。更多技術動態,請訪問我的技術網摘(RSS)
總結
以上是生活随笔為你收集整理的上周技术关注:函数式编程另类指南的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux查看采集卡内核,MAGEWEL
- 下一篇: 数据结构__头插法建立单链表、尾插法建立