V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  dongyx  ›  全部回复第 3 页 / 共 4 页
回复总数  67
1  2  3  4  
@praynise 你那边试了吗?能不能解决问题?我对这个问题挺感兴趣的,很希望能得到你的后续反馈。
能够改表结构最好改表结构,这个结构不符合关系型数据库的范式,改了之后这个问题会非常容易。

确实不能改的情况下,先保证 tag 值是有序的,就按字典序,比如["Peach", "Apple", "Banana"]按照["Apple", "Banana", "Peach"]存储;然后对于用户的搜索,同样先把标签按字典序排序,比如#Banana#Apple 解析成 Apple 和 Banana, Apple 在前,然后用百分号拼接:'%"Apple"%"Banana"%',丢给数据库做 like。

最后一个青苹果问题,我暂时没有想到解决办法。
2019-06-05 17:12:50 +08:00
回复了 aoscici2000 创建的主题 JavaScript javascript 读取多个文件 怎么全部读取完统一发 ajax
+ 赞同 1 楼用 Promise 封装 FileReader 的做法,https://segmentfault.com/a/1190000004451095 这里有一个封装的例子可以供楼主参考

+ 文件比较多的话使用 Promise.all 可能会有性能问题,建议串行执行 Promise:tasks.reduce((partial, task) => partial.then(task))
2019-06-04 17:31:40 +08:00
回复了 HelloAmadeus 创建的主题 Python 一个关于字符串搜索的问题
不好意思,上面第二个方案说错了,是把 n 个文本串的所有后缀建成一颗 Trie 树,建树时间是 O(n * m^2)。
2019-06-04 17:27:35 +08:00
回复了 HelloAmadeus 创建的主题 Python 一个关于字符串搜索的问题
不放设列表里有 n 个字符串,每个串长为 m。不管怎么做,第一次匹配都逃不了 O(nm)的时间复杂度。

如果你就匹配一次,直接用 KMP 挨个匹配就好,O(nm)。

如果你有多个模式串,要匹配多次,建议先把 n 个文本串建成一颗 Trie 树,建树的时间是 O(nm),以后每次匹配的时间只需要 O(m)。
typo:

2. 如果 before_key < after_key,*如果* before 中的第一行被删除了,输出结果,fp_before 移动到下一行

=>

2. 如果 before_key < after_key,*说明* before 中的第一行被删除了,输出结果,fp_before 移动到下一行
Python 的缩进粘贴过来没有了,我给个 gist 吧: https://gist.github.com/dongyx/a052cadf160896b879cdfb4d48e2f038
@praynise 哦哦,那你可以这样做,先把两个文件按照客户 id 做外排序。然后利用类似于归并排序的归并过程。

我给你准备了一个简单的 sample:

$ cat before.txt
Smith 26 Beijing
Sam 47 Washington
Mary 15 Tokyo

$ cat after.txt
Smith 26 Beijing
Sam 57 Washington
Nancy 21 Paris

这个 Sample 里,新增了 Nancy,删除了 Mary,修改了 Sam。

先做外排序:

$ sort -k1 before.txt > sorted_before.txt
$ sort -k1 after.txt > sorted_after.txt

然后利用归并过程来实现你的需求,具体是这样的:

两个迭代器或者指针 fp_before, fp_after 分别指向 sorted_before.txt 和 sorted_after.txt 的第一行,进行如下迭代:

1. 如果 before_key > after_key,说明 after 中的第一行是新增的,输出结果,fp_after 移动到下一行
2. 如果 before_key < after_key,如果 before 中的第一行被删除了,输出结果,fp_before 移动到下一行
3. 如果 before_key == after_key,两个指针都移动下一行,但是移动前先对比当前两条记录,如果不一致,说明修改了

迭代完后,如果 fp_before 没有到文件末尾,那么剩下的内容都会被删除的记录;如果 fp_after 没有到末尾,那么剩下的内容都会新增的记录。

很遗憾,我不会 Go,用 Python3 写了份代码供你参考,时间有限写得不好请见谅:

#!/usr/env/python3
# -*- coding: utf-8 -*-

with open("sorted_before.txt") as fp_before, \
open("sorted_after.txt") as fp_after:

before = fp_before.readline()
after = fp_after.readline()

while before and after:
before = before.rstrip()
after = after.rstrip()

before_key = before.split()[0]
after_key = after.split()[0]

if after_key < before_key:
print("+", after)
after = fp_after.readline()

elif after_key > before_key:
print("-", before)
before = fp_before.readline()

else:
if before != after:
print(' ', before, "=>", after)
before = fp_before.readline()
after = fp_after.readline()

for before_surplus in fp_before:
print("-", before_surplus)

for after_surplus in fp_after:
print("+", after_surplus)

这份代码跑上面的 sample 的结果:

- Mary 15 Tokyo
+ Nancy 21 Paris
Sam 47 Washington => Sam 57 Washington
2019-06-03 15:48:30 +08:00
回复了 ShikiSuen 创建的主题 Apple [警告] OneDrive 可能会毁掉你的 APFS
现在修复了吗?
直接用 diff 能够处理吗?
2019-04-01 18:08:13 +08:00
回复了 szzhiyang 创建的主题 程序员 你们的启蒙编程语言是?
VB -> Pascal -> C -> C++ -> Python -> JavaScript
2019-03-31 03:38:39 +08:00
回复了 ywgx 创建的主题 分享创造 给大家几个日常工具,一行命令搞定基础环境建设
@msg7086 对于如何规范地编写 Linux 软件包我一直很感兴趣,不知道能不能推荐一些入门的资料?
2019-03-31 03:37:18 +08:00
回复了 ywgx 创建的主题 分享创造 给大家几个日常工具,一行命令搞定基础环境建设
@msg7086

很佩服你硬核的 Linux 功底和实事求是的精神。
2019-03-22 18:12:19 +08:00
回复了 Believer 创建的主题 奇思妙想 一个高中生关于教育资源整合的想法
Just do it.
2019-03-01 11:43:41 +08:00
回复了 kexxxfeng 创建的主题 分享创造 用 onenote 画流程图,记笔记是 Surface 还是 iPad 好
你说的 iPad 是指 iPad Pro 吗?
2018-12-30 15:16:23 +08:00
回复了 a7217107 创建的主题 程序员 前端 web 密码加密是否有意义
服务器每次发一个随机盐过来,前端先把密码哈希,然后把哈希值加盐再哈希发回去,服务器拿到二次加盐哈希后,把数据库里的密码哈希用这个盐做二次哈希再比对嘛。 监听到二次带盐哈希也没用,下次盐就变了。
2018-12-25 01:12:49 +08:00
回复了 Halo2018 创建的主题 算法 迫于性能需求,寻 cuda 大神
@Halo2018 cx[]中 0 的密度低吗?
2018-12-23 00:30:13 +08:00
回复了 Halo2018 创建的主题 算法 迫于性能需求,寻 cuda 大神
length 和 n 相等吗?
2018-10-14 13:24:40 +08:00
回复了 dongyx 创建的主题 问与答 Google Analytics 在国内能使用吗? 会不会不准?
@xmsz 我现在用了大概半年了,确实丢数据相当严重, 有没有什么好的替代产品推荐?
1  2  3  4  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2449 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 41ms · UTC 15:53 · PVG 23:53 · LAX 08:53 · JFK 11:53
Developed with CodeLauncher
♥ Do have faith in what you're doing.