Arrays 将“n”个锁与“n”个钥匙匹配

Arrays 将“n”个锁与“n”个钥匙匹配,arrays,algorithm,Arrays,Algorithm,有n个外观相同的锁和n个不同的钥匙。每个锁只能用给定钥匙中的一把钥匙打开。匹配每个锁钥匙对 我已在^2上用蛮力方法解决了此问题,但我想知道是否有有效的方法解决此问题。请检查此方法是否有帮助- 一, 快速排序方式Θnlogn:可应用快速排序技术解决此问题 为了理解逻辑,问题可以归结为螺母和螺栓 //选择pivot可以是分区的最后一个元素或任何元素。 pivot=分区锁、低、高、键\u pivot // Now use returned pivot to partition keys

有n个外观相同的锁和n个不同的钥匙。每个锁只能用给定钥匙中的一把钥匙打开。匹配每个锁钥匙对


我已在^2上用蛮力方法解决了此问题,但我想知道是否有有效的方法解决此问题。

请检查此方法是否有帮助-

一, 快速排序方式Θnlogn:可应用快速排序技术解决此问题

为了理解逻辑,问题可以归结为螺母和螺栓

//选择pivot可以是分区的最后一个元素或任何元素。 pivot=分区锁、低、高、键\u pivot

        // Now use returned pivot to partition keys - 
        // As key/lock should be at same index
        partition(keys, low, high, locks_pivot[pivot]);

        matchPairs(keys, locks, low, pivot-1);
        matchPairs(keys, locks, pivot+1, high);
例如,

2在以下位置使用哈希函数:

 Add all locks to HashMap<> / plain array
 Iterate over keys to find a matching pair
例如,

如果您发布了您的代码,这会很有帮助。除了尝试外,还有什么其他方法可以确定哪把钥匙打开了哪把锁?你是否应该优化尝试锁钥匙的次数?@biziclop No,我们只能通过尝试来确定钥匙是否适合锁。我们希望尽可能减少将所有锁与钥匙匹配所需的尝试次数。在这种情况下,我看不到比n+n-1+n-2…+1次尝试更好的尝试,即^2。原因是你必须尝试n个锁来匹配第一把钥匙,但是,从这一步你可以转移到第二把钥匙的唯一信息是,你不需要尝试锁——第一把钥匙已经打开了。@BagdanGilevich实际上,在写这个问题时,我还没有完全理解螺母和螺栓问题,所以我试着把螺母和螺栓问题分解成一个更简单的问题。在这里,我正在调查一个确切的案例,当我们只能在试验中测试适合或不适合时会发生什么。事实证明,原始问题的有效快速排序解决方案之所以存在,只是因为在比较中,额外的信息大小较小或较大。OP当前描述的问题与您所指的螺母和螺栓问题有很大不同。例如,钥匙和锁之间没有大小关系。锁或键之间也没有自然的顺序。请注意,只有当锁/键公开某种匹配的id值时,它们才起作用。如果唯一可用的操作是测试给定的密钥是否与给定的锁匹配,那么除了尝试所有n*n-1/2组合之外,别无选择。