erlang杂记六 --- 写了个小函数(2):最长子序列
2013-05-23 22:36
295 查看
代码:
函数名有点丑。。实在是想不出这个函数该叫啥。。函数只返回了最大值,如果需要最大序列的话,可以把M和Nm改成State的record,每次更新record的对应内容就好了
(好像还是存在一个bug,如:[3,-1,-1],这个状态要怎么记录?难道这个问题只能把结果全部计算出来然后取出最大值么?有空看看动态规划再想想。。
啊,有了,每次计算出当前最大值后,多与历史值比较并确认是否更新历史值。。也就是让历史值一直是最大值就可以了。。已更新,在注释中。。)
逻辑如下:
1.取出第一个元素,并将该元素与已计算最大值M求和
a.值大于0,该值作为当前计算的最大值返回
b.值小于0,将已计算的最大值与历史最大值比较,并返回其中最大的
2.根据返回值,更新需迭代元素
a.无后续元素,返回计算出来的最大值与历史最大值中最大的,结束递归
b.当前元素仍未达到最大,更新当前最大值并继续迭代
c.当前元素已最大,更新历史最大值并继续迭代。
-module(my_max). -export([get_max/1]). get_max(L) ->get_max(L, 0, 0). get_max(L, M, Nm) -> case cal_max(L, M, Nm) of {_, Tm, []} -> get_max_l(Tm, Nm); {1, Tm, T} -> get_max(T, Tm, Nm); %此处有bug,Nm值修改为Tm与Nm之间的最大值即可:get_max(T,Tm,get_max_l(Tm,Nm)); 但是这个时候代码看起来好丑= =! {0, Tm, T} -> get_max(T, 0, Tm) end. cal_max(L, M, Nm)-> case get_head(L) of {H, []} -> switch_max(H, M, Nm, []); {H, T} ->switch_max(H, M, Nm, T) end. switch_max(H, M, Nm, T)-> if H + M >= 0 -> {1, H + M, T}; true -> get_max_n(M, Nm, T) end. get_max_n(M, Nm, L) -> {0, get_max_l(M,Nm), L}. get_max_l(Tm, Nm) -> if Tm > Nm -> Tm; true -> Nm end. get_head(L) -> [H|T] = L, {H, T}.
函数名有点丑。。实在是想不出这个函数该叫啥。。函数只返回了最大值,如果需要最大序列的话,可以把M和Nm改成State的record,每次更新record的对应内容就好了
(好像还是存在一个bug,如:[3,-1,-1],这个状态要怎么记录?难道这个问题只能把结果全部计算出来然后取出最大值么?有空看看动态规划再想想。。
啊,有了,每次计算出当前最大值后,多与历史值比较并确认是否更新历史值。。也就是让历史值一直是最大值就可以了。。已更新,在注释中。。)
逻辑如下:
1.取出第一个元素,并将该元素与已计算最大值M求和
a.值大于0,该值作为当前计算的最大值返回
b.值小于0,将已计算的最大值与历史最大值比较,并返回其中最大的
2.根据返回值,更新需迭代元素
a.无后续元素,返回计算出来的最大值与历史最大值中最大的,结束递归
b.当前元素仍未达到最大,更新当前最大值并继续迭代
c.当前元素已最大,更新历史最大值并继续迭代。
相关文章推荐
- erlang杂记五 --- 写了个小函数(1):一个字符串处理函数
- erlang杂记二 --- 函数
- Erlang:第一个Erlang程序,模块,函数
- erlang判断模块导出函数问题
- Erlang基础 - 模块声明、函数导出声明和注释
- erlang 二进制中 拼接 变量或者函数 报错
- erlang 模块中函数学习
- [Erlang]虚拟机学习杂记
- erlang 一些常用函数 缓慢填坑
- Erlang:条件判断3种方法,函数参数模式匹配、case模式匹配、if
- Erlang函数与模式匹配(2)
- Erlang的random:uniform()函数
- Erlang 与 c 函数 对接
- Erlang杂记
- Erlang类型及函数声明规格/ erlang静态检查 dialyzer
- 【转载】C/C++杂记:深入理解数据成员指针、函数成员指针
- Erlang if、case、guard和函数
- [Erlang]时间函数及时间校正机制详解
- Erlang 杂记 V
- erlang 重载函数错误 函数已经定义 function convert/2 already defined