- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我对算法设计有一个非常基本和普遍的疑问。我已经学习了基本算法,现在正在学习随机算法。我到处观察到教授主要专注于设计最终会尝试降低复杂性的算法。
通常的方法(我观察到的)是学习一些在复杂性方面表现不佳的基本(或旧的)算法,因此目标是用更新的算法修改旧的算法,该算法应该侧重于降低复杂性,而不影响输出。
但在我研究过的大多数算法中,尤其是分布式算法(在分布式操作系统中),例如分布式互斥算法、分布式死锁检测等算法,我观察到的是(而且大部分我认为)设计算法的研究不应只关注复杂度的提高,还应关注算法的完善。
举个分布式互斥算法的例子。最基本的算法是 Lamport 算法,它的修改版本(通过提高复杂性)是 Ricart-Agarwala 算法。由于在分布式环境中通信主要是通过消息传递,对于分布式互斥我们有三种消息:a)请求关键资源 b)回复请求 c)释放关键资源。基本算法使用额外的释放消息(通知所有站点我的站点已释放关键资源,因此您可以进入)。但在高级版本中,他们所做的是通过在回复消息中容纳这些发布消息来丢弃这些消息。因此他们提出了一些降低复杂性的解决方案。
但是当我尝试在java中实现这些算法时,我观察到即使基础算法的复杂度高了一点,但它比高级算法更完美。因为通过减少传输的消息数量(在高级解决方案中),本地站点不再知道远程站点是否实际释放了资源这一事实,因为在确认释放消息后,只有站点更新其本地数据结构,例如请求队列等。如果我们不发送任何明确的发布通知,那么在整个运行过程中,请求将不必要地保留在本地站点的请求队列中。
所以我的疑问是,如果复杂性的增强如此重要,为什么不能完美呢?我的意思是,如果算法以更高的复杂度为代价产生完美的结果,那么与缺乏完美度的增强复杂度解决方案相比,我在输出中获得完美度有多重要?
注意:我所说的完美并不是指正确/不正确的结果。结果总是正确的。只是所产生结果的完美程度或准确性不同。
最佳答案
原则上,对产生完全相同输出的两种算法进行公平的复杂性比较。例如排序。
在你的情况下是不同的,你描述了具有不同行为的算法。
要选择更适合的算法,许多因素决定:
关于算法完善与时间分析 : Does Time complexity matters everytime?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20003975/
我尝试每 5 秒刷新一次最近的列表。我在查看 ajax 并发现了 jquery。 我发现了一个名为“everyTime”的函数 这是我到目前为止所拥有的,我真的不知道如何让它工作......它不起作用
我正在编写这个 C/C++ 程序,该程序旨在查找不同大小数组的平均值、中位数和众数。尽管如此,无论输入如何,我都会遇到段错误。我的代码有什么问题吗?任何建议总是值得赞赏! :) 这是代码: #incl
我想知道每次我从远程仓库获取一些新提交时是否有必要在运行之前进行构建?还是直接启动运行就足够了? 最佳答案 如果您的运行任务依赖于“组装”任务,那么 Gradle 会做正确的事情。如果任何依赖文件已更
我的一个 RMarkdown 脚本中有以下 R 代码: install.packages("dplyr", repos="http://cran.us.r-project.org") install.
我对算法设计有一个非常基本和普遍的疑问。我已经学习了基本算法,现在正在学习随机算法。我到处观察到教授主要专注于设计最终会尝试降低复杂性的算法。 通常的方法(我观察到的)是学习一些在复杂性方面表现不佳的
我正在制作一个基于服务器的应用程序。每次我向数据库发出请求时,我都必须输入所有服务器连接代码。是否有可能以某种方式重用它?在 php 中,您通常有一个文件调用 dbConnect.php(或类似的东西
我制作了一个进化计算器,并且一直想出这个 基本上,您单击按钮,计算机会提示您两次,然后根据用户对提示的回答将内容相乘……我对 HTML 还很陌生,所以…… 这是我的代码 Poke
我尝试使用 uglifyJS2 将所有 JavaScript 文件(来自 ZURB Foundation 6,包括一些自定义文件)连接到一个文件中。 在即将进行的项目中,我不能简单地使用 ZURB 的
当我尝试启动 android studio 时,出现此错误: # # SIGSEGV (0xb) at pc=0x00007f69987bd512, pid=9119, tid=9160 # # J
所以我创建了一个附加组件,可以在打开的每个页面上找到某些字符串,它可以正常工作。我遇到的唯一问题是:当页面使用 AJAX 更新其内容时,我不知道如何检测它并重新运行我的 contentScriptFi
我在本地和我的 azure 服务器上遇到了这条线的问题: var eq = new EquationEntity().Query().Where(x => x.Key == key).FirstOrD
如果我 checkout 一个分支,不进行任何更改,但 gradle 会完全重建项目,当我去 checkout 另一个分支时,git 在终端中给出一个错误,说明已对项目进行了更改 modified:
我正在编写一个基于 LAMP 的 Android 应用程序。 应用程序中有登录功能。 所有的操作功能都很完善。但是, Why Linux makes session files everytimes
好吧,我正在尝试将值放入一个数组中并将它们随机打乱,然后让它在查询中使用该随机值。我知道我的代码很糟糕,不要再使用 mysql 让我们远离那个话题。我不明白为什么这不起作用我有其他类似的东西可以正常工
我在使用 Android 4 (ICS) 时遇到问题我的蓝牙应用程序连接到串行设备在 Android 3 上运行起来就像一个魅力。 但是,在使用 Android 4 时,每次连接到(已配对的)设备时都
每次我退出游戏时都会出现这个错误,我该如何解决? 我已经尝试了将近 2 个小时来修复它我一直在尝试更改最后一行但它仍然没有退出,因为循环有问题?请帮助错误代码: #codes import rand
我正在使用 Tensorflow(1.8) 和 python3.6 中的估算器为我的强化学习项目构建神经网络。我注意到每次使用 estimator.predict() 时,tensorflow 都会加
我刚接触android,想使用UrbanAirship的推送服务。 我下载了示例项目并测试了Push Sample Project,我只是更改了MyApplication.java中的developm
每次在 PHP 中进行方法调用时,我都想调用一个函数。 例子 : $a = new a(); $a->function1(); 这将进行 2 个函数调用:basicFunction()然后 funct
我正在从 PHP MySQL DB 检索以 YYYY:MM:DD HH:MM:SS 格式保存的时间戳。 然后我希望从当前时间戳中减去该时间并显示在表格中,以显示航类在 xyz 秒内起飞。这就是计时器的
我是一名优秀的程序员,十分优秀!