2 Egg Problem

2 Egg Problem

 继续我们的推理问题之旅,今天我们要对付的是一个Google的面试题:Two Egg Problem.

我们开始吧! 

No.2  Google Interview Puzzle : 2 Egg Problem

* You are given 2 eggs.

* You have access to a 100-storey building.

* Eggs can be very hard or very fragile means it may break if dropped from the first floor or may not even break if dropped from 100th floor. Both eggs are identical.

* You need to figure out the highest floor of a 100-storey building an egg can be dropped without breaking.

Now the question is how many drops you need to make. You are allowed to break 2 eggs in the process

 

分析与解答:

   

     题目要求试的最大次数最小。首先,讨论两个比较trivial的方案。

 

   方案1:从第一层开始扔鸡蛋,如果鸡蛋不碎,则上一层再扔。这样,如果鸡蛋在某一层碎的话,该层就是临界的层。这种方案的优点在于省鸡蛋,只会摔破一个鸡蛋。还有一个鸡蛋可以带回家,做个鸡蛋羹,补充营养个!  :) 缺点就是,如果鸡蛋在100层才碎的话,那就要试100次啦。那你等电梯要等死啦,而且还要接受别人的打量的目光,心说这怪咖为什么每次都只坐一层楼啊…

 

  方案2 想必很多人都会想到这个方案。我只能说,这是中国计算机教育的成功啊。这就是“二分查找法”。首先在第50层楼扔鸡蛋,如果鸡蛋不碎的话,就去75楼。如果碎了的话,那么对不起,同志。由于你只剩一个鸡蛋了,所以你得小心地从第一层开始,这样才能保证你在鸡蛋碎完的时候能找到临界楼层。这种方法的优势在于,如果你知道你的鸡蛋比较硬的话,你就采用这个方法吧。临界楼层越高,这个方法尝试的次数越小。但这种优势是用临界楼层比较小时比较大的尝试次数为代价获得的。我们看到,如果临界层数在49层的话,我们要尝试50次,而临界层数为100层的时候,尝试次数只有7次。但是,现在的问题是,全部情况下的最大尝试次数最小。这样,虽然在某些情况下,这种方法的性能很好。但是就最差情况而言,还是要尝试50次,好像还是有点大。这边,我们想起来,“二分查找法”的目标是平均性能最佳,并不是最差性能最佳。我们似乎走错了路!!!不过,方案二相比方案一来讲还是有进步的。

 

  方案2似乎陷入了“短板效应”的泥沼,由于最坏情况下的坏性能制约了总体性能的提高。解决这个问题的总的原则应是:“一碗水端平”,尽量做到各种情况下的尝试次数尽量差不多。这正应合GOOGLE的信条Don't be evil,不以别的情况为代价换取另一些情况的指标的提高。做到“不伤害”.(呵呵,这是我瞎联想的)。那么,就照着这条路走吧,我假设每种情况下最大的尝试次数为x.

  则第一次扔蛋的楼层应为x;

第二次扔蛋的楼层应为 x+(x-1);

   依次类推。

   从上面看到,每次我们增加的楼层都是前一次减1.我们所要保证的就是应该在增加的层数变成0之前到顶楼,所以有:

   x+(x-1)++1100

   这是一个等差数列,整理后有:

     x2+x-2000

发现x14

 

我们总结一下:

  第一次在14楼扔,如果碎了的话从一楼再开始扔;

否则在14+13=27层扔,如果碎了的话从15层开始扔;

否则在27+12=39层扔,如果碎了的话从28层开始扔;

……

这样,最大尝试次数为14次就行了。不信你试试。

 

最后,为了体现严谨性,给出本题的模型:

 

转移方程:

minNum[n ] = min(1 + max(i – 1, minNum[n-i])) for 1n

边界条件:

minNum[0] = 0; minNum[1] = 1

这里,n为楼层数,i为起始楼层数。

 

据说这是一个动态规划问题,我还没来得及仔细研究。其实,我的感觉是,很多理论最初的来源都是很朴素的真理,只是我们没学懂,所以把它们想复杂了。所以,很好的理论就这样不被大多数人所理解了。

 

参考文献:

1.       http://blog.youkuaiyun.com/TravelInHistory/archive/2006/12/07/1434098.aspx

2.       http://classic-puzzles.blogspot.com/2006/12/google-interview-puzzle-2-egg-problem.html

内容概要:本文详细阐述了DeepSeek大模型在服装行业的应用方案,旨在通过人工智能技术提升服装企业的运营效率和市场竞争力。文章首先介绍了服装行业的现状与挑战,指出传统模式难以应对复杂的市场变化。DeepSeek大模型凭借其强大的数据分析和模式识别能力,能够精准预测市场趋势、优化供应链管理、提升产品设计效率,并实现个性化推荐。具体应用场景包括设计灵感生成、自动化设计、虚拟试衣、需求预测、生产流程优化、精准营销、智能客服、用户体验提升等。此外,文章还探讨了数据安全与隐私保护的重要性,以及技术实施与集成的具体步骤。最后,文章展望了未来市场扩展和技术升级的方向,强调了持续优化和合作的重要性。 适用人群:服装行业的企业管理层、技术负责人、市场和销售团队、供应链管理人员。 使用场景及目标:①通过市场趋势预测和用户偏好分析,提升设计效率和产品创新;②优化供应链管理,减少库存积压和生产浪费;③实现精准营销,提高客户满意度和转化率;④通过智能客服和虚拟试衣技术,提升用户体验;⑤确保数据安全和隐私保护,建立用户信任。 阅读建议:此资源不仅涵盖技术实现的细节,还涉及业务流程的优化和管理策略的调整,建议读者结合实际业务需求,重点关注与自身工作相关的部分,并逐步推进技术的应用和创新。
134.4 Collecting lxml==4.6.2 (from scrapy_plus->-r /app/requirements.txt (line 1)) 134.7 Downloading https://mirrors.aliyun.com/pypi/packages/db/f7/43fecb94d66959c1e23aa53d6161231dca0e93ec500224cf31b3c4073e37/lxml-4.6.2.tar.gz (3.2 MB) 137.1 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.2/3.2 MB 1.3 MB/s eta 0:00:00 139.3 Preparing metadata (setup.py): started 140.2 Preparing metadata (setup.py): finished with status 'error' 140.2 error: subprocess-exited-with-error 140.2 140.2 × python setup.py egg_info did not run successfully. 140.2 │ exit code: 1 140.2 ╰─> [5 lines of output] 140.2 /tmp/pip-install-kpag10_k/lxml_29d6aecc79634d7eb73c254343ea111a/setup.py:64: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html 140.2 import pkg_resources 140.2 Building lxml version 4.6.2. 140.2 Building without Cython. 140.2 Error: Please make sure the libxml2 and libxslt development packages are installed. 140.2 [end of output] 140.2 140.2 note: This error originates from a subprocess, and is likely not a problem with pip. 140.2 error: metadata-generation-failed 140.2 140.2 × Encountered error while generating package metadata. 140.2 ╰─> See above for output. 140.2 140.2 note: This is an issue with the package mentioned above, not pip. 140.2 hint: See above for details. 140.9 140.9 [notice] A new release of pip is available: 24.0 -> 25.0.1 140.9 [notice] To update, run: python3.10 -m pip install --upgrade pip ------ failed to solve: process "/bin/sh -c pip install -i https://mirrors.aliyun.com/pypi/simple/ --no-cache-dir -r /app/requirements.txt" did not complete successfully: exit code: 1
04-03
<think>嗯,用户遇到了安装lxml==4.6.2时的错误,错误信息显示需要安装libxml2和libxslt的开发包。我需要先理解这个问题的原因。lxml是一个Python库,它依赖底层的C库,比如libxml2和libxslt。在安装时,如果系统缺少这些开发包,就会导致编译失败。 用户可能是在使用Docker或者某种Linux环境,尝试通过pip安装依赖时出错。错误日志中提到“Preparing metadata (setup.py): finished with status 'error'”,并且提示子进程退出代码1。关键的错误信息是“Error: Please make sure the libxml2 and libxslt development packages are installed.”,这说明系统缺少必要的开发库。 接下来,我需要告诉用户如何解决这个问题。不同的Linux发行版安装这些依赖的方式不同。例如,Ubuntu或Debian需要安装libxml2-dev和libxslt-dev,而CentOS或Fedora可能需要安装libxml2-devel和libxslt-devel。用户可能不知道这些依赖需要通过系统包管理器安装,而不仅仅是pip。 另外,用户可能是在构建Docker镜像,所以需要修改Dockerfile,在运行pip install之前添加安装这些依赖的步骤。例如,在基于Debian的镜像中使用apt-get update && apt-get install -y那些包。同时,可能还需要安装Python的开发工具,比如python3-dev,以及编译工具如gcc和make,以确保可以正确编译lxml。 另外,错误信息中还提到pip有新版本可用,但这不是导致当前错误的原因,可能可以暂时忽略。用户可能已经尝试过升级pip,但问题依旧存在,所以重点还是放在安装系统依赖上。 总结,解决方案应包括安装libxml2和libxslt的开发包,以及可能的其他编译工具,并确保在安装pip包之前完成这些步骤。还需要根据用户的具体环境提供不同的安装命令,比如针对不同的Linux发行版。此外,如果是Docker环境,需要调整Dockerfile中的指令顺序,先安装系统依赖再安装Python包。</think>根据你提供的日志,安装`lxml==4.6.2`时出现了编译错误,核心原因是缺少系统级依赖库。以下是逐步分析及解决方案: --- ### **错误原因分析** 1. **关键错误信息**: ``` Error: Please make sure the libxml2 and libxslt development packages are installed. ``` 这说明你的系统缺少`libxml2`和`libxslt`的**开发版**依赖库。 2. **底层机制**: - `lxml`是一个基于C语言扩展的Python库,编译时需要依赖`libxml2`和`libxslt`的C头文件(`.h`文件)及动态链接库(`.so`文件)。 - 若系统中未安装这些开发包,编译过程会直接失败。 --- ### **解决方案** #### 1. 安装系统级依赖库 根据你的操作系统选择对应命令: - **Debian/Ubuntu**: ```bash sudo apt-get update && sudo apt-get install -y \ libxml2-dev \ libxslt-dev \ python3-dev \ gcc \ make ``` - **CentOS/RHEL**: ```bash sudo yum install -y \ libxml2-devel \ libxslt-devel \ python3-devel \ gcc \ make ``` - **Alpine**(常用于Docker): ```bash apk add --no-cache \ libxml2-dev \ libxslt-dev \ python3-dev \ gcc \ musl-dev \ make ``` #### 2. 重新安装`lxml` 确保依赖安装后,重新运行: ```bash pip install lxml==4.6.2 -i https://mirrors.aliyun.com/pypi/simple/ ``` --- ### **针对Docker场景的补充** 如果是在Dockerfile中构建,需在`pip install`前添加依赖安装步骤: ```dockerfile # 示例:基于Debian的镜像 RUN apt-get update && apt-get install -y \ libxml2-dev \ libxslt-dev \ python3-dev \ gcc \ make \ && rm -rf /var/lib/apt/lists/* RUN pip install -i https://mirrors.aliyun.com/pypi/simple/ --no-cache-dir -r /app/requirements.txt ``` --- ### **注意事项** 1. **错误与pip版本无关**: 日志末尾提示`pip 24.0 → 25.0.1`有更新,但当前问题与pip版本无关,无需优先处理。 2. **确保编译工具链完整**: 若仍有其他编译错误,可能需要补充安装`build-essential`(Debian)或`@development-tools`(CentOS)。 --- 通过以上步骤修复系统依赖后,`lxml`应能正常编译安装。如果问题依旧,请检查系统架构、Python版本与`lxml`的兼容性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值