Algorithm 卡片翻转器分析

Algorithm 卡片翻转器分析,algorithm,Algorithm,我很快就要在数据结构课上考试了。为了做好准备,我正在浏览一些我在网络上发现的基于算法的问题,并遇到了一个我似乎找不到的问题 你走进一个房间,看到一排n张卡片。每个人都有一个号码席 写在上面,i的范围从1到n。然而,最初所有的牌 你的脸朝下。你的目标是找到一个本地最小值:也就是说,一张我想要的卡片 数量小于或等于其邻居,Xi-1>=席二元搜索是走的路。以下是您如何做到这一点的大致示意图: 看看第一个和最后一个元素。如果其中一个是min,则返回它 看看中间的元素。如果是min,则返回它。否则,它的左

我很快就要在数据结构课上考试了。为了做好准备,我正在浏览一些我在网络上发现的基于算法的问题,并遇到了一个我似乎找不到的问题

你走进一个房间,看到一排n张卡片。每个人都有一个号码席 写在上面,i的范围从1到n。然而,最初所有的牌 你的脸朝下。你的目标是找到一个本地最小值:也就是说,一张我想要的卡片
数量小于或等于其邻居,Xi-1>=席二元搜索是走的路。以下是您如何做到这一点的大致示意图:

  • 看看第一个和最后一个元素。如果其中一个是min,则返回它
  • 看看中间的元素。如果是min,则返回它。否则,它的左邻居或右邻居必须小于它。在那一半上重现
  • 这个想法是,如果我们知道中心元素的左邻域比它小,那么左半部分的某个地方必须有一个局部min,这样我们才能安全地在那里递归。右半部分也是如此

    换言之,一半的数据不会有局部最小值的唯一方法是,如果它是单调的或上下波动,这两种情况都不会发生,因为我们知道端点值


    此外,运行时显然是log(n),因为每个步骤都需要固定的时间,我们必须执行log(n)步骤,因为我们每次都将数据减半

    如果是在日志时间内,则当您不断选择中心卡,然后根据值将剩余卡向左或向右分割时,建议使用二进制搜索类型的解决方案。这基本上与此问题相同:@narutserewattanawoot正是我要找的,谢谢。