• [Inside] What’s the assumptions you are making


    在我们写代码的时候,其实无时不在做assumption,这些assumption会引导我们使用不同的算法,不同的实现,如果我们能够意识到这些assumption,并能validate这些assumption,就可以得到一个好的assumption,好的assumption就可以引导我们设计出更好的算法,更好性能的实现。所以在设计一个算法、实现一份代码之前,一定要把问题搞清楚了,也就是clarify assumption,哪怕那些觉得理所当然的assumption也要拿出来validate/verify一下。

    作为练习的一部分,把前面的几个题目翻出来,看看我们在开始设计算法和写代码之前,都可以clarify哪些assumption:

    有一个链表,除了一个正常的next指针指向下一个节点外,还有一个random指针指向其他节点,向前、先后或者NULL,现在实现一个算法来Copy这个链表。开始问问题吧!

    1. random指针是否也需要保持正确的指向;

    2. random指针是否可能指向链表节点和NULL以为的地址;

    3. 如果链表中还有其他指针,是否需要把指针指向的对象也复制;

    4. 如果OutofMemory,是能复制多少就复制多少,还是不做任何复制;

    5. 如果碰到任何异常,是throw exception,还是返回错误代码;

    6. 计算复杂度和存储复杂度的要求是怎样的;

    7. 对节点进行复制时,是否有ID、CriticalSection、kernel handle等字段需要特殊处理,如果需要,如何处理;

    8. 对节点进行复制时,是否需要考虑线程安全(改变共享数据结构时需要特别考虑);

    9. 该函数的应用场景是怎样的,是否需要对error input做全面的处理,或者内部使用并可以assume其输入在限定范围内,可以用assert来避免非法输入?

    10. 是否允许duplicate的节点存在?

    11. 我是否可以临时修改原来的链表,在函数返回前使之恢复到原来的状态。

    还有哪些事情跟这个问题相关,需要clarify呢?想到了可以再加。下面开始下一个练习:

    题目要求实现strstr(在一个字符串中寻找另一个字符串出现的位置)

    1. 是否区分大小写;

    2. 在pattern字符串是空字符串时,应该返回什么;

    3. 这个函数不涉及写操作,所以不考虑线程安全问题,right?

    4. 是否有效率要求?

    String to Integer (atoi)

    1. 如何处理前导和后置的空格;

    2. 如何处理中间出现的空格

    3. 是否支持-,+或者其他的任何符合,比如*/.等

    4. 是否支持部分parse,比如123abc返回123,或者abc123,a34等

    5. 是否支持wide char;

    6. 如果输入的字符串是NULL,或者为空,如何处理?

    7. 错误处理是通过返回值还是抛出异常;

    8. 如果错误处理是有错误时返回0,那如果本身要转换的字符串代表0,如何处理;

    9. 如果字符串特别长,超出int或者unsigned int的范围,如何处理;

  • 相关阅读:
    ableview中,如何加载自定义cell? 如何改变选中某一行的颜色(或不显示颜色)
    NSRunLoop
    知识点
    类别、延展、继承
    换个地方,说点儿真话,谈点儿人生中的循环定理
    ios-UIViewController的生命周期
    ios-UIView的一些常用的方法
    ios-Frame和bounds的区别
    ios-AppDelegate常用的方法
    ios取沙盒(sandbox)中的路径
  • 原文地址:https://www.cnblogs.com/whyandinside/p/2831887.html
Copyright © 2020-2023  润新知