`
txf2004
  • 浏览: 7063913 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

上周技术关注:函数式编程另类指南

阅读更多
  • [网站设计, 用户体验] 改进网页可读性(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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics