小编Sah*_*heb的帖子

什么是最好的自动完成/建议算法,数据结构[C++/C]

我们看到谷歌,Firefox,一些AJAX页面显示可能的项目列表,而用户键入字符.

有人能给出一个好的算法,数据结构来实现自动完成吗?

c c++ algorithm search autocomplete

48
推荐指数
4
解决办法
5万
查看次数

如何在海量数据集上实现自动完成

我正在尝试在我正在建立的网站上实施Google建议的内容,并且很好奇如何在非常大的数据集上进行操作.当然,如果您有1000个项目,则缓存项目并循环浏览它们.但是当你有一百万件商品时,你怎么做呢?此外,假设项目不是一个单词.具体来说,我对Pandora.com印象非常深刻.例如,如果您搜索"湿",它会带回"湿沙",但它也会带回Toad The Wet Sprocket.他们的自动完成功能很快.我的第一个想法是按前两个字母对项目进行分组,所以你会有类似的东西:

Dictionary<string,List<string>>
Run Code Online (Sandbox Code Playgroud)

其中键是前两个字母.那没关系,但是如果我想做类似Pandora的事情并允许用户看到与字符串中间匹配的结果呢?根据我的想法:Wet永远不会匹配Toad the Wet Sprocket,因为它将在"TO"桶而不是"WE"桶中.那么也许你可以把弦分开,"Toad the Wet Sprocket"进入"TO","WE"和"SP"桶(去掉"THE"这个词),但当你谈到一百万可能不得不说几句话的条目,似乎你很快就开始耗费大量的记忆.好的,这是一个很长的问题.思考?

optimization autocomplete

44
推荐指数
3
解决办法
3万
查看次数

在打电话给我的api之前如何减速/等待?

祝你圣诞快乐.
我的Angular 4应用程序不会等待.

我希望在我调用API之前放慢速度.
但我只是继续撞墙.

我在我的代码中使用了HttpInterceptor.
但是这些Observable只会爆炸.

不要太鄙视.
下面你会发现我的尝试.

export class ApiUrlInterceptor implements HttpInterceptor {

    constructor(private http: Http) { }

    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        return Observable.create(observer => {
            setTimeout(() => {
                observer.next(true); //Not sure why I do this
                const start = Date.now();
                console.log(`Request for ${req.url}`);
                return next.handle(req).do(event => {
                    if (event.type == HttpEventType.Response) {
                        const elapsed = Date.now() - start;
                        console.log(`Request for ${req.urlWithParams} took ${elapsed} ms.`);
                    }
                });
            }, 1000);
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

结果是调用了API.
但没有安装调用者的结果

我的Observable似乎陷入困境.
我运气不好


我很清楚这是Angular中的反模式"不要等待随机数",而是构建你的应用程序,这样你就不需要了.我的实际用例是, …

wait rxjs angular-http-interceptors angular angular-httpclient

17
推荐指数
1
解决办法
547
查看次数

实现LRU缓存的最佳方式

我正在研究LRU缓存实现的这个问题,其中在缓存大小已满之后,弹出最近最少使用的项目并将其替换为新项目.

我有两个实现:

1).创建两个看起来像这样的地图

std::map<timestamp, k> time_to_key
std::map<key, std::pair<timestamp, V>> LRUCache
Run Code Online (Sandbox Code Playgroud)

要插入新元素,我们可以将当前时间戳和值放在LRUCache中.当缓存的大小已满时,我们可以通过查找time _to_ key中存在的最小时间戳并从LRUCache中删除相应的键来逐出最近的元素.插入一个新项是O(1),更新时间戳是O(n)(因为我们需要在时间 _to_ 键中搜索对应于时间戳的k.

2).有一个链表,其中最近最少使用的缓存出现在头部,新项目在尾部添加.当项目到达时已经存在于高速缓存中,与该项目的键对应的节点被移动到列表的尾部.插入一个新项是O(1),更新时间戳再次是O(n)(因为我们需要移动到列表的尾部),删除一个元素是O(1).

现在我有以下问题:

  1. 对于LRUCache,这些实现中哪一个更好.

  2. 有没有其他方法来实现LRU Cache.

  3. 在Java中,我应该使用HashMap来实现LRUCache

  4. 我已经看到了诸如实现通用LRU缓存之类的问题,并且还遇到了诸如实现LRU缓存之类的问题.通用LRU缓存是否与LRU缓存不同?

提前致谢!!!

编辑:

在Java中实现LRUCache的另一种方法(最简单的方法)是使用LinkedHashMap并重写boolean removeEldestEntry(Map.entry eldest)函数.

c++ java caching

14
推荐指数
1
解决办法
3万
查看次数

GSON反序列化字符串或字符串数​​组

我在反序列化包含0到多个子对象的对象时遇到了一些麻烦,这些对象可以包含字符串或特定值的字符串数组.

这是一个JSON示例

{
"name": "process name",
"tasks": [{
        "name": "task 1",
        "fields": [{
                "name": "field 1",
                "value": "123abc"
            },
            {
                "name": "field 2",
                "value": ["value 1", "value 2"]
            }
        ]
    },
    {
        "name": "task 2",
        "fields": []
    }]
}
Run Code Online (Sandbox Code Playgroud)

我有一个Java实体设置来匹配这个结构,如下所示:

public class Process {
    public Process() {}

    public String name;
    public Task[] tasks;
}

public class Task {
    public Task() {}

    public String name;
    public Field[] fields;
}

public class Field {
    public Field() field;

    public String name;
    public String …
Run Code Online (Sandbox Code Playgroud)

java json gson

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

Mapstruct:更新集合中的各个模型

我正在尝试使用这样的映射结构更新集合:

List<Passenger> updatePassengers(@MappingTarget List<Passenger> passengers, List<Passenger> sourcePassenger);
Passenger updatePassenger(@MappingTarget Passenger passenger, Passenger sourcePassenger);
Run Code Online (Sandbox Code Playgroud)

现在在生成的源中 updatePassenger 方法生成如下:

public List<Passenger> updatePassengers(List<Passenger> passengers, List<Passenger> sourcePassenger) {
    if ( sourcePassenger == null ) {
        return null;
    }

    passengers.clear();
    for ( Passenger passenger : sourcePassenger ) {
        passengers.add( passenger );
    }

    return passengers;
}
Run Code Online (Sandbox Code Playgroud)

这里是将乘客从目的地移走,并将乘客从源地设置。我想更新个别乘客对象。

我浏览了 mapstruct 文档,它说它在更新之前清除集合。

有没有一种方法可以为每个乘客调用 updatePassenger 方法?

java collections java-8 mapstruct

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

在axios中传递路径参数

我将Axios与NodeJs结合使用,并尝试在axios.get()方法中传递路径参数。例如,如果URL是url = '/fetch/{date}',我想{date}在调用时用实际日期替换axios.get(url)

我遍历了Github和StackOverflow上的源代码,但是找不到任何方法。

是否可以保留带有参数的URL作为占位符并在实际调用Axios的get方法时替换它们?

node.js axios

5
推荐指数
3
解决办法
8696
查看次数

使用 Jackson 和 Spring-Boot 将 Base64 编码的 JSON 解码为 POJO

我有一个这样的请求

{
    "varA"  : "A",
    "varB" : "TCFNhbiBKb3NlMRgwFgYDVQQK"
}
Run Code Online (Sandbox Code Playgroud)

其中 keyvarB是一个 base64 编码的 JSON 字符串。像这样的东西:

{
    "nestedVarB1": "some value here",
    "nestedVarB2" : "some other value here"
}
Run Code Online (Sandbox Code Playgroud)

我想将它转换成一些 POJO,如下所示:

@Data
public class MyRequest {
    private String varA;
    private B varB;
}

@Data
public class B {
    private String nestedVarB1;
    private String nestedVarB2;
}
Run Code Online (Sandbox Code Playgroud)

我经历了几个关于堆栈溢出的解决方案,例如thisthisMyRequest ,但我想通过编写某种 Jackson 反序列化器将 JSON 直接转换为类型的对象。

如何直接将 JSON 转换为MyRequest使用 Jackson 和 Spring Boot?

笔记:

  1. POJOMyRequestB非常大, …

java json spring-mvc jackson spring-boot

4
推荐指数
1
解决办法
1万
查看次数

在C中创建自己的malloc函数

我需要你的帮助.我对C有一个平均的知识,这就是问题所在.我将使用一些基准来测试新处理器上的一些计算机体系结构(分支未命中,缓存未命中).关于它的事情是基准测试在C中,但我不能包含任何库调用.例如,我不能使用malloc因为我收到了错误

"undefined reference to malloc" 
Run Code Online (Sandbox Code Playgroud)

即使我已经包括了图书馆.所以我必须编写自己的malloc.我不希望它超级高效 - 只需要做基础知识.正如我在想的那样,我必须在内存中有一个地址,并且每当malloc发生时,我都会返回一个指向该地址的指针并按该大小递增计数器.Malloc在我的程序中发生了两次,所以我甚至不需要大内存.

你能帮帮我吗?我设计了一个Verilog并且在C中没有那么多经验.

我见过以前的答案但对我来说似乎都太复杂了.此外,我无法访问KR书.

干杯!

编辑:也许这可以帮助你更多:我不是使用gcc而是使用sde-gcc编译器.它有什么不同吗?也许这就是为什么我得到一个未定义的malloc引用?

EDIT2:我正在测试MIPS架构:

我包括:

#include <stdlib.h>
Run Code Online (Sandbox Code Playgroud)

而错误是:

undefined reference to malloc
relocation truncated to fit: R_MIPS_26 against malloc
Run Code Online (Sandbox Code Playgroud)

和编译器命令id:

test.o: test.c cap.h
sde-gcc -c -o test.s test.c -EB -march=mips64 -mabi=64 -G -O -ggdb -O2 -S
    sde-as -o test.o test.s EB -march=mips64 -mabi=64 -G -O -ggdb
    as_objects:=test.o init.o
Run Code Online (Sandbox Code Playgroud)

编辑3:好的,我使用上面的实现,它运行没有任何问题.问题是,在进行嵌入式编程时,您只需定义所使用的所有内容,因此我定义了自己的malloc.sde-gcc无法识别malloc函数.

c malloc

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