我有一个关于我正在处理的问题的问题。我必须随机播放视频而不重复视频。每个播放列表中的每个视频只能播放一次。每个视频都有一个从 0 到 max_video_count 的唯一 ID,该 ID 在运行时确定(取决于服务器)。
我现在要做的是,我创建了一个链接列表,其中添加了每个播放视频的唯一 ID。比我随机创建一个介于 0 和 max_video_count 之间的随机数,如果该数字已经在链表中,则进行线性搜索,如果是,我计算一个新数字..然后再次线性搜索..等等!
显然这不是很实用,有时需要很长时间才能找到一个元素。特别是当已经播放了很多视频时。
所以我想,我实现了二进制搜索而不是线性搜索,但这给我带来了我必须先对列表进行排序的问题。因此,我的下一步是思考,我在插入新的 unique_id 时对列表进行排序,而不是进行二分搜索。
我知道与 O(n) 线性搜索相比,二分搜索是 O(log n),这是一个很大的进步。但是对列表进行排序也是 O(n),因为要找到正确的位置,我必须再次进行线性搜索.....所以我找到了解决方案,而不是二进制搜索将 O(log N * n) 与O(n) 线性搜索 -> 快速线性搜索。是对的吗?也许我的整个方法都是错误的......但我还想不出更好的东西......
我对算法很陌生,所以如果有人能在这里启发我会很好:-)
问候马库斯