小编mad*_*n54的帖子

Knuth-Morris-Pratt算法中的DFA构造

我指的是Sedgewick的书"Algorithms"(第4版)中用于子串搜索的Knuth-Morris-Pratt(KMP)算法的概述.

KMP算法在子串搜索中使用基于确定性有限自动机(DFA)的备份.我了解DFA如何输入算法,但我不明白如何构建 DFA,这由以下代码片段完成:

dfa[pat.charAt(0)][0] = 1;
for (int X = 0; j = 1; j< M; j++) {
    for (int c = 0; c < R; c++) {
       dfa[c][j] = dfa[c][X];
    }
    dfa[pat.charAt(j)][j] = j+1;
    X = dfa[pat.charAt(j)][X];
}
Run Code Online (Sandbox Code Playgroud)

M模式的长度patR字母的大小在哪里.该charAt()函数返回相应位置的字符的整数值.

有人能解释这段代码构造dfa的方式吗?我迷失在内部for循环的实际直觉意义上.

string algorithm substring dfa knuth-morris-pratt

11
推荐指数
1
解决办法
4055
查看次数

改进了android的最佳实践:异步请求或AsyncTask中的同步请求?

我正在使用Retrofit 2库来安装Android REST客户端.Retrofit本身支持同步和异步请求(参见此处),后者的原因是不阻塞线程,因此不会被android中断.

实际上,AsyncTask直接从Retrofit 在本机或异步调用中使用同步调用会更好吗?如果一个比另一个好,那么技术原因是什么?

android android-asynctask retrofit

11
推荐指数
1
解决办法
6592
查看次数

针对外部模式文件验证与Jackson的JSON模式符合性

我想使用Jackson库(https://github.com/FasterXML/jackson)处理Java中的JSON文件,该文件由JSON模式文件描述。

现在,我想验证是否已解析的JSON符合由自己解析的JSON模式文件。

Jackson有一个JSON模式模块(https://github.com/FasterXML/jackson-module-jsonSchema)。但是,在我看来,它的主要重点是从Java内部创建 JSON模式文件。

在Java中验证JSON模式的好方法是什么?-最好使用Jackson,但我也愿意接受其他解决方案。

java json jsonschema jackson

7
推荐指数
1
解决办法
8081
查看次数

从Java中的泛型类型推断泛型类型(编译时错误)

我有一个静态函数,其泛型类型具有以下签名 T

public static<T> List<T> sortMap(Map<T, Comparable> map)
Run Code Online (Sandbox Code Playgroud)

应返回带有某些属性的地图键列表.

现在我想传递一个类型的泛型HashMap S

Map<S,Double> map
Run Code Online (Sandbox Code Playgroud)

调用泛型类中的静态函数,该类将映射作为成员变量.

我在下面列出了一个最小的代码示例.

但是,我得到一条错误消息(S并且T都是T,但在我的代码的不同范围内,即T#1= T,T#2= S):

  required: Map<T#1,Comparable>
  found: Map<T#2,Double>
  reason: cannot infer type-variable(s) T#1
  (argument mismatch; Map<T#2,Double> cannot be converted to Map<T#1,Comparable>)
Run Code Online (Sandbox Code Playgroud)

怎么解决这个问题?我很惊讶Java不允许从泛型类型推断泛型类型.Java中的哪种结构可以用来处理那种更抽象的代码推理?

代码:

public class ExampleClass<T> {
    Map<T, Double> map;
    public ExampleClass () {
        this.map = new HashMap();
    }
    //the following line produces the mentioned error
    List<T> sortedMapKeys = UtilityMethods.sortMap(map);
}

public class UtilityMethods { …
Run Code Online (Sandbox Code Playgroud)

java generics types

6
推荐指数
1
解决办法
210
查看次数

Java ArrayList.add()方法线程安全纯粹并行添加?

考虑一个带有ArrayList引用的函数的for循环,并将一个对象添加到该ArrayList.我现在想并行执行每个函数调用.

如果我不关心添加对象的序列并且没有函数读取或操作任何ArrayList元素,那么ArrayList.add()方法线程是否安全?所以我只想确保在并行调用结束时将所有对象添加到列表中.

java multithreading arraylist thread-safety

2
推荐指数
2
解决办法
7131
查看次数

关于Haskell中的($)的混淆:示例其中($)不明显替换括号

假设我有数据类型

data Price = Price Double
data Book = Book {title :: String, bookPrice :: Price}
Run Code Online (Sandbox Code Playgroud)

用函数提取数值

priceAsDouble :: Price -> Double
priceAsDouble (Price doubleValue) = doubleValue
Run Code Online (Sandbox Code Playgroud)

现在,我想在图书清单上写一个累加器,例如

go :: Double -> Book -> Double
go acc book = acc + priceAsDouble (bookPrice book)
Run Code Online (Sandbox Code Playgroud)

哪个很好并且编译.

但是,如果我将最后一行更改为

go acc book = acc + priceAsDouble $ bookPrice book
Run Code Online (Sandbox Code Playgroud)

我得到以下矛盾的编译器错误:

<interactive>:10:51:
Couldn't match expected type ‘Price -> Double’
            with actual type ‘Double’
The first argument of ($) takes one argument,
but its type …
Run Code Online (Sandbox Code Playgroud)

haskell

2
推荐指数
1
解决办法
82
查看次数