V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  ipwx  ›  全部回复第 198 页 / 共 200 页
回复总数  4000
1 ... 190  191  192  193  194  195  196  197  198  199 ... 200  
2016-12-27 17:26:24 +08:00
回复了 coolair 创建的主题 问与答 一个 Python 循环问题
@kimchan 。。。四楼的答案当然是对的,因为 return foundPos 在 for 循环体外。

话说你们没人关注一下我的代码吗?它是对的,且只遍历了一遍。
2016-12-27 17:01:36 +08:00
回复了 coolair 创建的主题 问与答 一个 Python 循环问题
我是来搞笑的:

findpos = (lambda items, s1, s2: (lambda f: ([i for (l, i) in sorted((x for x in (f(i, v) for (i, v) in enumerate(items)) if x))] + [-1])[0])(lambda i, v: (0, i) if v == s1 else ((1, i) if v == s2 else None)))

print(findpos(['a', 'b', 'ab', 'ab'], 'ab', 'a'))
print(findpos(['a', 'a', 'b'], 'ab', 'a'))
print(findpos(['b'], 'ab', 'a'))
2016-12-26 14:27:53 +08:00
回复了 lxiange 创建的主题 程序员 来看看这个函数的时间复杂度是多少
@laxenade @rogerchen 首先对于“民间科学家”的不当言论表示歉意。但是我仍然有话反驳。

先列出结论:我认为就你们举的这个例子,无论是 O(n) 还是 O(n log2 n) 都是逻辑自洽的,其中 O(n log2 n) 的论述见我之前的回复。当令 k = log2(n),可得 O(2^k * k)。然而在这里如果我想要把 k 代换成 n 给出 O(2^n * n) 的复杂度就是不恰当的,因为 n 在上下文是有明确含义的,不能把一个符号随意变换含义。

所以对于 O(2^n) 的这个结论,如果按照 n 表示 k 的角度去看,就少了一个 *k 的因子;如果不是这样,那就显然更加离谱了。
- - - -

@rogerchen 对于你说的复杂度分析不应该考虑工程问题,这显然不合适。我们目前的算法都是为了电子计算机设计的,因此所有算法分析和时间复杂度估计都是在电子计算机的前提下成立的;这已经考虑了工程问题。

@laxenade 你说“限制 32bit 的话,那就都变成 O(1)了”,只是大 O 。就算是考虑 32 位整数,在这个例子里面,当限定 n 为 32 位整数, O(15 n) (见我先前的回复)依旧是比 O(15 * 2^32) 更紧的界。同时,算法的复杂度不会小于 Ω(n)。因此 Ω(n) 和 O(15 n) 卡住了这个算法在 32 位整数下的界,因此 Θ(n) 是紧界。

当然如果按照教科书的定义,一切 n < ∞ 的论述都是没有意义的。可是啊,读书不能死扣概念,要领会它的精神。复杂度分析是为了在没有测试算法的前提下估计它的运行时间,当我们有了 32 位整数的大前提下,考虑更细致的界依旧是有意义的,因为我们可以通过计算来估计两个不同算法的优劣。
- - - -

@rogerchen @laxenade 另外还有第二点反驳。你们可能不赞同我说的,“可以定义 i++, sum++, i<n 三个操作为常数时间”。然而你们是出于电子计算机的前提才这么反驳我的。我们谁也不知道将来的量子计算机,乃至什么其他种类的计算机究竟能够有多快,因此我假设这三个操作是 O(1) 是公理,完全不违背理论性。

如果接受这三个假设,那么你们的算法复杂度是 O(n) 是没有错误的结论。当然如果不接受,认为这三个操作的复杂度是 O(log2 n),那么推出来的结论就是 O(n log2 n)。

当我们考虑 32 位定长整数的电子计算机的时候,也可以认为上述三个操作为 O(1),得出 O(n) 的结论。
2016-12-26 11:16:56 +08:00
回复了 lxiange 创建的主题 程序员 来看看这个函数的时间复杂度是多少
@rogerchen @lxiange 你们要说的事情我知道,但是呢……

根据你们的伪代码定义,令 k=log2(n),那么 n++, i++, i<n 三个运算都 <= O(k)。一共进行了 n 次,那么 <= O(3kn) = O(3k*2^k) = O(3n log n)。

发现了没有,你们的第一个问题是混淆了 n 和 k 。这是我说你们民间科学家的第一个原因。

第二个原因,你们混淆了理论性(理想电脑)和工程性的边界。如果按照理论性来探讨,我们可以随时随地把某些操作定义为 O(1)。再说一遍, O(1) 的操作是定义出来的,我可以定义 i++, n++ 和 i<n 三个运算为 O(1),这不违反理论。所以在理论性的前提下,这个函数为 O(n)。

如果按照工程性来考虑,这个世界上没有无线位宽的电脑。所以位宽 k 是常数。按照你们的代码风格为 C 来考虑,这个位宽可以定义为 k=32 。所以工程性为前提,算法复杂度为 O(3kn) = O(15n)。

混淆了理论性和工程性的边界,所以说你们是民间科学家。
- - - -

别拿什么考研答案来说事,我还看不上考研这个层次的题目。
2016-12-26 10:48:10 +08:00
回复了 lxiange 创建的主题 程序员 来看看这个函数的时间复杂度是多少
一个民间计算机科学家的钓鱼贴你们也回得这么起劲干嘛。
2016-12-25 18:22:42 +08:00
回复了 okevin 创建的主题 macOS 新 mac 的输入法和 spotlight 快捷键怎么是相反的?
我喜欢 Ctrl+Space
2016-12-22 15:50:23 +08:00
回复了 nbhec2 创建的主题 编程 OOP 思想真的很先进吗 GOTO 真的不能用吗
非嵌入式领域,人工成本比硬件成本高得多。
apt-get install fcitx-*
2016-12-12 23:51:34 +08:00
回复了 taowen 创建的主题 分享创造 全世界最快的 JSON 解析器 - 比别的快 10x
毕竟静默报错可能会把错误累积到系统其他不知道哪里的地方,这时候查错的成本实在是大得惊人。更别说恶意攻击的情况了。
2016-12-12 23:50:46 +08:00
回复了 taowen 创建的主题 分享创造 全世界最快的 JSON 解析器 - 比别的快 10x
你这代码不能防御错误的 JSON 文件。现在是硬件过剩而软件复杂度超过任何人能处理的时代,宁可用大部分性能去防御错误输入,也不要假定输入是对的。显式报错永远比静默忽略要重要。
2016-12-10 16:53:13 +08:00
回复了 goodbest 创建的主题 MacBook Pro cPro 众筹中:完美匹配 2016 MBP 的扩展 Docker
看了这张图我更进一步认为苹果干掉这么多接口是多赞的事情。
2016-12-04 16:21:15 +08:00
回复了 tbabm 创建的主题 macOS StackSocial 黑五 bundle 中的一些软件
楼主好人,虽然这些我也用不上
我觉得主机的话明显黑苹果更靠谱。
2016-11-27 11:41:32 +08:00
回复了 Osk 创建的主题 Linux Archlinux 升级真的是有一点不太方便
@arakashic 开源社区什么时候连吐槽都不能容忍了,你这什么逻辑。
2016-11-18 11:44:29 +08:00
回复了 tumbzzc 创建的主题 Python windows 环境下创建的 virtualenv 可以直接在 linux 环境使用吗?
一般是不行的。
2016-11-03 17:13:45 +08:00
回复了 jaxonl 创建的主题 iPhone 从安卓换到 iPhone ,头都大了
@njhuar 呃…… 其实大概 iPhone 用户不会关流量的。。。
2016-10-31 23:03:59 +08:00
回复了 imn1 创建的主题 macOS 果家功能键真的是摆设?
@GhostFlying 其实不瞒你说,我很少单步调试。一般都是静态调试 + 日志纠错的。单步效率实在是太低啦,而且写稍微 premium 一点的程序就用不了单步了。比如上次我用 Scala 写 Mesos Scheduler 的时候,还有用 C++ 写一些算法的时候,根本单步不起来嘛。

最近写的程序都是 Python + TensorFlow 的,直接远程 push 到 GPU 节点上跑的,单步更加没用了,只有相信纸上推的公式和加了一堆注释的代码。。。
2016-10-31 18:02:20 +08:00
回复了 heat 创建的主题 Apple 说一些对苹果改变的看法,以及对下一代接口标准的猜想
@winduser 高速有线网络你需要 Thunderbolt …… 所以干嘛黑 USB-C ( Thunderbolt3 )?
1 ... 190  191  192  193  194  195  196  197  198  199 ... 200  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2048 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 63ms · UTC 16:14 · PVG 00:14 · LAX 08:14 · JFK 11:14
Developed with CodeLauncher
♥ Do have faith in what you're doing.