众所周知,如何从常规语言的NFA到最小的DFA.但是,DFA可能具有指数级更大的州.
我需要的是一种减少NFA的方法,再次给出一个NFA但具有较少数量的状态.Ti我不需要结果是确定性的,但我希望它保持尽可能小,同时保留公认的语言(可能不是绝对最佳,但越小越好).
这个问题的最佳算法是什么?或者也许不是"最好的",但至少"最容易实现非极端效率"?或者问题是否有一个众所周知的名称,以便我自己能找到好的信息来源?
regex language-agnostic algorithm computer-science finite-automata
所以,我使用的是布尔矩阵,其维数通常是几十到几百,它们通常非常稀疏(在大多数行和列中只有2-4个非零),并且我的运行时间由它们的乘法主导.
在这些情况下,哪种数据结构最适合加速乘法?
目前我将每个矩阵存储在一个连续的bitset(64位长的数组)中,并且基本上将它们与标准算法相乘,只需加快稀疏性,快速操作就可以找到一个字中的下一个设置位,以及通过位掩码操作进行矢量化.
我是否应该使用一些稀疏表示呢?
algorithm performance bit-manipulation matrix data-structures
假设我有一个PCollection<Foo>并且我想将它写入多个BigQuery表,为每个表选择一个可能不同的表Foo.
如何使用Apache Beam BigQueryIOAPI 执行此操作?
该tf.estimatorAPI需要输入"输入功能"返回Dataset秒.例如,Estimator.train()拿一个input_fn(文档).
在我看过的例子中,无论何时手动提供此函数,它都是无争议的lambda.
这是不是意味着函数总是返回相同的值?或者它是否多次调用而没有参数?我无法找到关于此的文档.为什么函数不像train()只是Dataset明确地输入?
我遇到了一个正则表达式库http://laurikari.net/tre/以及http://hackage.haskell.org/package/regex-tdfa,但是我找不到任何有关这种"标记DFA"方法的信息.正在使用:既不在这些库的页面上,也不在谷歌(incl.scholar).
有谁知道它是什么?
假设我有一个(连续流)请求处理,每个请求有几个阶段.例如:"连接到数据源","从数据源读取数据","验证数据","处理数据","连接到数据接收器","将结果写入数据接收器".
哪种可视化方法甚至工具都能很好地显示这种系统的行为?
我希望能够看到哪些阶段需要很长时间,以及不同请求的阶段如何相互对齐(例如,看到数据源在被太多请求访问时响应的时间更长一旦).
如果只有几十个请求,我可以使用几十个单独的彩色时间表,但是几千个不合适.我想我可以摆脱N色时间线,其中N是"并发因素",但1)也许有更好的东西,2)也许存在这方面的工具?
PS无耻插件:一旦我找到最佳的可视化方法,我会将它添加到我的名为timeplot的漂亮工具中;)
PPS另一个无耻的插件:我决定写一个单独的工具:splot.这是它可以做的,基于一个简单的简单日志和一个awk单行:

它显示了160个集群的核心,执行RabbitMQ为其提供的任务.蓝色是"获取数据",橙色是"计算",白色是"无所事事".从该图中可以立即看出几个问题,仅通过查看日志就很难找到.
我的程序执行用户指定的脚本块,我希望它以递增方式返回其输出(例如,如果脚本块运行很长时间).
但是,ScriptBlock的API似乎没有暴露任何管道相关的东西!
它有一些看起来像我需要的函数(InvokeWithPipe),但它们是内部的,它们的参数是内部类型.我不想在这里诉诸于反思.
那么,有没有办法访问scriptblock的管道?也许某种强大的解决方法?
我想为基于Swing的应用程序添加持久性; 这是我第一次做这样的事情.
我知道如何使用Java序列化API(虽然我使用的是xstream),我知道JComponent是可序列化的,但我对更多架构考虑感兴趣:应该如何设计应用程序以使其持久化变得容易; 等等
我很高兴看到有任何消息来源深入考虑这些问题,但我也很高兴听到一些明确的最佳实践:)
我在谈论一个允许我从不同机器记录事件的库,并将这些事件在"全局"时间轴上以足够高的精度对齐.
实际上,我问,因为我自己在集群计算项目中编写了这样的东西,我发现它非常有用,我很惊讶我找不到任何类似物.
因此,重点是这样的事情是否存在(我更好地为此做出贡献)或者什么都不存在(我最好写一个我的解决方案的开源模拟).
以下是我希望从这样的库中获得的功能:
language-agnostic logging monitoring distributed cluster-computing
我想编写一个供开发人员使用的开源工具.我想消除进入障碍,所以如果他们喜欢这个想法,他们就会得到这个工具并开始玩它.
特别是,我不想要"哦,我是否还应该安装200Mb的ThatLanguage运行时库?哦,那么它们不能建立在我最新版本的Linux上?" 进入障碍.
我应该用C编写这个工具吗?或者是Python,或者Java,还是其他什么,已经足够广泛而不必担心这类事情(每个人都已安装它们)?
嗯,当然我知道它们非常普遍,但仍然 - 编写超轻量级零依赖工具有什么重大好处,还是我太完美了?
algorithm ×3
distributed ×2
monitoring ×2
regex ×2
.net ×1
apache-beam ×1
architecture ×1
concurrency ×1
debugging ×1
java ×1
logging ×1
matrix ×1
open-source ×1
performance ×1
persistence ×1
portability ×1
powershell ×1
python ×1
streaming ×1
swing ×1
tensorflow ×1