我在Python中实现了一个简单的合并排序算法.算法和测试代码如下:
import time
import random
import matplotlib.pyplot as plt
import math
from collections import deque
def sort(unsorted):
if len(unsorted) <= 1:
return unsorted
to_merge = deque(deque([elem]) for elem in unsorted)
while len(to_merge) > 1:
left = to_merge.popleft()
right = to_merge.popleft()
to_merge.append(merge(left, right))
return to_merge.pop()
def merge(left, right):
result = deque()
while left or right:
if left and right:
elem = left.popleft() if left[0] > right[0] else right.popleft()
elif not left and right:
elem = right.popleft()
elif not right and left: …Run Code Online (Sandbox Code Playgroud) 我正在将通常的完全重启标记器(从原始语言解析器移植,这里的语言无关紧要)转换为更高级的增量标记器.这意味着以下内容:
a)必须快速,快速;
b)每次更新文本(无论是插入还是删除)时,都必须找到损坏的令牌并相应地修复令牌列表.
原始的tokenizer版本只是在使用regexps浏览缓冲区文本时构建一个令牌列表; 列表中的每个标记都是4个元素的向量(['TOKENTYPE"token-lexeme"linum charnum]).Linum/charnum是简单的数字,指定lexing完成时缓冲区中的标记位置.简单派.
现在,到了这一点.每当(好吧......不是每次,但经常足够)用户添加或删除字符(或字符串)时,新的标记器必须找到使用更改位置的文本构建的标记,并且可能是依赖标记以供稍后使用删除/更新.
这里有两个问题:
a)令牌位置应该是动态的(即如果用户在缓冲区的开头添加一些文本 - >我们不应该在缓冲区结束时修复令牌);
b)获得损坏令牌(或一般许多令牌)的方法.
现在我正在尝试使用叠加层来完成任务,因为叠加层有一个很好的界面,可以满足我的需求:叠加/叠加功能有助于搜索; 和覆盖开始/结束以适当的方式移动.
我很乐意为一个较小的文件做到这一点.但事实证明(并且我不得不承认我被文档警告)解决方案无法扩展:即使平均1K的LOC文件也可以有CONST*LOC叠加,这对于Emacs来说太过分了.
这是我的第一次尝试,而且不是一次成功的尝试.我正在考虑替代方案,例如:
1)使用普通数字管理手写令牌搜索树;
2)同一棵树,但使用标记;
3)某种混合方法,包括普通数字和标记.
提到方法的任何替代方案?或者也许有更好的方法来处理大量的叠加层?
在我的项目中,我需要一个客户端OAuth2库.该项目是用Erlang编写的.该语言的选项有哪些?
PS我是Erlang的新手,所以文档/示例是必须的.