📣 独立日限时特惠: VIP通行证立减$68
查看: 3355| 回复: 23
跳转到指定楼层
上一主题 下一主题
收起左侧

Amazon GrayCheck 那道题的时间复杂度讨论

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
看OA有一道题是判断两个byte是否互为gray code

然后看到了一个帖子有两种答案

一个是while循环那种

另一个就是直接bit运算的

bit运算那种应该是O(1)没错了, while循环那种怎么都觉得不是O(n)啊, 总觉得是logn级别的。。求大牛解释~~

谢谢么么哒~



上一篇:Amazon OA换题了么最近。。。
下一篇:分享一个把geeksforgeeks上内容转成书的project
推荐
 楼主| sherry900105 2015-2-22 05:17:39 | 只看该作者
全局:
while循环那种情况是这样的:

int x = (byte)(term1 ^ term2);
while(x != 0){                        
            x = (byte)(x & (x - 1));                        
            count++;               
        }               
        return count == 1 ? 1:0;

个人觉得因为while不是完全遍历了x里面的所有位, 只是挑出了x中的1逐位变为0, 所以总觉得是logn级别的。。应该不是O(n)
回复

使用道具 举报

推荐
lchen77 2015-3-6 18:04:50 | 只看该作者
全局:
话说我怎么觉得用while 循环时, 应该是   
while (res_ox)
36          {
37             if (res_ox & 0x1) count_one++;
38             res_ox = res_ox >> 1;
39          }
这样才是一位一位比较吧?复杂度 O(n), n 是位数,不是数字的太小。
回复

使用道具 举报

推荐
 楼主| sherry900105 2015-2-22 06:00:16 | 只看该作者
全局:

但是实际上位运算这种底层运算应该不是String字符串判断那种一位一位比较啊 我觉得位运算的话应该是直接定位到为1的那个位然后变成0 所以应该是直接忽略了所有的0位 这样的话时间复杂度肯定是小于n大于1的 只有可能是log级的。。不知道这么分析对不对。。
回复

使用道具 举报

🔗
xjwun 2015-2-22 05:42:03 | 只看该作者
全局:
sherry900105 发表于 2015-2-22 05:17
while循环那种情况是这样的:

int x = (byte)(term1 ^ term2);

感觉worst还是O(N)吧,
回复

使用道具 举报

🔗
 楼主| sherry900105 2015-2-22 05:44:10 | 只看该作者
全局:
xjwun 发表于 2015-2-22 05:42
感觉worst还是O(N)吧,

你是指所有位都是1的情况么。。但是不能看worst啊。。二分查找worst还是n呢。。。
回复

使用道具 举报

🔗
 楼主| sherry900105 2015-2-22 05:45:12 | 只看该作者
全局:
xjwun 发表于 2015-2-22 05:42
感觉worst还是O(N)吧,

不对不对说错了。。。= =有个排序算法的worst是n。。脑子都乱了。。
回复

使用道具 举报

🔗
xjwun 2015-2-22 05:48:24 | 只看该作者
全局:
sherry900105 发表于 2015-2-22 05:45
不对不对说错了。。。= =有个排序算法的worst是n。。脑子都乱了。。

个人感觉这个code要数所有为1的为,最后判断是不是只有一位为1,所以我觉得不能像二分那样变成logn,因为每次没有什么丢掉一半的情况,我也不知道对不对,期待大牛解答哈
回复

使用道具 举报

🔗
xjwun 2015-2-22 05:49:21 | 只看该作者
全局:
sherry900105 发表于 2015-2-22 05:45
不对不对说错了。。。= =有个排序算法的worst是n。。脑子都乱了。。

你说的快排吧
回复

使用道具 举报

🔗
zengm321 2015-2-22 07:06:43 | 只看该作者
全局:
sherry900105 发表于 2015-2-22 05:17
while循环那种情况是这样的:

int x = (byte)(term1 ^ term2);

不是O(n), 而是O(1), 因为就只有32bit而已
回复

使用道具 举报

🔗
 楼主| sherry900105 2015-2-22 07:22:26 | 只看该作者
全局:
zengm321 发表于 2015-2-22 07:06
不是O(n), 而是O(1), 因为就只有32bit而已

那那个while循环的复杂度也只有O1?!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表