简单性的简单说明。 第一章:理论上简单

简单性的简单说明


图片
CAP包含我们将要回答的主要问题的领域。

前言


我经常听到一些建议:使其更容易。

简单是什么意思? 当我们说对象X很简单时,我们对X的期望是什么? 当我们说某件事比另一件事容易时-我们如何评价它?

哪个更容易:
“一个由五个词组成的小句子”还是“脱氧核糖核酸”一词?
“ 6 * 5”还是“ 481”?

大概:
您有一个设置屏幕。 其中五个与日程表有关,其他五个与通知有关。 您是否需要在主菜单中创建单独的“时间表”和“通知”项目? 还是将所有10点留在一个屏幕上? 用户会更轻松地进行哪些操作?

您可以说这是主观的。 这是由一种“简单感”决定的,对于一个人来说,某事物可以是简单的,而对于另一种事物则可以是简单的。

好吧,然后告诉我,为什么老师花时间解释一些简单的事情? 为什么要编辑文本以使其更容易? 程序员为什么要花时间检查代码,以找出更易于理解和扩展的解决方案?

如果简单性与我们的评估相关,那么最好的策略就是说服力。 让读者相信本文很简单。 或同事,相信我们的决定并不困难。

是否会从质量上改变他们与我们工作成果的互动?

不行

您的文字将不容易阅读,因为它被认为很简单。 即使您周围的每个人都认为它的复杂性与凳子相同,使用它的代码也不会变得更加容易。

如果在面试中被告知您公司拥有干净的代码和良好的文档,并且您相信它,那么这不会影响使用代码的简便性。
而且,即使整个部门都认为代码编写正确并且有停靠点,这也不会影响结果。 他们相信自己的代码可能是错误的。

如果代码是意大利面-将是意大利面。 如果“文档”是“此处我加了2个数字”格式的注释-该代码中没有文档。
没有欲望,信心等将无济于事。

如果您出于相同的原因ruen ,那么如果您只有2盒2块纸杯蛋糕,那么您就不能给5个朋友1块纸杯蛋糕因此无法正常工作。 即使您要为整个公司默想2 + 2 = 5的一年,这也不会改变杯形蛋糕的悲惨局面。

再来一次 有一个对象,它的某些特性会使您认为ru很简单。 如果明天您的评估发生变化并停在“困难”标记,则该对象将不在乎。

可以得出结论,简单性或复杂性不取决于我们的期望。 相反,对象决定了我们将赋予它什么特征。

如果我确信ru它很简单,我想了解我希望在现实中看到哪种对象。 反之亦然,真实物体的什么特征使我认为它很简单。
怎么了 好吧,也许这会让我的生活更轻松?)

如果您是第一次阅读
统计资料
阅读时间:〜30分钟。
字符数:〜25k。

如何阅读文章
一般
我在你眼中没有权威。 我故意不提供有关我自己的信息。 我希望您阅读这篇文章,就像它是由一年级学生写的一样。 从某种意义上说是这样。

如果您发现无法理解或有争议的时刻,请写下它。 这将帮助您改进本文。

而且绝对不要相信我。 我不想让我的话说服你我的纯真。 我希望它们的含义使您相信它的真实性。

关于约定
  1. 目录。 每章都将从它开始。 它简要列出了本章中讨论的问题,并提供了导航到相关小节的链接。
  2. 链接到外部资源。 它们以*单词或短语* (带有语言代码的 链接 或常规链接的形式表示 。 我试图做到这一点,以便您可以选择阅读俄语或英语来源。 不幸的是,我并非总是都能成功找到两者。 在第二章中,这一点尤其明显。 Runet在神经生物学方面的相关信息很差。
  3. 剧透“简短地”。 它位于本章小节标题之后。 如果您已经阅读过本文,则其目的是简化本文的工作。 您可以使用它来快速阅读文章。 但是要小心! 首先,如果不阅读本节内容,您可能会不明白那里写的内容。 这是一个紧凑的论文,而不是它的路径ruen 。 其次,更加危险-在您看来您了解所有内容。 错误的理解及其产生的原因将在以下各章中进行解释。
  4. 剧透“这是数学时间”。 它不被数学计算吓到您。 它复制了以前以文本形式呈现的信息,但是以一种更正式的方式。



一般资讯
关于系列
简单的解释很简单-它是由一系列文章和一个常见问题组成的:“从人类的角度来看,什么是“简单的”?

目前,计划了3章:

  • 从理论上讲很简单-本章专门讨论问题的措辞以及与之相关的主要定义。 你在这里
  • Machine Ex Homo是一章,我们从较高的行为水平开始,以大脑中的神经连接结束,以此来了解我们的意识。 本章已编写,正在编辑中。
  • 只需阅读-致力于阅读任何模型(方案,代码,图形,文本)的人们。 这将是本系列文章的第一篇实用章节,在这里我们将运用我们的知识,并探讨如何构建信息以促进对其的理解。 在写作过程中前进。

这不是我想找到答案的问题的完整列表。 但我想从他们开始。

关于我为什么还要处理此问题的文章将另发表。 让我们只谈谈作者的动机,以及他如何看待这个系列。 本文将在前三章之后撰写。

为什么这篇文章出现?
我已经多次碰到过这样的短语:“使文字更容易写”或“使决定更容易”。
有时我在争执中听到“公正”一词作为争论:“之所以这样做,是因为它更容易!”。 反对者常常试图证明“他们变得更容易”,一些奇怪的论点导致了这一点。

但是当我问人们他们的意思是“简单”时,我听到:
“这是主观的。” 或“这是常识。” 或“嗯,对每个人来说都是不同的方式。”
令我感到困惑的是,相当聪明的人为他们无法准确确定和考虑主观的事物争论了很长时间。 毕竟,如果有味道(例如音乐喜好),那么为什么他们要花时间呢? 我再说一遍,这些人很聪明,他们没有花时间在彼此的音乐喜好上。

我对此进行了很多思考,一年后,我想到了一个简单的想法:如果简单性是仍然可以测量的对象的特征,该怎么办? 这样可以解决所有争端并节省大量时间。 然后把它包起来...

为什么您的简单解释需要三章? 不能更短吗?
因为现实是复杂的。 而本文的复杂性直接取决于它所描述的那部分现实的复杂性。

该系列是数千小时的搜索和组合信息的结果。 还有我为她工作的人们花费的数十万小时。

您将花费几个小时阅读整个系列。 老实说,您将点击所有链接。

我减少了您花费数百次才能获得答案的时间和精力。 并为您节省了正确设置时间。

我不确定这是否是最好的解释。 我的工作还没有完成。 也许在此过程中,我将了解如何改进它。 目前,这是我最简单的解释。


第1章理论上简单


在本章中,我们将研究以下主题:


在本章的最后,我们将讨论Occam的Razor(《 刀锋战士》 )。 如果不提及该原理,那么一篇关于简单性的文章看起来会很奇怪。

1.1问题顺序


简要地
不限制可能答案的问题是无用的。
“简单”特征可以具有两个含义:

1)基础
2)操作简单

我们对第二个感兴趣。

我们的下一个问题:如何评估动作的复杂性以及如何将其与对象关联?

我们的研究始于一个问题。 正确提出问题非常重要。 一个小题外话:

-好吧,请深思,简单性的主要条件是什么?
-我需要考虑一下。
...
...
N百万年后...
-- < 42

//基于一本漂亮的书

我们有一个答案,但是它什么也没有。 有关他的所有信息都包含在问题中,但是问题不是太具体。 我们不能证明 < 42 -真正的主要条件不能显示相反的意思。

这个问题应该限制可能答案的范围。

“简单吗?” -不是一个很具体的问题。 让我们澄清一下。 在本文的开头,我们已经完成了部分路径:

当我们说对象X很简单时,我们对它有什么期待?

根据我的观察,主要有两种情况:

  1. X是不会分解为其组成部分的对象。 在这里,“简单”一词可以用“基本”一词代替。
    图片
    这是一块砖头。 而且,从某种意义上说,他很简单。
  2. X很容易执行我们需要的操作。 例如,如果我们要躺在沙发上,那么沙发就很简单;如果我们需要将其抬高到9楼,那么沙发就很复杂。

对象是基本对象的情况是可以理解的。 但是,如果我们对操作环境中的复杂性感兴趣,该怎么办?

让我们考虑一下。 我们对对象执行操作。

这句话主要有三个实体:

  • 动作-对正在发生的事情的描述。
  • 行动的执行者-我们隐藏在这个词下。
  • 对象是执行动作的对象。

然后,我们对以下问题感兴趣:

  • 如何根据执行动作的对象来评估动作的简单性?
  • 动作与其执行者之间是什么关系?

我们将在下面回答。

1.2易于使用


简要地
我们以类推的方式处理算法复杂性。

我们行动的复杂性是投入其中的行动的复杂性之和。

动作序列称为算法。

该操作会产生结果-这是执行该操作的系统状态的变化。

可以使用接口的概念将动作和对象互连。 接口是一个对象,用于存储有关实现该对象的对象可能采取的操作的信息。

与算法复杂度不同,我们不能只找到基本运算,而必须考虑动作的执行者。

我们的下一个问题是表演者对行动的影响是什么?

让我们看一下动作。

动作的简单性反过来取决于其复杂性。 动作越复杂,就越简单-这是显而易见的。 我们得出以下问题:

如何确定动作的复杂性?


我们该怎么办? 我们可以将其分解为其他序列! “阅读文章”操作可以分为:“阅读第一段”,“阅读第二段”等。 他们依次分解为“读第一句话”,“读第二句话” ...

图片

这样,我们就可以进行复杂程度不同的操作,这些操作对我们而言并不重要,并且不依赖于执行该操作的对象(例如,阅读字母)。 我们将这些动作称为基本动作。

然后,可以在将特定对象划分为基本动作的过程中测量该动作的复杂性。

当动作被分成相同的动作序列时,它们是等效的。

动作还有什么特点?

演算法


对于构成另一个动作的动作序列的描述,我将其称为算法ruen

可以对算法进行一般性描述,例如:
阅读:阅读句子直到文本用完。
以这种形式,阅读适用于许多文本。

但是,据您了解,“阅读句子”操作的数量将取决于文本中句子的数量。

结果


执行动作是有原因的,它们导致某些事情。 因此,让我们的行动取得成果!

结果是发生操作的系统状态发生了变化。 您按下了开关,开关切换到“ on”状态,而厨房中点亮的灯就是此操作的结果。 您读了一个字,结果就是大脑状态发生了变化。

不同的动作可能导致相同的结果。

图片

与对象交流


回到对象。 如前所述,您可以对它们执行不同的操作。 我们需要一种方法来了解此实体或该实体“打算”采取的行动。

我将从一个例子开始。

“那我怎么拖这个手提箱?”
-他旁边有一支笔!

提手在行李箱外部是一条皮革,上面钉有铆钉。 但是我们在这种情况下不在乎。 我们担心手提箱上有一个可以抓住的物体。

我们将所有此类对象称为句柄。 它们可以放在杯子,门,手提箱或水桶上。

图片

我们得出的结论是,示例中有两个笔描述:

  1. 就像皮钉铆钉的小条钉在手提箱上一样。
  2. 作为要解决的主题的概念。

首先是对实现的说明en

第二个是接口的描述。

接口是一个对象,用于存储有关如何与实现该对象的对象进行交互的信息。

为什么需要它们? 很简单:大多数情况下,我们对对象的实现方式不感兴趣。
当我们想打开灯时,我们正在寻找一个开关,而无论它如何工作,对我们来说重要的是我们可以打开/关闭它的状态。
当我们看到一个按钮时,我们已经知道可以单击它。
当我们被告知某处有一支笔时-我们已经知道您可以拿起它。
而且非常方便。

总结


一个动作是定义其算法的其他动作的序列。 该操作的结果是某种系统更改。

动作的复杂性等于针对特定对象的算法基本动作的数量。

对象与动作之间的关系决定了对象的界面。 它存储有关可以对对象执行哪些操作的信息。

我们的下一个问题:
动作与其执行者之间是什么关系?

1.3客观主观性


简要地
为了在具有不同执行者的情况下正确评估对象的复杂性,我们可以为每个特定的艺术家或执行者组设置动作。

我们的下一个问题是现在如何计算复杂度?

您可能会合理地注意到:

“但是,如果您执行相同的操作,结果可能会有所不同! 如果物理学教授能够快速阅读有关弦理论的文章并理解所有内容,那么我将无法使用相同的方法来达成任何目标。 为了获得类似的结果,我必须通过单词寻找定义,阅读其他文章,并花费更多的精力。”

这是一个好点。 我有一个答案。

像任何任务一样,我们有初始条件。 如果更改它们,则更改任务本身。 这导致以下事实:其实施需要采取不同的行动。

您正在阅读文章。 假设您阅读了几页并将其放在一边。 现在,为了阅读该文章,您需要花费更少的精力。 但是,文章本身的复杂性是否由此改变了? 不行 您将要执行的操作已更改。 它是:“阅读文章”,变成:“将文章翻阅至我完成的那一刻,然后阅读至结尾。”

我们该怎么做? 我们将解决所需的结果。 我们记得,可以通过不同的方式达成目标。

此外,我们可以将表演者划分为大致相同的组。 如果我们没有无数的表演者,则此类团体的数量将有限。

现在,对于每个小组,我们描述将导致其达到预期结果的操作。

我们为每个表演者群体采取了一系列行动。 但是现在如何处理复杂性呢?

1.4可能只是


简要地
在具有多个执行者的情况下,我们可以计算对象复杂度的数学期望。 为此,您需要评估不同执行者执行动作的可能性。

贝叶斯定理ruen

下一个问题:如何描述我们使用的对象?

我们有一系列行动。 他们每个人都属于特定的表演者群体。 我们知道如何计算每个特定对象的每个操作的复杂性。

但是,如果我们尝试设置艺术家进入其中一个小组的可能性,该怎么办?
这个问题变成了经典的理论任务。

我们掌握了行动的复杂性。我们有可能由一个随机的人执行每个动作。

我们可以找到复杂度的“平均值”。这就是所谓的数学期望ru为此,我们需要将操作与对象的每种复杂性乘以其发生的概率。

如果您还不知道谁专门对对象执行操作,那么从何处获得这些概率以及如何将执行者分成几类?好问题!

它的考虑超出了本文的范围,但我认为我将举一个有趣的例子。

您是一位作家。您的任务是在具有主题部分的网站上写一篇文章。当您发布文章时,该文章将出现在常规提要和其“部分”的提要中。板块有订阅者,占网站访问者的百分比。共享的供稿显示给所有人。我们假设那些订阅某个部分的人理解其主题,但不了解其主题-否。
让我们的文章写在物理学上。我们已经分析了受众,并且知道网站的3%的受众都订阅了“物理”部分。我们了解到,此部分的订户将从中输入文章的可能性为80%。我们还了解到,从常规Feed中访问文章的可能性为5%。

谁是我们的潜在读者,我们应该为没有订阅“物理”部分的人员“优化”本文吗?换句话说,一个精通物理学的人阅读我们的文章的可能性是什么?

因此,注意,这种可能性约为33%。

我们的潜在读者中,有超过三分之二的人不了解物理学,我们应该考虑到这一点。

怎么发生的?简而言之:一个精通物理学的人访问文章的可能性很高,但他们的人数很少。从通用提要中访问文章的机会很小,这在我们的评估中起着重要作用。想进一步了解吗?这是有关贝叶斯定理ruen的好文章的链接
如果要检查:

现在是数学时间:
3% , 80% . — 0.03*0.8 = 0.024 = 2.4%.

, - = . «» , . , = 0.05*0.03*0.2 = 0.0003, 0.03%.

5% , 4.97%

. (2.4% + 0.03%) .
(2.4+0.03)/(2.4+4.97+0.03) = 0.328.
: ~33%

我们讨论了这些动作以及执行它们的人。是时候讨论最后一个问题了。
我们经常使用“对象”一词,但它没有提供任何有关它的信息。我们需要一些描述,这些描述要足够抽象,以便可以将其应用于许多实体,并且要提供足够的信息,以便我们可以使用它。

如何描述我们使用的对象?

1.5建模系统化


简要地
.

— , .

— , ( ).

我决定尝试笼统地描述文本,表格,图表等。但是怎么做呢?

让我们退后一步,看看他们的“创造”是如何发生的,也许这会对我们有所帮助。

我们写文本。我们有一个特定的想法,我们用文字表述并写下来。而且,这个想法可能不仅是其他形式。我们可以描述图片,音乐,数学对象。

我在写代码。我有将我翻译成代码的要求。它们可以口头表达或代表图像,例如界面的草图。
我们做一个图。我们有一些对象,我们用这种方案描述了它们之间的关系。

在这些过程中有一些共同点。我们有某种系统。我们将其转换为另一个系统,而不必使用相同的“术语”。

在我看来,“建模”一词适用于描述此过程。

因此,模型是一个使用给定符号(术语)描述另一个系统的系统。

此定义导致一个合理的问题:

什么是系统?


系统是一些组件的集合。它由一组可能的状态和它们的当前状态定义。我经常会调用系统组件对象。
它们可以是元素(某些预定义的元素),也可以是由这些元素组成的其他系统。仍然存在诸如连接之类的东西-它们出现在我们想要限制或确定一个对象依赖于另一个对象的可能状态时。

示例:
有2个硬币的系统。其中一个处于“鹰”状态,另一个处于“尾巴”状态。
“老鹰”和“尾巴”是我们系统的要素。

硬币是一个由“头”和“尾”元素组成的子系统,可以处于这些状态之一。对于第一个硬币:

图片

假设我们不能扔硬币,因此无法对系统进行更改。在这种情况下,我们的系统可以描述为:

图片

如果我们可以抛硬币,那么我们的系统可以描述为:

图片

一些系统之间存在依赖关系。假设第二枚硬币的状态不能等于第一枚硬币的状态。

然后设定硬币2种可能的状态,考虑到我们的局限性-以前所有可能的状态,除了其中硬币1。

图片

在这种情况下,我们可以说,硬币2的情况,确定该硬币的状态1.

现在,让我们看看会发生什么,如果我们改变通过在此处添加“肋骨”,可以使硬币处于许多可能的状态。

我们可以将硬币1和2的状态全部配对。

图片

在这种情况下,我们正在谈论限制硬币2的可能状态。

更新:


我用Java创建了一个硬币示例的实现。这是存储库此外,它还显示了如果您为基本操作抛硬币则如何计算复杂度。

现在是数学时间:
S — .
E(S) — .
V — .
e — .
: S=e=E(S)={E(S1),E(S2),E(Sn)},SkS
Sk — , , .. .
: S=(V,e),V={E1(S)En(S)},eV
.

, , , .

:
\ {S_j ... S_k \} 状态决定了可能的状态集 Si
拿笛卡尔积 X=VSj...VSk -我们得到了许多有序的状态集 x=EnSj...EmSk
Y=VSiy=EtSi
带很多有序对 a=xy inXY
如果相同 x 一样 y -条件确定 x
如果相同 x 各种 y ,那么条件是有限的。

聚苯乙烯
顺便说一句,您可以证明只有两个元素(例如0和1)可以描述其对象数是可数的任何系统。 前提是您可以无限创建元素序列。 我认为这是一个有趣的事实。

我受到有关系统理论ru和抽象自动机ru的文章的启发。 这个关于“系统”概念的数学描述版本比我发现的要短一些。

回到模型


我们称该模型为另一个系统,这是第一个映射。 通常,它可以从其他元素构建。 系统模型是地图,系统本身是地域en 。 没有人会去构建其他模型的模型。 您可以绘制地图en的地图。

让我们尝试构建模型。

让我们从经典开始:黑盒子。
您具有:“输入”,“输出”和框。 您将要更改的组件表示为“输入”,将结果表示为“输出”,其余表示为黑框。 这样的模型没有描述系统的内部依赖性,而是将它们隐藏了。 我们不知道如何获得结果。

图片

当我们要研究系统的操作时,通常会使用这种方法,但是同时我们不能“打开它”。 例如,在心理学中。 我们给人们测试,他们解决它们。 我们不知道此刻人们的脑海中正在发生什么。 但是,在收集了足够的数据之后,您可以描述设备盒,这将给出相似的结果。 在Machine Ex Homo部分中,我们将更详细地介绍这一点。

现在,我们将构建一个模型,该模型显示整个组件集及其可能的状态。

您住在古希腊。 您的邻居Zeno ru已经找到您了。 这个艾多夫(Aidov)儿子每天晚上都会闯入您的屋子,并产生另一个令人震惊的谜团ru ,之后您便不眠之夜思考。 您需要睡觉,为此,您至少需要关闭他几天。

上一次他诉诸关于阿基里斯追赶一只乌龟的故事。 在这个夜晚,你的眼睛落在一个水桶上。 我想到了一个有趣的想法:使用水桶和石头更详细地检查其气孔

您希望在乌龟的每个步骤中都能找到阿喀琉斯和乌龟相对于起点的位置。 我们有:一只走路的乌龟,阿喀琉斯,比一只乌龟快10倍。 及其初始位置:1000步和0步。

我们的模型尚不知道如何表示数字。 而且在上面绝对不可能区分阿喀琉斯在哪里,乌龟在哪里,路在哪里。

自然数的表示很简单拿一个桶,把等于这个数的石头数放进去。

现在我们可以描述速度和路径。 在指示跟腱速度的水桶中,将有10块石头。 在桶中为乌龟的速度-一石。 现在,让我们继续前进 。 我们在海龟中放了1000块石头,让阿喀琉斯空着。 当乌龟迈出一步时,我们将石头从速度转移到路径。 完成了吗

还没 我们没有油漆来签名水桶。 只有石头。 如何处理呢?

或者,我们可以将龟桶“速度”放在其“路径桶”的右侧。 用阿基里斯桶做同样的事情。 并推回乌龟的水桶。 现在我们知道在“两个铲斗”的组合中-右侧铲斗是高速的,而左侧铲斗正在行驶。

您看两个桶的两组。 为了找出您必须上去的哪个阿喀琉斯群,观察一下水桶,数一下其中的石头,记住阿喀琉斯的速度是10步,并得出关于水桶归于阿喀琉斯的结论。 如果我们要进行一些更改并使跟腱的速度等于乌龟的速度? 然后,我们检查跟腱的方法通常将停止工作!

因此,在速度和路径桶的前面,我们将放置一个“名称桶”。 现在它已成为最右边。 让我们的规则看起来像这样:如果名称的存储桶为空,则其后的存储桶为乌龟。 如果有一块石头,那么这组水桶就是阿喀琉斯。

图片
我没有用S画石头,但我认为很明显,第一步,阿喀琉斯水桶是空的,乌龟里面装有1000块石头。

你真高兴。 现在,泽农将不得不认真思考为什么他决定永远可以继续进行石头分裂的过程。 至少你真的希望如此。
不幸的是,这没有帮助您改善睡眠。 Zeno确实不是第二天晚上来的,但是现在您自己已经陷入沉思。 石头无法分割的时候会到吗ru

看,对于每一步,我们都在考虑要考虑的每个对象的某种状态。 阿喀琉斯的位置对应一个水桶,海龟则对应另一个水桶。 对于速度,情况是相似的。 我们的模型充分描述了模拟系统所有对象的所有可能状态。

文本也是系统的模型。 在这种情况下,术语是单词。 它们是由其含义或多种含义定义的,这些含义取决于上下文。
我们的感觉也是我们的大脑根据来自外部的信息创建的模型。

简而言之,您总是会遇到模型。

您还记得我们为什么都这样做吗? 以防万一:我们为模型提供了一个定义,然后计算其复杂性。 现在到了,让我们看看如何应用它。

您是用户体验设计师。 您的任务:创建应用程序设置页面。 您知道它们将来不会改变。 一共有十个:五个图形和五个通知设置。

您可以将它们全部放在一个屏幕上。 您还想到了可以在第一个屏幕上进行“计划”和“通知”项目,然后使用五项设置切换到相应的屏幕。

图片

假设我们的用户的记忆力很差,并且习惯了从上到下阅读。 但同时,在我们将选项分组的情况下,他仍然足够聪明,不会在本节中犯错误。 他不阅读屏幕的名称,而是直接进入菜单项。

我们只有10个设置,它们可以显示在屏幕上并带有列表,用户只需戳一下所需的项目即可。 我们认为在这种情况下,用户无需滚动工作表。 另一方面,如果用户从头开始需要设置,则他将更容易找到它们,因为他不必阅读整个列表,因此他可以跳过不需要的一半点。

哪种模型可以使我们进行更简单的交互?

用户可以对列表项执行的操作:阅读并戳入列表项。 转换为界面语言:菜单项具有可读性和可戳性。 所有要点都很短,因此忽略了阅读难度的差异。 我们假设“戳”和“读”动作在我们的上下文中是基本的。 它们的复杂度为1。

我们希望用户同样有可能需要任何物品。 拿走它们中的任何一个都是没有意义的。

当然,您已经对答案有某种预感。 我建议您写下来,并写下您对答案正确的信心。 例如,在1到10的比例中,绝对确定为10,而根本不确定1。 您将需要此数据以便将其与结果进行比较。 在扰流板“决定”下,将进行一项调查。 不幸的是,habr不允许在文本中的任何地方进行民意测验,因此该链接指向Google表单。 在那里您可以浏览并查看总体结果的统计信息。

我建议您带一支笔,一张纸,打开计算器并自己计算难度。 然后才打开扰流板。

解决方案:
如果用户需要第二项,则其操作的算法如下所示:
阅读第一段->阅读第二段-> oke手指和难度,分别为:2 +1 = 3。
要找到平均复杂度,我们需要找到每个项目的导航复杂度,将它们相加并除以10。
对于一个屏幕上的项目:(((1 +1)+(2 +1)+(3 +1)+(4 +1)+(5 +1)+(6 +1)+(7 +1)+( 8 +1)+(9 +1)+(10 +1))/ 10 = 6.5
现在让我们继续子菜单选项的复杂性。 为了找到所需的选项,首先我们需要选择所需的部分并在其上戳戳。 对于第一项,操作如下所示:
阅读第一节的名称->戳->阅读第一段的名称->戳。
难点4。
诚实地计算一下:
(((2 + 1 +1)+(2 + 2 +1)+(2 + 3 +1)+(2 + 4 +1)+(2 + 5 +1)+(3 +1 +1)+( 3 + 2 + 1)+(3 + 3 + 1)+(3 + 4 + 1)+(3 + 5 + 1))/ 10 =(4 + 5 + 6 + 7 + 8 + 5 + 6 + 7 + 8 + 9)/ 10 = 6.5

他们是一样的吗?

...
...
...

老实说,当我想到这个例子时,我期待一个不同的答案。 在我看来,在此任务中使用分组的方法更好。

正如我所承诺的,您可以参加调查并查看答案的统计数据。 并且请不要使用您可以发送多个答案的事实。 我不想强迫您登录到您的Google帐户,以便您更方便地回答和观看结果,并且作为交换,我要求您不要干扰收集统计信息。

那么,如果我们让示例保持不变,但考虑不同的点数呢? 4和4、3和3、6和6?

再次,我建议您自己做。 提示:阅读算术级数总和,并根据总点数建立方程。

以下仅是答案,因此,如果您想知道结果如何,则必须花点功夫。

答案是:
如果每个部分有5分,那么困难将是相等的。
如果有6个或更多,则拆分选项将获胜。
如果少于或等于4,则单选选项将获胜。


我在最后的编辑阶段将此示例插入到文章中。 对我来说,总结一下我们所谈论的很重要。 以易于理解的方式链接前几章中的信息。 这样您就可以轻松想象它并尝试使用我们所说的内容。

我错了 当我写这个例子时,我以为我知道答案是什么。 现在我很惊讶。 不,那不是真的。 当我诚实地进行所有计算时,结果使我非常难受。 在我脑海中,发生了以下类似情况:

-*一致*我们被误会了!

然后把它包起来...
-*语音1 *什么? 怎么会! 我,您的母亲,移动应用程序开发人员! 从我同事的评论来看,我是一个很好的开发人员! 我在这件事上的能力不会引起我很大的怀疑!

-*语音2 *好,是的。 那又如何呢?

-*语音1 *是的,我白天和黑夜都看到这些应用程序。 我读了一堆指南。 我已经列出了数百个清单。 我在该领域具有足够的资格来纠正设计师的错误!

-*语音2 *是的,然后呢?

-*声音1 *我写了该死的文章! 我的大部分工作是使其他人更轻松地与我的决定进行互动! 我已经做了多年了! 不仅在工作时间内,而且几乎所有东西都是免费的。 我的经验已经远远超过了平常的1万小时!

-*语音2 *男孩,我实际上也是你。 您什么也没说,就是重点。

-*声音1 *我得出的结论是我的例子是综合的。 它不能反映现实,一切都会有所不同,因此,我首先建议的答案是正确的。 我的经验使我比本示例考虑的更多。

*警报器和红色指示灯点亮*

-*演讲者的声音*我们已经配置为检测思维中错误模式的那部分意识正在讲话。 注意到错误: 过度自信偏见确认选择性感知的影响 。 人们已经意识到了诉诸权威的方式 ,但这一信息仍在核查中。 由于存在自欺欺人的危险,请您深呼吸并喝茶。

-*语音1 *不自欺欺人! 您知道我所说的一切我们都认为是正确的!

-*语音2 *而且您知道现实与您对现实的看法之间存在很大差异。

-*声音1 *好吧,bliiiiiin,还是这些演讲。

-*语音2 *想象您相信人们知道如何飞行。 从屋顶上跳下来会救你吗?

-*语音1 *我不能。 我看到其他人不会飞,所以我不会对自己做出如此愚蠢的结论。 通常,您正在大刀阔斧。

-*语音2 *你疯了。 否则你被吸毒了。 或者他们给您穿上了理想的虚拟现实衣服,您在其中呆了5年,那里的所有人都飞了出来,您自己知道如何飞行,大脑适应了并且“知道”如何做。 我们的思想,感觉,期望,总的来说,我们是大脑的状态。 至少这是我们的工作假设。 我们知道,有些情况比对逃跑可能性的信心要陌生得多。 还记得那本书“那个娶妻为妻的男人”。

-*声音1 *好的,大脑真的会失败,但是在您的例子中,即使我认为自己在飞行,我也会真的跌倒。 如果我有足够的时间,我会注意到我的飞行方向错误,但是为时已晚。

-*语音2 *好的,现在回到汇报中。 嘿,双关语。 您想到了这个示例。 你知道他的规则。 您知道与实际情况相比,它大大简化了它。 您知道如何解决。 您在最初的假设中犯了一个错误。

-*声音1 *不是我! 我凭直觉做出了一个选择,您知道它是如何工作的!

-*语音2 *而且您知道这通常无法正常工作。 这是给您的另一个证明。

-*声音1 *最后一个论点呢? 毕竟,这确实是一个近似值,实际上,一切都会有所不同。

-*语音2 *此参数为true。 实际上,一切都会有所不同。 仅凭它并不能说明您是正确的。

想象:您正在开始使一个例子更接近现实。 诚实地考虑了动作“戳”和“读”的复杂性之间的关系,研究了人们如何看待屏幕,该列表中名称的哪一部分足以让他们理解这不是重点。
您用大量条件补充了该示例,它变得复杂了数百倍。
抱歉,但是在这种情况下,您“由于直觉”获得正确答案的可能性远低于随机选择的〜50%。
您确定现实会站在您这一边吗? 怎么了 证明一下。

-*语音1 *是,我不确定! 只是...

-*语音2 *困难。 我知道,很难承认你错了。 但是您了解我们为什么需要它。 发生这种情况的事实仅表明我们在刹车,学习得比我们想的要慢。 但是我们知道该怎么办。

-*声音1 * 简单的事实重读,还是什么?

-*语音2 *非常好的选择。 在这种情况下,它总是使我们放心。 您也可以深呼吸。 是的,我们在不到1.5分钟的时间内就发现了这种情况。 我看到了错误检测系统的运行速度有多快? 我认为我们值得。 他不在架子上,有个他妈的“ 潜在的水桶” ,但我们会自己买。

-*声音1 *但有趣的是,现实中会发生什么...

-*语音2 *您是否忘记了我们为什么撰写文章?

...
...
...

对于这么多的题外话和例子,我深表歉意。 也许您还没有准备好进一步阅读,并且您想再考虑一遍。 这是一个不错的选择。

开头有一个目录,您可以将文章添加为书签并快速返回到该位置。

您决定继续吗? 然后,我们要谈的是最后一个话题。

1.6银翼杀手


简要地
奥卡姆剃刀和假设的可能性。

Occam的剃须刀在系统简单性方面。
表示变更的复杂性 C 系统复杂度如何 C 然后如何 C
k=CC/Cand
如果 k 大于1是个好变化。
如果 k 小于1是可以接受的,但不能付清零钱。
如果 k 小于0是非常糟糕的更改。

如果我们假设复杂度会随着模型中对象数量的增加而增加,并且我们已经有了一定的模型集,那么我们会得到最好的选择是对象数量最少的模型,这与Occam Razor的措辞非常相似。

您很可能知道Occam的Razor,但以防万一,我会提醒您:
“除非绝对必要,否则不应吸引新实体。”

通常,此原理的解释如下:在所有假设中,最可能的是最短子程序(或更简单地说,是更短的子程序)描述的那个ruen1en2

现实生活中的样子:
如果您打开灯并且灯点亮,则假设可能如下:

  1. 开关闭合电路,电流流过灯泡。
  2. 开关将脚的小侏儒踢了一下,后者连接了电线,结果电路闭合,电流流过灯泡。
  3. 开关踢了小矮人,小矮人推着小龙坐在其中的小车,小龙被火焰吓坏了,熔化了焊料,连接了电线,结果电路闭合,电流通过了灯泡。

在这些假设中,最好是包含较少实体且没有侏儒的假设。但是,如果在打开灯泡时听到开关发出了安静的咒骂,则第二个假设是可取的,因为第一个假设没有解释开关为什么会磨损,而第二个假设包含冗余实体。

我会说实话。当我第一次听说奥卡姆的剃刀时,我没有想到任何假设。而且其措辞含糊的措辞使我想到了这是一个普遍原则,即减少系统中实体的数量,一切都会变得很酷。

我很误会

但是,当我对系统的简单性进行了描述时,我意识到了如何纠正对这一原理的错误解释。并从中做出一些有用的事情。

我们有一个系统更改前后。

如果“前后”复杂度的差异大于进行更改过程的复杂度,则此更改是合理的。可以理解,更改并没有影响结果(至少我们需要的部分)。让我们称之为……简化的必要条件。

再一次:

变更后系统 预期简化应该大于变更本身的复杂性。

如果我们表示变更的复杂性C 系统复杂度如何 C 然后如何 C 然后我们得到:

CC>C
我们还可以表达一些类似于效率的变化。
k=(CC)/C
如果 k满足必要的简化条件的一个好的,符合犹太标准的变更不只是一个。
如果k小于1,但大于0-这意味着您简化了系统,但花了更多精力却没有获得利润。
如果k小于0,则表示您不值得进行这样的更改。你太复杂了。

为什么需要它?好吧,例如,您在时间有限的情况下采取行动,并且希望优先考虑要进行的更改。变化大k应该首先考虑。

示例:

我们有两个文本,一个带有一个示例,另一个没有。

一方面,我们增加了文本的数量,从而使文本变得复杂。但是,另一方面,由于这个原因,一些读者不会在Google上搜索“ Occam剃刀示例”,这比仅仅阅读要复杂得多。如果根据我们的估计,会有很多这样的读者,那么引入示例将简化我们的文章。

我们不要忘记,我们也采取了一些行动来形容他,而这些行动都有其自身的复杂性。如果我们花了太多的行动,而简单化还不够,那么引入我们的本质“是不成功的”。

嗯,这一切与Occam的Razor有什么关系?

假设我们已经有几个系统。它们的复杂性直接取决于实体的数量(在现实世界中,事实并非总是如此,正如我们已经发现的那样)。这些系统的操作结果适合我们。

既然系统已经存在,那么C0(您无需采取任何措施即可更改系统)。让我们以最少实体数的系统为例,进行计算k相对于其他系统。我们明白了k将等于负无穷大。从简单的角度来看,在这种情况下,选择与包含最少对象的系统不同的系统是一种非常愚蠢的解决方案。这告诉我们,在所有系统中,我们应该选择一个包含最少对象的系统。可疑地类似于Occam的Razor。

使用这种条件还能描述什么?
例如,您可以评估什么时候值得应用各种代码改进实践,什么时候没有意义。

实际上,如果您在大学编写任务,该任务的代码将被读取一次(或根本不被读取,而只是看其工作原理),那么您就不必担心它被很好地读取。

但是,如果您正在编写一个OpenSource项目,并且数百人将使用您的代码,或者编写您计划开发的项目,则应注意其质量。

如果要编写纲要,则应评估将来是否需要它。如果老师只检查其可用性,并且所有信息都更容易在Google中找到,那么为什么要使其复杂化?

如果您正在撰写文章,请确定您如何看待与文章的交互。例如,本文不应仅阅读一次。我尝试对其进行优化以进行快速搜索。这就是为什么在每个部分的开头都有一个“简短地”扰流板和目录的原因。

哦,如果我们能以某种方式描述一个人将如何阅读我们的模型,并发现这种阅读模型的复杂性。我们可以肯定地说,我们的行动将如何影响这一过程的复杂性,并将我们的理论应用于大量实际问题中。

不幸的是,为此,您需要创建一种通用算法来读取任何模型的人。如果您觉得这是一项非常艰巨的任务-您说对了。

幸运的是,我已经完成了部分工作。

, Machine Ex Homo , . , , , . . , , , . .

— , .

PS
.

, — . , , .

.

: , . , , - .

, , . .

, , . .
, , . , , .
, , simple.explanation.of.simple@gmail.com . , , . , , -, .

:
CC BY-NC-SA 4.0

Source: https://habr.com/ru/post/zh-CN432460/


All Articles