Algorithm 针对以下问题提出一个O(logm)算法

Algorithm 针对以下问题提出一个O(logm)算法,algorithm,big-o,Algorithm,Big O,我需要为以下内容提出一个算法:假设我们有一个由0和1组成的数组。从数组开始到索引m,数组用零填充,其余所有索引用1填充。我需要在一段时间内找到这个索引m。我的想法是这样的:我认为这就像是二进制搜索,首先我看数组的中间元素,如果它是零,那么我忘记了数组的左边部分,对右边部分做同样的操作,继续这样做,直到遇到一个。如果中间的元素是一,那么我会忘记右边的部分,而对数组的左边做同样的事情。这是正确的Ologm解决方案吗?谢谢它不像二进制搜索,而是二进制搜索。不幸的是,它是OlogN,而不是OlogM 要

我需要为以下内容提出一个算法:假设我们有一个由0和1组成的数组。从数组开始到索引m,数组用零填充,其余所有索引用1填充。我需要在一段时间内找到这个索引m。我的想法是这样的:我认为这就像是二进制搜索,首先我看数组的中间元素,如果它是零,那么我忘记了数组的左边部分,对右边部分做同样的操作,继续这样做,直到遇到一个。如果中间的元素是一,那么我会忘记右边的部分,而对数组的左边做同样的事情。这是正确的Ologm解决方案吗?谢谢

它不像二进制搜索,而是二进制搜索。不幸的是,它是OlogN,而不是OlogM

要在OlogM中找到边界,请从另一端开始:尝试位置{1,2,4,8,16,…2^i}等等,直到找到1为止。然后在2^i和2^i+1之间的间隔上进行二进制搜索,其中2^i+1是发现1的第一个位置

找到第一个1需要OlogM,因为每次迭代索引都会加倍。然后,二元搜索采用另一个OlogM,因为间隔2^i..2^i+1的长度也小于M。

它不像二元搜索-它是二元搜索。不幸的是,它是OlogN,而不是OlogM

要在OlogM中找到边界,请从另一端开始:尝试位置{1,2,4,8,16,…2^i}等等,直到找到1为止。然后在2^i和2^i+1之间的间隔上进行二进制搜索,其中2^i+1是发现1的第一个位置


找到第一个1需要OlogM,因为每次迭代索引都会加倍。然后,二进制搜索采用另一个OlogM,因为间隔2^i..2^i+1的长度也小于M。

为什么不编写伪代码,然后找出答案?实际上,我不确定我的解决方案是OlogM还是Ologn,其中n是数组的总大小。谢谢你的否决票!为什么不编写伪代码,然后找出答案呢?实际上,我不确定我的解决方案是Ologm还是Ologn,其中n是数组的总大小。谢谢你的否决票!它不应该在2^i和2^i-1之间吗?哦,好吧,你说2^i+1是我发现1的第一个位置是的,我想这是可行的。谢谢,不是应该在2^i和2^i-1之间吗?哦,好吧,你说2^i+1是我发现1的第一个位置是的,我想这是可行的。谢谢