• 请不要在回答技术问题时复制粘贴 AI 生成的内容
liteyou
V2EX  ›  程序员

最烦教人瞎装 X 的,绝必要戳漏下

  •  
  •   liteyou · Jun 7, 2017 via Android · 14542 views
    This topic created in 3266 days ago, the information mentioned may be changed or developed.
    这篇文章教人聊算法装 x,上来就举了这个例子唬人:
    ![]( http://i4.buimg.com/1949/8f9986a08bf04603.jpg)

    计算机绝大多数处理的数据都不是同时按下电梯按钮的时间戳,却让人去思考“同时”的时间戳怎么处理 ,这不是故意整人吗?
    Supplement 1  ·  Jun 7, 2017
    最后一条回复。

    看到大家的讨论,不知道大家对“同时”的理解,分歧还是很大的。请大家读一下原文:

    “一个在 5 楼的人,和在 1 楼的你同时按下电梯按钮 ... ”,如果你依然觉得这个“同时”二字是准确合理的,请找个人去 5 楼和你一起试试呗。

    我的说法是用“分别”:

    “一个在 5 楼的人,和在 1 楼的你 分别 按下电梯按钮 ... ”
    142 replies    2017-06-08 16:29:25 +08:00
    1  2  
    cloudbeyond
        1
    cloudbeyond  
       Jun 7, 2017
    看到了罗辑思维, 可能是物以类聚, 人以群分
    rekulas
        2
    rekulas  
       Jun 7, 2017
    资历浅薄,不敢妄评
    lrigi
        3
    lrigi  
       Jun 7, 2017 via iPhone
    算法的目的个人认为还是去解决问题,乃至使用计算机解决问题,楼主没必要限制于计算机内部
    jint
        4
    jint  
       Jun 7, 2017
    骗小白的文字而已。无视就好了。
    RqPS6rhmP3Nyn3Tm
        5
    RqPS6rhmP3Nyn3Tm  
       Jun 7, 2017 via iPhone   ❤️ 21
    看到标题以为是教人如何装 X11 我就进来了
    Busy
        6
    Busy  
       Jun 7, 2017
    level 不同,站的角度不同。

    就如同准备移民的人经常聊移民
    k9982874
        7
    k9982874  
       Jun 7, 2017 via iPad
    如果是干货装就装吧 人家做了贡献 自己学到了东西
    dremy
        8
    dremy  
       Jun 7, 2017 via Android
    我觉得这里的同时并不是指并行,不必那么严谨。意思应该类似于并发,即在同一时间段内发生事件,进而进行电梯的调度。
    blankme
        9
    blankme  
       Jun 7, 2017 via Android
    我觉得没什么问题
    reus
        10
    reus  
       Jun 7, 2017   ❤️ 11
    呵呵,这就叫装 X 了?该不会是你不懂怎么处理吧?

    “假设 XXXX,问……”
    “不可能 XXXX,你故意整人!你装 X !”
    呵呵
    liteyou
        11
    liteyou  
    OP
       Jun 7, 2017
    @lrigi

    主要是觉得作者不能这样糊弄人。

    虽然我不是搞电梯制造的,按绝大多数的情景,都不会出现完全相同的按下电梯按钮的时间戳吧,但被描述成了“同时”,却让人去思考这个“艰难”的情景,作者故弄玄虚。
    LokiSharp
        12
    LokiSharp  
       Jun 7, 2017 via iPhone
    诶!你们能看到图?
    liteyou
        13
    liteyou  
    OP
       Jun 7, 2017
    @reus

    你看看时间戳的精确度,就一栋楼里那么些人按钮,能整出“同时”的时间来?虽然,我没搞过电梯,电梯公司都是大厂,不会搞精确度只到分钟的时间记录吧
    reus
        14
    reus  
       Jun 7, 2017
    @liteyou 如果对齐到 5 秒、10 秒呢?也不可能出现同时吗?
    很难处理吗?只要定下规则,例如上楼的优先,或者楼层低的优先,然后实现就可以了。看不出哪里“艰难”。
    Aar0nFr4nk
        15
    Aar0nFr4nk  
       Jun 7, 2017 via iPhone
    感觉楼主看法有些偏激了
    Duolingo
        16
    Duolingo  
       Jun 7, 2017 via iPhone   ❤️ 4
    楼主以前读书做题的时候是不是也会说,这假设不可能!
    laoyuan
        17
    laoyuan  
       Jun 7, 2017
    如果粒度是秒的话,我可以算一下每天按多少次就会有 50%的概率出现同时,不过 86400 的阶乘谁帮我算一下?
    blankme
        18
    blankme  
       Jun 7, 2017 via Android
    @liteyou
    换种说法也许你能理解:
    电梯正在从 3 楼运行至 2 楼,在此期间,1 楼和 5 楼的人按下了按钮。
    这两个操作会被认为是同时发生的操作而处理。
    widewing
        19
    widewing  
       Jun 7, 2017 via Android   ❤️ 1
    好歹给个全文链接啊,光这么两段根本就是很好的开头嘛
    yongjing
        20
    yongjing  
       Jun 7, 2017
    算法是指解决问题的方法,解决同时按下电梯问题的方法,自然也能叫算法。 有什么问题?
    xjtlujoe
        21
    xjtlujoe  
       Jun 7, 2017
    算法哪能装逼
    Rice
        22
    Rice  
       Jun 7, 2017
    我觉得这只是举个例子用来比喻而已,有认同的吗?
    laoyuan
        23
    laoyuan  
       Jun 7, 2017
    python3 算出来了,print 出来大概有几十屏长的那么一个数。。
    laoyuan
        24
    laoyuan  
       Jun 7, 2017
    我列个方程 (86400! - (86400 - x)!) / 86400^x = 0.5,算出来每天按多少次就会有 50%的概率出现同时
    Andiry
        25
    Andiry  
       Jun 7, 2017 via Android
    电梯调度算法,叫做算法也没什么不对
    wangxiaoer
        26
    wangxiaoer  
       Jun 7, 2017
    人家只是举个例子而已,在目前这个例子中涉及到的计算的确需要某种算法,所以没有问题。至于你口中的什么严格并行、时间戳,你去给小白讲讲试试。
    本身就是半科普性质的,你来拿个游标卡尺量算,你们的幽默感哪里去了?

    声明一下,没看过罗辑思维的东西,也不知道题主图片中的那个人,就事论事。
    laoyuan
        27
    laoyuan  
       Jun 7, 2017
    解出来了,如果以秒为粒度,那么每天按 346 次就会有 50%的概率出现同时,我这个答案符合直觉么?我列的方程没问题吧?!
    metrue
        28
    metrue  
       Jun 7, 2017 via iPhone
    没关注过逻辑思维,但是这并不是叫人装 x.
    laoyuan
        29
    laoyuan  
       Jun 7, 2017
    用 50 个同学相同生日数据验证了一下,公式没问题,每天按 346 次就有 50%的概率出现秒级同时
    laoyuan
        30
    laoyuan  
       Jun 7, 2017
    大家都来用 python3,我没想到 python3 可以算这么大的数,不知道 PHP 能不能算。。
    liteyou
        31
    liteyou  
    OP
       Jun 7, 2017 via Android
    @blankme

    那 1 楼和 5 楼的人,总有一个先按后按吧。就算是电梯最后处理的是后按的那个数据(按距离优先原则),那也别让人处理 1 楼和 5 楼同时按下的情况吧。就是看到文艺青年在朋友圈感叹倍感收到“算法”教育的真谛,真心觉得写文章不能这样混淆真相的去博热点。
    laoyuan
        32
    laoyuan  
       Jun 7, 2017
    移植到 PHP 上了,没算出来,分子和分母都是 INF,宇宙第一身份岌岌可危
    blankme
        33
    blankme  
       Jun 7, 2017 via Android
    @liteyou 不管 1 楼 5 楼的实际按键顺序,他们的操作被称为“同时”并没有问题,因为只要这些操作落在同一个电梯运行区间,你区分谁快一秒没有任何意义
    liteyou
        34
    liteyou  
    OP
       Jun 7, 2017
    @blankme

    这实际上是 1 楼和 5 楼的人“分别”按下了按钮,但是电梯当成了“同时”的数据处理。但文章不能描述成 “一个在 5 楼的人,和在 1 楼的你同时按下电梯按钮...”吧,这不是故意为难人是什么?
    KeepPro
        35
    KeepPro  
       Jun 7, 2017 via Android
    @laoyuan 兄弟我就扶你 233
    expkzb
        36
    expkzb  
       Jun 7, 2017
    lz 有些钻牛角尖了
    Sh888
        37
    Sh888  
       Jun 7, 2017   ❤️ 3
    就这个事情而言,我觉得可能是 lz 在找茬,或者语文水平不够,又或者是来拉关注的。
    一般语境下的“同时”,就是指有人“一起”按了按钮,没人会理解成时间戳的一致。当然如果要硬扯,你是不是还要扯“相对论”?要找一个“同时”的参照时间?
    jason2017
        38
    jason2017  
       Jun 7, 2017
    @liteyou
    看见你说的“按绝大多数的情景,都不会出现完全相同的按下电梯按钮的时间戳吧”这句话,真心劝你一句,你不适合搞编程。
    Perry
        39
    Perry  
       Jun 7, 2017
    可怕的程序员洁癖
    zjl03505
        40
    zjl03505  
       Jun 7, 2017
    lz 这是在装 X 啊。好好的一个例子一定要钻牛角尖
    cowpea
        41
    cowpea  
       Jun 7, 2017   ❤️ 1
    标题用到 LZ 身上也成立
    liteyou
        42
    liteyou  
    OP
       Jun 7, 2017
    @jason2017 来来来,秀秀你的 git 仓库再装 X,搞的好像又遇到一只深藏的大牛一样 2333
    herozzm
        43
    herozzm  
       Jun 7, 2017 via Android
    lz,一个成熟作品必须考虑同时按下电梯按钮的可能,不然就会出现 bug
    逻辑那边没问题
    jason2017
        44
    jason2017  
       Jun 7, 2017   ❤️ 3
    @liteyou
    我菜鸡一个,但不妨碍我从你的言行看到你的水平,总之,你开心就好。
    blankme
        45
    blankme  
       Jun 7, 2017
    @liteyou 照这样说,“同时”这个词语就是错误的,不可能存在“同时”的现象。纠结这种问题有意思么
    admol
        46
    admol  
       Jun 7, 2017
    lZ 如果是测试的话 , 可能我们先轻松 , 然后就悲剧了
    Tokin
        47
    Tokin  
       Jun 7, 2017
    还是有概率同时按下的啊,你也说“按绝大多数的情景...”,但是生产环境中,少数情景也需要考虑进去的吧。。。感觉不需要那么纠结一两个字,表达出意思,能理解就好了。
    liteyou
        48
    liteyou  
    OP
       Jun 7, 2017
    @herozzm

    真的“同时”,和当作“同时”,还是不同的吧。作为科普文章,本身就是应该告诉读者真相和“电梯”实际的运作方式。

    文章明显是故弄玄虚,让读者以为是在处理“同时”的按下行为时候,有什么过“人”之处。
    Lucius
        49
    Lucius  
       Jun 7, 2017
    LZ 可能是想借文章的语言漏洞表现下自己的高明,只是没想到自己这波逼 装的比文章更瞎。
    liteyou
        50
    liteyou  
    OP
       Jun 7, 2017
    @blankme

    那文章为什么不能表达为“ 5 楼的人,和 1 楼的你 分别 按下电梯按钮 ... ”? -- 这样会让读者觉得电梯不厉害啊 23333
    Tokin
        51
    Tokin  
       Jun 7, 2017
    @liteyou 觉得文章装逼的话,就别读了不就好了,纠结这些弄得自己心情不好当真是没必要了- -
    cloudzhou
        52
    cloudzhou  
       Jun 7, 2017
    电梯分配问题是一个很好的算法问题,这个例子觉得很好啊
    blankme
        53
    blankme  
       Jun 7, 2017
    @liteyou 不是他的表达有问题,而是你带着偏见去理解,你觉得他在 zb,所以就觉得他一切都是错的。
    fortunezhang
        54
    fortunezhang  
       Jun 7, 2017
    我感觉这应该是一个逻辑
    zyqf
        55
    zyqf  
       Jun 7, 2017 via Android
    醒目的标题:一个外行人如何聊算法
    liteyou
        56
    liteyou  
    OP
       Jun 7, 2017
    @Lucius

    你说说看,我这装的高明在哪儿了?用不高嘛的方式,要怎么表达,我就觉得文章说错了,要指出来,要怎么方式?

    就算我指错了也没问题吧,总会有更正确的答案。
    iamjs
        57
    iamjs  
       Jun 7, 2017
    感觉没毛病啊。。。用最简单的和经常能遇到的情况做例子。。。这是很有诚意和能力的表现啊~
    SourceMan
        58
    SourceMan  
       Jun 7, 2017
    好偏激
    不是说主题,是说楼主回复
    好怕这条回复也被怼
    elevioux
        59
    elevioux  
       Jun 7, 2017
    感觉 lz 有点钻牛角尖了。
    没写过电梯的逻辑,但同时的问题在开发的时候还是要考虑的吧。应该就是一个处理逻辑而已,算不上什么算法不算法。
    但文章这样表述也是没问题的。
    starz
        60
    starz  
       Jun 7, 2017
    我觉得原文章看只是为了让非计算机工作人员大概了解算法是什么概念,科普向的,不是专业内容~

    话说这个电梯问题,经常坐电梯的时候都会想到类似的,感觉挺有意思的~
    amon
        61
    amon  
       Jun 7, 2017
    算法太广义了,1+1=2 也是算法,电梯调度也是算法,阿尔法狗也是算法。

    关键,了解算法需要去逻辑思维?那个不是骗智商税的吗。
    asj
        62
    asj  
       Jun 7, 2017   ❤️ 1
    严格意义上计算机确实不会发生“同时”的事件,问题是他举的电梯的这个例子未必关心时间戳啊。
    有可能是每隔一个时间段,或者电梯每到一个空闲点的时候,查询哪些楼层按下了按钮。这时候从电梯调度程序来看,这两个楼层就是同时请求了。
    当然可以建议在按按钮的时候记录时间戳,其实相当于提出了一个先到先得的算法。其实如果只是要解决所谓“同时”的话,时间戳也可以不要,按楼层数字大小定优先级也可以。
    当然这样调度从电梯使用角度是否高效就是另一回事了。
    BOYPT
        63
    BOYPT  
       Jun 7, 2017
    这属于任务调度算法啊,《操作系统》里面的例题式例子。
    lurenw
        64
    lurenw  
       Jun 7, 2017
    你这不是认真,你这就是牛角尖,钻的没啥意义(别怼我)
    thekoc
        65
    thekoc  
       Jun 7, 2017
    只看目前的两段,很合理。
    zhengxiaowai
        66
    zhengxiaowai  
       Jun 7, 2017
    确实是算法,没毛病。
    mseasons
        67
    mseasons  
       Jun 7, 2017
    我觉得专业方面解释和普及两种教育中间很多事情的概念应该是不同吧,这里面主要是面对广大人民群众,又不是人人都是程序员,主要就是让大家明白概念啊。楼主注意三观啊
    v2pro
        68
    v2pro  
       Jun 7, 2017
    确实是算法,一点没有毛病。

    而且 LZ 逻辑很奇怪的点还在于,如果你要驳回我的观点,请给出你的 git 仓库。。。
    moka20477
        69
    moka20477  
       Jun 7, 2017   ❤️ 1
    这个有什么问题么?现在新的大楼的电梯调度你以为只是靠时间戳比较先后? too simple,另外就算是时间戳比较先后,这也是算法,没什么问题(来自一个常年厌恶逻辑思维这种节目的人)
    bearsiji
        70
    bearsiji  
       Jun 7, 2017
    没毛病啊
    Parallel
        71
    Parallel  
       Jun 7, 2017
    不觉得有什么问题,能用日常生活中的例子来试图解释“算法”,这很好啊。
    28ms
        72
    28ms  
       Jun 7, 2017
    这不就比喻一下吗,算法就是为了解决实际问题的。非得黑板手写红黑二叉树才算会吗
    wangxiaoer
        73
    wangxiaoer  
       Jun 7, 2017
    @liteyou ”作为科普文章,本身就是应该告诉读者真相和“电梯”实际的运作方式。“ 你是在逗我? 这篇文章实在讲算法,稍有点常识的人都知道,电梯是在举例子好吧。你的语文不及格,理解力堪忧。

    楼上有人说到了你不适合做编程,我觉得还有一种可能,楼主是小学生,刚学编程、算法没多久,对某些概念还停留在懵懂状态,万一遇到跟自己认知有偏差的东西就觉得颠覆了自己的世界观,就要出来理论,证明自己认知的正确性。

    我倒希望是第二种,这样的话楼主这种态度挺好,反倒是做编程的材料。
    zhidian
        74
    zhidian  
       Jun 7, 2017   ❤️ 1
    你知道计算机里时间是离散的吗?那特么就涉及到时间粒度问题。如果电梯对各种按钮的处理是 10 Hz (这也不算捉急),很可能同时吧。我对楼主是无语的。
    liteyou
        75
    liteyou  
    OP
       Jun 7, 2017
    @wangxiaoer

    是小学生怎么啦?不应该实事求是吗?
    whale
        76
    whale  
       Jun 7, 2017
    看例子似乎没毛病啊,应该不影响外行理解算法吧,LZ 做文学研究的?

    就凭这么一个例子就说人“装 X ”,LZ 似乎有点上纲上线了!
    learnshare
        77
    learnshare  
       Jun 7, 2017
    戳漏 应该是方言?我们那里叫戳了
    LancerXin
        78
    LancerXin  
       Jun 7, 2017
    别人就随便举个例子,你就当真去思考...真的是有点钻牛角尖了.

    而且楼主你的做事态度有问题啊,搞程序的讲究的是逻辑思维,严谨性...没有不确定性...

    如果你思考一个问题,哪怕出现某个问题的概率只有万分之一,你也要考虑..

    哪怕某个问题在这个环境下 100%不会发生,但不能确保在其它环境下不会发生..

    想想千年虫的 bug...
    liteyou
        79
    liteyou  
    OP
       Jun 7, 2017
    世界上没有绝对的高人,也不喜欢所谓的高人忽悠。如果有一个人用这个问题:“ 5 楼的人,和 1 楼的你同时按下电梯按钮,电梯该怎么走 ...” 这样的问题教育我,结果我知道的事情真相是根本就不是“同时”操作(或者说是当作“同时”),我觉得就像是被脑筋急转弯那种题目耍了一样,绝不应该是科学的态度吧,科普不是忽悠真相。
    xiang880401
        80
    xiang880401  
       Jun 7, 2017
    @liteyou 我觉得 @zhidian 提到的离散能解决你的疑问,你可以研究之后再下结论
    heimeil
        81
    heimeil  
       Jun 7, 2017 via Android   ❤️ 1
    实际情况存在一些变量:电梯在几楼,电梯门是打开还是关闭状态;这些都要考虑,如果说电梯在 1 楼,里面的人刚出来,门在准备关闭状态,不能就因为 5 楼的人先按了 0.1 秒就直接关门去 5 楼了啊。
    reus
        82
    reus  
       Jun 7, 2017   ❤️ 1
    就算要处理同时的情况,也不是什么难的算法,能唬到的,也只有弱鸡了。
    弱鸡总觉得别人装 X,总觉得别人整人,原因只有一个,自己太弱。
    batman2010
        83
    batman2010  
       Jun 7, 2017
    @laoyuan
    >(86400! - (86400 - x)!) / 86400^x = 0.5

    不应该是 86400! / (86400 - x)! 吗?
    xiang880401
        84
    xiang880401  
       Jun 7, 2017
    @liteyou 看了你上一条回复补充一句,现实中的事情是可能同时发生(连续)的,到目前为止计算机硬件处理是离散(没办法实现连续)的,真相也有可能不是你想象的那样
    xiaoyang7545
        85
    xiaoyang7545  
       Jun 7, 2017
    楼主真的有点上纲上线了。。这个例子一眼看出来就只是给普通人看的。。还给你扯到什么时间戳。。

    反而觉得楼主更接近于装 X 的
    wangxiaoer
        86
    wangxiaoer  
       Jun 7, 2017
    @liteyou 没看到后半句吗 ”我倒希望是第二种,这样的话楼主这种态度挺好,反倒是做编程的材料。“
    laoyuan
        87
    laoyuan  
       Jun 7, 2017
    @batman2010 你这式子分子比分母打,算概率哪能这么算
    nodeath
        88
    nodeath  
       Jun 7, 2017
    我不知道你在这里装什么逼
    laoyuan
        89
    laoyuan  
       Jun 7, 2017
    每天按多少次电梯就会有 50%的概率出现一次同秒,严格来说方程是这样的:
    (86400! - (86400 - x)!) / 86400^x = 1 - 0.5

    左侧是按 x 次每次都不同秒的概率
    laoyuan
        90
    laoyuan  
       Jun 7, 2017
    算出来 x=346,用 python 算得,PHP 算不出来!
    laoyuan
        91
    laoyuan  
       Jun 7, 2017
    如果把范围缩小到 1 小时 3600 秒,只需要按 71 次,就有 50%的概率出现一次同秒
    liteyou
        92
    liteyou  
    OP
       Jun 7, 2017
    @nodeath

    就是论事,我说文章装 X 是说两个人“同时”按下电梯按钮的“同时”说法不对。你说我装 X,哪里错了,请指出。
    swulling
        93
    swulling  
       Jun 7, 2017
    这就是一道正常的算法场景啊。有本事面试题出这个你和面试官怼:『你这个不是算法题,你们在装 X,我拒绝回答!』

    另外计算机的时间是离散的,所以存在同时事件。
    何况电梯调度算法并不是一个简单的先到先得算法能解决的,后按也可能先得。
    batman2010
        94
    batman2010  
       Jun 7, 2017
    @laoyuan 我把后面的部分省略了。我的意思是第一个减号应该是除号。
    toml
        95
    toml  
       Jun 7, 2017 via iPhone
    楼主上本科时统计课没有学好😆
    xiang880401
        96
    xiang880401  
       Jun 7, 2017
    @swulling
    1. 不管连续的还是离散的,都是有可能同时发生的吧 (如果认可这一条,可以继续看下一条)
    2. 现实是连续的,所以现实中也有可能是同时发生的 (如果认可这一条,可以继续看下一条)
    3. 计算机把 (a) 某个时间段内发生的事情,以及 (b) 真・同时发生的事情,都处理成计算机内部的 “同时“
    18711338458
        97
    18711338458  
       Jun 7, 2017
    很奇怪,出现概率低,所以就当不会发生?
    liteyou
        98
    liteyou  
    OP
       Jun 7, 2017
    @swulling

    没说计算机不存在同时时间啊,但是文章里的这个“同时”和你说的“同时事件”不是一回事吧?
    swulling
        99
    swulling  
       Jun 7, 2017
    @xiang880401
    1. 连续的不可能同时发生,连续代表无限可分,只有数学上的同时,实际上不可能同时,这也是一个很古老的思考题
    2. 但是问题是现实上的时间也是离散的,最小的时间单位是 Planck time,so,物理打败了空想的哲学<_<
    xiang880401
        100
    xiang880401  
       Jun 7, 2017
    @swulling 现实上的时间也是离散?这个是怎么得出的
    1  2  
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1062 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 165ms · UTC 17:56 · PVG 01:56 · LAX 10:56 · JFK 13:56
    ♥ Do have faith in what you're doing.