问题标签 [duplicate-removal]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
objective-c - 匹配重复项的优化算法
我编写了一个小型实用程序来识别 iTunes 中的重复曲目。曲目的实际匹配需要很长时间,我想对其进行优化。我将轨道数据存储在 NSMutableDictionary 中,该 NSMutableDictionary 将单个轨道数据存储在由 trackID 键入的 NSMutableDictionaries 中。这些单独的曲目词典至少具有以下键:
- 跟踪ID
- 姓名
- 艺术家
- 持续时间(以毫秒为单位####.####)
要确定是否有任何曲目相互匹配,我必须检查:
- 如果两首曲目的时长在 5 秒内
- 名称匹配
- 艺人比赛
我这样做的缓慢方法是使用两个 for 循环:
这对于大型音乐库来说变得非常慢,并且只使用 1 个处理器。一项推荐的优化是使用块并批量处理轨道(100 条轨道)。我试过了。如果我的代码最初需要 9 个小时才能运行,那么现在在四核上大约需要 2 个小时。那还是太慢了。但是(在这里谈论我的工资等级)也许有一种方法可以将我需要的所有值存储在“适合堆栈”的 C 结构中,然后我就不必从较慢的内存中获取值。这对我来说似乎太低级了,但如果我有一个例子,我愿意学习。
顺便说一句,我在 Instruments 中对此进行了分析,[NSCFSet member:]
占用了 86.6% 的 CPU 时间。
然后我想我应该将所有持续时间提取到一个排序数组中,这样我就不必在字典中查找持续时间值。我认为这是一个好主意,但是当我开始实施它时,我想知道如何确定最佳批量大小。
如果我有以下持续时间:
然后只需遍历数组,我就知道要在索引 0 处找到歌曲的匹配曲目,我只需要将其与索引 6 之前的歌曲进行比较。太好了,我有了第一批。但是现在我必须从索引 1 重新开始,才发现它的批处理也应该在索引 6 处停止并排除索引 0。我假设我在这里浪费了很多处理周期来确定批处理应该是什么/持续时间火柴。这似乎是一个“集合”问题,但在我的算法介绍课上我们并没有做太多。
我的问题是:
1) 识别匹配曲目的最有效方法是什么?是不是和上面的类似?它是否使用略高于我的知识水平的不相交和 [统一] 集合操作?它是使用 NSArray 过滤数组吗?是否有描述此问题和解决方案的在线资源?
我愿意以最有效的方式(数据结构)重组曲目字典。起初我以为我需要通过 TrackID 执行许多查找,但现在不再如此。
2)有没有更有效的方法来解决这个问题?您如何摇滚明星从第 1 段到优化的解决方案?
我寻找答案的时间比我愿意承认的要长,并发现了这些有趣但无益的答案:
感谢您提供的任何帮助,兰斯
algorithm - 最快的稳定去重算法
我有一个数组,我需要摆脱它的数组,没有重复。我必须将那些具有最小顺序的独特元素留在原始数组中。这大概是我的意思
如果有比这个简单的算法更快的算法?
更新:我无法对数组进行排序。我需要一个“稳定”版本的重复删除算法。所以,如果A[i] == A[j] and i < j
算法必须删除元素A[j]
mysql - 从 MYSQL 中的表中删除重复的电子邮件地址
我有一个表格,其中包含ID
、firstname
、lastname
、address
等列email
。
有没有办法email
从表中删除重复的地址?
附加信息(来自评论):
如果有两行具有相同的email
地址,其中一行将是正常的firstname
,lastname
而另一行将在firstname
. 因此,我可以区分它们。我只想删除名字为“即时”的那个。
请注意,有些记录firstname='Instant'
只有 1 个email
地址。我不想只删除一个唯一的电子邮件地址,所以我不能只删除所有firstname='Instant'
.
请帮帮我。
list - 在 Prolog 中创建列表不包含重复项
我想创建一个谓词:
如果我的目标是find(X,Y),它将返回团队列表 X 和球员列表 Y,没有任何重复...如下所示:
我尝试这样做,但它给出“错误:超出本地堆栈”,如果我不使用 remove_dups 谓词,团队列表,“X”,将会有重复并且程序无法停止......继续像 X =[milan,milan,milan,milan,inter] .... 我该如何更正此代码。?:
非常感谢...
xslt - 如何避免从字符串变量中获取重复的字符串?
我有一个serviceProvideList
包含字符串值的变量。
我使用以下代码分别获取每个字符串:
如何避免变量中的重复值serviceProvideList
?
oracle - 如何防止在选择查询中选择重复行?
我的任务是从 Oracle 数据库中选择关键数据,但我注意到我的选择返回了重复的行。我的报告不需要它们,但我不希望他们删除它们。有人可以帮助仅获取我需要的数据。我已经尝试了以下代码,但这没有帮助。
sql-server-2008 - 防止重复的表格插入
数据库是 SQL Server 2008。我有一个查询,它从一个或多个表中提取行,然后尝试将它们插入到表变量中。
我想要一种防止重复插入的有效方法,所以我想出的是:
但是,这似乎并不能防止在某些情况下重复插入。
似乎(如果您考虑一下并查看查询计划,这是有道理的)在左连接操作中仅使用了 @MyTableVariable 的初始“状态”。换句话说,如果在运行此语句之前@MyTableVariable 已经包含 SomeID,这将防止重复,但如果 SomeTable/SomeOtherTalbe 上的 FROM/INNER JOIN 导致重复的 SomeID,则不会防止重复。
除了简单地在 SELECT 语句上打一个 DISTINCT 之外,还有另一种更有效的方法来处理这个问题吗?
mysql - 如何根据多个字段删除SQL表中的重复项
我有一个游戏表,描述如下:
但是每场比赛在表格的某个地方都有一个重复的条目,因为每场比赛都在两支球队的赛程表中。是否有一条 sql 语句可以用来查看和删除基于相同日期、时间、hometeam_id、awayteam_id、locationcity 和 locationstate 字段的所有重复项?
mysql - 从结果中过滤重复行,不包括一列?
我有一张这样的桌子-
从上表中可以看出,uid 为 13 和 14 的行对于除 uid 之外的所有列具有相同的值。
所以我想过滤除列 uid 之外的所有具有完全相同值的行(即列 uid 可以延迟值),在最终结果中,我想要重复或相似行的行,并且在它的 uid 列中,所有重复的 uid 用逗号分隔格式。
预期成绩 -
我尝试使用DISTINCTROW,但它要求所有列都相同才能将行视为重复。
任何建议表示赞赏。
编辑:我使用 MYSQL 作为数据库。
r - 查找接近重复记录的技术
我正在尝试清理一个数据库,多年来,该数据库已获得许多重复记录,名称略有不同。例如,在公司表中,有“Some Company Limited”和“SOME COMPANY LTD!”之类的名称。
我的计划是将有问题的表格导出到 R 中,将名称转换为小写,替换常见的同义词(如“limited”->“ltd”),去掉非字母字符,然后使用agrep
来查看看起来相似的内容。
我的第一个问题是agrep
它只接受一个模式来匹配,并且循环遍历每个公司名称以匹配其他公司名称很慢。(某些要清理的表将有数万甚至数十万个名称要检查。)
我已经非常简要地查看了该tm
包(JSS 文章),它看起来非常强大,但适用于分析大块文本,而不仅仅是名称。
我有几个相关的问题:
该
tm
软件包是否适合此类任务?有更快的替代方案
agrep
吗?(所述功能使用 Levenshtein 编辑距离,这很慢。)除了
agrep
和之外,R 中还有其他合适的工具tm
吗?我什至应该在 R 中执行此操作,还是应该直接在数据库中执行此类操作?(这是一个 Access 数据库,所以如果可能的话,我宁愿避免接触它。)