组内讨论

组内讨论课后习题5_4:

图片发自App

题目通俗易懂,一目了然用数组或链表,时间复杂度虽是O(n²),但50w的平方就超时了。

思路是物理方法(匹配),但使用了散列表来提高效率,数据分布为正方形时,最差时间复杂度O(n^(3/2)),我们组当然也查了网友的某方法时间复杂度虽O(n),但有测试用例过不去。

下图的HashMap相当于我上文说的散列表,key是某学生所在的学校,LinkedList链表装的是所有此学校想转去其他学校的学生,比如某同学是学校1想转去学校3那么就在下标1的链表里插入值为3的节点,为什么复杂度低了呢?因为如果是单纯一条链表的话平均每次都要跑一半才能找到匹配的数据,而现在把数据分散为多个链表,上图的同学要找匹配的同学的话就把学校3当做下标去到那个链表里找有没有学校1即可,当然最优时间复杂度为n,当数据只有从A到B和B到A时。

若要相对专业的计算时间可行性的话,计算机主频3GHz左右,虽主频不能完全衡量一个计算机性能(一般以外频作为参考,因为速度比主频慢)但在此只是为了验证下可行性。。。

主频:3G=3×10^9

500000²=2.5×10^11 运行时间≈100s

500000^(3/2)≈3×10^8 运行时间≈0.1s

图片发自App

运行截图:

网友的程序第一个测试用例过不去。

图片发自App

你可能感兴趣的:(组内讨论)