hangscer

hangscer

elixir

scala写算法-mergeSort

归并排序以O(NlogN)最坏情况运行。这个算法基本的操作是合并两个已排序的表,取两个输入数组A和B,一个输出数组C,以及三个计数器Aptr、Bptr和Cptr。如下: 比较1和2。1被加入C中,然后13和2比较: 2被添加C中,然后13和15比较: 13被加入C中,比较24和15,这样一直进行到26和17比较:… 1234567891011def merge(a:List[Int],b:List[Int]):List[Int]=(a,b) match { case (Nil,_)=>b case (_,Nil)=>a case (::(a_h,a_t),:...

scala写算法-insertSort

scala写算法-insertSort简单的排序算法之一插入排序,用较为函数式风格整理思路并实现:insertSort由N-1趟(pass)排序组成。对于P=1趟到P=N-1趟,插入排序保证从为位置0到位置P上的元素为已排序(基于这样的事实:位置0到位置P-1上的元素是已排序)。 12345678910def insert(x:Int,list:List[Int]):List[Int]=list match{ case Nil=>List(x) case ::(h,t) if(x<=h) =>List(x)++list case ::(h,t) if(x...

GC算法概述

引用计数法对于一个对象A,只要有任何一个对象引用了A,则A的计数器就加1。引用失效则减1。如果对象A的引用计数器为0,则A就不能再使用。 存在两个非常严重的问题: 无法处理循环引用的问题 引用计数器在每次因引用产生和消除的时候,需要伴随加法操作和减法操作,性能下降。 标记清除法(Mark-Sweep)Mark-Sweep是现代垃圾回收算法的思想基础,该算法分为两个阶段: 标记阶段 清除阶段 一种可行的实现是,首先通过根节点,标记所有可达对象,因此,未被标记的是垃圾对象。然后,清除所有未被标记的对象。该算法最大问题是空间碎片化严重。如图所示,使用标记清除法对一块连续的内存空间进行...

操作符

N元操作符可以这样写a 标识符 b其中标识符代表一个带有一个参数的方法(可能还有一个隐式参数)。1 -> 10就是1.->(10),前者称为中置表达式(infix)。 要在自己类中定义操作符,以想要用做操作符的名称来定义方法就行。例如,有一个Fraction类,根据下列法则来计算两个分数的乘积。 中置操作符是二元的。只有一个参数是一元操作符。如果它出现在参数之后,那么它是后置(postfix)操作符。例如:a 标识符,等同于a.标识符()。 如下四个+ - ! ~可作为前置(prefix)操作符。,出现在参数之前。例如:-a,等同于a.unary_-(可重载)。 赋值操作符...

Trait

Traitscala提供”特质”而非接口。特质类似接口,同时拥有抽象方法和具体方法,而类可以实现多个特质。 缺少构造器参数是特质与类(抽象类)之间的唯一技术差别(除了多继承问题)?!! 特质用法 当做接口使用的特质 带有具体实现的特质 扩展类的特质 当做接口使用的特质def log(msg:String)不需要声明为abstract——特质中未被实现的方法默认就是抽象的。 scala并没有一个特殊的关键词用来标记对特质的实现。比起java接口,特质与类更像。 第一个特质前使用extends,但是在所有其他特质前使用with。 带有具体实现的特质在Scala...
蒋航
知难行易
FRIENDS
明嗨 高峰