- 浏览: 52004 次
- 性别:
- 来自: 广州
最新评论
文章列表
%%%-------------------------------------------------------------------
%%% Module : astar_trace
%%% Author :
%%% Description : A星寻路算法
%%%-------------------------------------------------------------------
-module(astar_trace).
-export([generate_route/8,generate_route/7,generate_route/5]) ...
1bytes = 8bit 即 1字节=8位
32位机器,1字用32位表示,那么1字长=32/8=4字节
64位机器,1字用64位表示,那么1字长=64/8=8字节
1:gen_event:which_handlers(EventRef).
返回EventRef类型的event handlers
例如:
error_logger:add_report_handler(my_loger),
gen_event:which_handlers(error_loger)
触发异常
throw(Term)
exit(Reason)
erlang:error(Reason)
特列:exit(normal),进程调用它所跑出的异常不会被捕获,该进程正常终止
try...catch
try
unsafe_fun()
catch
ErrType:Reason ->
do_something()
end.
try...of...catch
try
unsafe_fun()
of
O ->
io:format("do nothing&quo ...
进程链接的工作:
A进程意外退出时,会产生一个退出信号。所有与A进程链接的进程(link)都会收到这个信号。在默认情况下,接收方会一并退出并将信号传播给与它链接的其他进程,直到所有直接或间接链接在一起的所有进程统统退出为止。
OPT实现容错实现途径之trap_exit
在gen_server启动时,init函数中:erlang:process_flag(trap_exit,true),设置捕获退出信号标志,这时,会改写退出信号默认的传播行为,该进程不再服从外来的退出信号,而是将其捕获。进程接收退出信号后,将它转换成格式为{'EXIT',Pid,Reason}的消息
直接排序属于交换排序
基本思想:
1:选1个基准元素(通常是第一个元素或最后一个元素),将待排数列分成两部分,一部分比基准元素小,一部分比基准元素大
2:再对这两部分数列重复步骤1
时间复杂度:
最好情况:O(n*logn)
最坏情况,退化为冒泡排序 O(n*n)
稳定性:不稳定
python代码实现:quick_sort.py
def swap(l, i, j):
tmp = l[i]
l[i] = l[j]
l[j] = tmp
def partition(l, low, high):
pivo = l[low] ...
冒泡排序属于交换排序
基本思想:
在待排序数列中,自上而下对相邻的两个元素进行比较和调整,小的上冒,大的下沉
时间复杂度:
最好情况:正序有序,只需比较n次,O(n)
最坏情况:反序有序,需要比较(n-1)+(n-2)+...1次,故O(n*n)
稳定性:稳定
代码示例:bubble_sort.py
def bubble_sort(l):
length = len(l)
for i in range(0, length):
for j in range(0, length-i-1):
if l[j] > ...
堆排序:heap sort属于选择排序
堆的定义:有n个元素的序列(k1,k2...kn)满足:
1:Ki =< K2i 且 Ki =< K2i+1 (小顶堆)
或
2:Ki >= K2i 且 Ki >= K2i+1 (大顶堆)
i = (1,2,...n/2)
基本思想:
把要排序的n个数的序列组建成一个堆,将堆顶元素输出(这时,堆顶元素也即是根元素是最大或最小),然后对剩余的n-1个元素再次组建成堆,再次输出堆顶元素……
直到只有两个结点的堆,对它们进行交换,得到一个n个结点有序数列
操作:需要解决两个问题:
1:怎么建成堆
2:输出堆顶元素后,怎么对 ...
选择排序
基本思想:
从待排数列中,选取一个最小(或最大)的数,和第1位置的数交换,再从余下待排序数列中,选取最小(或最大)的一个数,和第2个位置的数交换,直到第n-1(倒数第二个)个元素和第n(末尾)个元素比较
操作方法:
9 5 6 2 1 8
---------------------
第一趟:
1 5 6 2 9 8
第二趟:
1 2 6 5 9 8
第三趟:
1 2 5 6 9 8
第四趟
1 2 5 6 9 8
第五趟
1 2 5 6 ...
希尔排序属于插入排序的一种,也称为缩小增量排序
基本思想:
将待排序数列划分为几个数列,对这几个数列分别进行直接插入排序
具体操作:
选取增量d(小于数列长度n),将数列划分为n/d个数列,对划分的数列进行直接插入排序
再选取一个增量d1,d1<d,重复上述步骤
直到dn = 1结束
取d=5
23 52 12 63 8 17 28 72 36 41
----------------------------------------------
23 17
|________ ...
因为对算法这一项实在是弱爆了,对自己从零开始学习,慢慢记录过程,加油哦
再因为最近在学习python和lua,就分别用两种语言都实现了
快速插入排序
基本思想:(假设是:从小到大,升序)
每次选择一个元素K插入已排好序的L[1...i]部分,如果L[x]>K,则K插入到L[x]前面,
要对L[x]后面的元素进行后移
时间复杂度:
最好情况:正序有序(从小到大)只需比较n次,不需要移动,复杂度O(n)
最坏情况:逆序有序(从大到小),插入第2个元素需要考察前1个元素,插入第3个元素需要考察前2个元素...插入第n个元素需要考察前n-1个元素,等差数列求和得n^2/2,
所以,复杂度为O ...
一个字节(byte)=8位二进制数(bit):1(byte) = 8(bit)
1 ASCII码(American Standard Code for Information Interchange,美国标准信息交换代码),占用一个字节
2 unicode编码,ASCII码对于美国,欧洲这些国家字符够用,但是处理中文字符至少要2个字节,ASCII码明显不够用,所以中国定制了GB2312码,日本,韩国等都有各自的编码集,为了统一国际标准,unicode编码产生了,它占用2个字节
3 utf-8编码(可变长编码) 有些文档如果都是英文字符,用unicode编码太浪费空间,utf8可以把一个un ...
Lua学习(六)元表和元方法
- 博客分类:
- lua
可以通过一个元表修改一个值的行为,使其在面对一个非预定义操作时执行一个指定操作
元表:metatable
元方法:metemethod
__add --加法
__mul --乘法
__sub --减法
__div --除法
__unm --相反数
__mod -- ...
Lua学习(五)函数进阶篇
- 博客分类:
- lua
第一类值:在lua中,函数与其它数据类型(数字,字符串)一样,可以存放在变量中,可以存放在table中,可以作为实参,还可以作为函数返回值
词法域:嵌套的函数可以访问他外部函数的变量
非局部变量:
names = {"kate", "john"}
grades = {kate = 6, john = 9}
function sortbygrade(names,grades)
table.sort(names,function(n1,n2)
return grades[n1]>grades[n2]
end ...
Lua学习(四)函数
- 博客分类:
- lua
函数的作用:
1、完成某项特定任务
2、计算并返回结果
语法:
function func_name(args)
statements
end
1、多重返回值
A、若函数作为一条单独语句执行,无返回值
B、若函数作为表达式一部分,只保留函数第一个返回值
C、若函数作为表达式一部分并且在表达式最后一个位置,返回所有值
function t_none() end --->无返回值
function t_one() return "a" end --->返回一个值" ...