列表中的相似元素

发布于 2024-11-15 01:44:45 字数 350 浏览 0 评论 0原文

给定 N 个列表,每个列表中包含 M 个数字,我们必须从每个组中找到一个元素,例如 每对 ai aj 给出 |ai-aj|尽可能小。

例如 我们有 3 个列表

{12,16,67,43}

{7,17,68,48}

{14,15,77,54}

为了最小化结果,我们必须选择 列表 1 中的编号 16 列表 2 中的编号 17 列表 3 中的编号 15 所以

|16-17|=1
|16-15|=1
|17-15|=2 

我们的结果是:2

如何快速解决它?在 N*M 时间内?或者记录一些时间

克里斯

With given N lists of M numbers in each list we have to find ONE element from each group such
every pair ai aj gives |ai-aj| as small as possible.

For example
we have 3 lists

{12,16,67,43}

{7,17,68,48}

{14,15,77,54}

And to minimize result we have to pick
number 16 from list 1
number 17 from list 2
number 15 from list 3
so

|16-17|=1
|16-15|=1
|17-15|=2 

so our result is :2

How to solve it fastly? in N*M time ? or log something time

Chris

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

宛菡 2024-11-22 01:44:45

如果使用线性搜索,则一次匹配的复杂度为 O(N*M)(即,对于集合 j 中的每个元素,对集合 i 中最相似的项进行线性搜索,并选择这些结果中最小的一个。

如果首先对每个集合进行排序,则排序需要(至少) O(N log N)+O(M log M),搜索需要 O(M log N)(其中 N 是数组中的元素数量)集合 i,M 是集合 j 中的元素数量)。通过这两个集合,您可能可以将组合搜索的时间减少到 O(N + M)。

If you use a linear search, the complexity is O(N*M) for one match (i.e., for each element in set j, do a linear search for the most similar item from set i, and pick the smallest of those results.

If you sort each set first, you get to (at least) O(N log N)+O(M log M) for the sort, and O(M log N) for the searches (where N is the number of elements in set i, and M the number of elements in set j). If you walk through the two sets together you can probably reduce that to O(N + M) for the combined search.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文