zoukankan      html  css  js  c++  java
  • Algs4-2.3.15螺丝和螺帽

    2.3.15螺丝和螺帽。(G.J.E.Rawlins)假设有N个螺丝和N个螺帽混在一堆,你需要快速将它们配对。一个螺丝只会匹配一个螺帽,一个螺帽也只会匹配一个螺丝。你可以试着把一个螺丝和一个螺帽拧在一起看看谁大,但不能直接比较两个螺丝或者两个螺帽。给出一个解决这个问题的有效方法。

    1) 将螺丝与螺帽分开,形成一个螺丝堆,一个螺帽堆。

    2)将螺帽按任意次序排成一排。

    3)从螺丝堆中任取一个螺丝。

    4)将这个螺丝与螺帽排列中的螺帽按下述方式进行对比,以便实现左边放置小于匹配的螺帽,右边放置大于匹配的螺帽。

       4.1)从左向右一个一个螺帽与这个螺丝进行对比,
             当遇到小螺帽时,继续向右对比,
             当遇到匹配的螺帽时将这个螺帽放置在一边,然后继续向右对比,
             当遇到大螺帽时停下,
             当遇到或越过从右向左推进的位置时结束本轮对比,
             当遇到一对匹配的螺丝螺帽时结束本轮对比,
             当遇到右边没有螺帽时结束本轮对比。

       4.2)从右向左一个一个螺帽与这个螺丝进行对比,
             当遇到大螺帽时,继续向左对比,
             当遇到匹配的螺帽时将这个螺帽放在一边,然后继续向左对比,
             当遇到小螺帽时停下,
             当遇到一对匹配的螺丝螺帽时结束本轮对比,
             当遇到左边没有螺帽时结束本轮对比。

       4.3)交换上述找到的大小螺帽位置,然后从停下的位置按原方向继续按4.1、4.2方式进行对比。

       4.4)结束一轮对比后,刚才匹配的螺帽放在螺帽排列的交界位置,然后把与之匹配的螺丝放在这个螺帽的下方,
            这样便实现了左边放置小于匹配的螺帽,右边放置大于匹配的螺帽。

       4.5)从螺丝堆中再任取一个螺丝,将它按二分查找的方式与已匹配的螺帽进行对比,以便确定与这个螺丝匹配的螺帽属于哪个一一对比段,
            确定一一对比段后再接4.1至4.4的方式对这个一一对比段进行动作。

            一一对比段是指以下情况之一的段:
             a)两个已匹配的螺帽形成的一个段,并且两个已匹配螺帽之间没有已匹配的螺帽。
             b)一个已匹配的螺帽与一个与最左边 或 与最右边的螺帽形成的一个段,并且这两个螺帽之间没有已匹配的螺帽
           
       4.6)如此反复直到取完所有的螺丝。

    另一种方法是:从4.5)开头用螺帽将螺丝切分成两组,然后螺丝再确定螺帽,如此反复交替进行。
  • 相关阅读:
    015.现场.快用Scala(4月)
    014.科普.有生产力的Sql语句
    JQuery速记
    草稿
    使用jquery.layout.js构建页眉/页脚/左侧导航/中间展示内容的网页结构
    实践自己的WebSite______流水
    如何生成带注释的DLL文件
    MVC如何在解决方案下创建文件夹
    如何利用子视图
    【草稿】JS中如何操作时间
  • 原文地址:https://www.cnblogs.com/longjin2018/p/9860231.html
Copyright © 2011-2022 走看看