这是一个更通用的问题,不是特定于语言的。有关想法和使用算法的更多信息。
系统如下:
它在一群朋友之间登记小额贷款。Alice
并且Bill
要去吃午餐,比尔的卡不起作用,所以爱丽丝付了10美元的饭钱。
第二天Bill
和Charles
彼此相接的火车站上,Chales没有钱票,所以Bill
给他买一个,$
5。当天晚些时候,她从朋友那里Alice
借了5美元Charles
和1美元,Bill
给她的朋友买了礼物。
现在,假设他们都在系统中注册了该 交易 ,则如下所示:
Alice -> Bill $10
Bill -> Alice $1
Bill -> Charles $5
Charles -> Alice $5
因此,现在,唯一需要做的就是Bill
给Alice
4美元(他给了她1美元,然后Charlie
将 5 美元 转给
了Alice
alredy),它们就处于初始状态。
如果我们将其扩展到具有多个事务的许多不同的人,那么获得最少事务的最佳算法是什么?
实际上,这看起来像是双重录入会计概念可以帮助完成的工作。
您的交易可以构造为簿记条目,因此:
Alice Bill Charles Balance
Alice -> Bill $10 10 10- 0 0
Bill -> Alice $1 9 9- 0 0
Bill -> Charles $5 9 4- 5- 0
Charles -> Alice $5 4 4- 0 0
那里有。在每笔交易中,您要贷记一个分类帐帐户,然后借记另一个帐户,以使余额始终为零。最后,您只需算出要应用于每个帐户的最小交易数即可将其恢复为零。
对于这个简单的案例,这是从Bill到Alice的简单4美元转帐。您需要做的是,每增加一笔交易,至少将一个帐户(最好是两个)减少到零。假设您遇到了更复杂的事情:
Alice Bill Charles Balance
Alice -> Bill $10 10 10- 0 0
Bill -> Alice $1 9 9- 0 0
Bill -> Charles $5 9 4- 5- 0
Charles -> Alice $5 4 4- 0 0
Charles -> Bill $1 4 5- 1 0
那么所需的交易将是:
Bill -> Alice $4 0 1- 1 0
Bill -> Charles $1 0 0 0 0
不幸的是,在某些州,这种简单的贪婪策略无法产生最佳解决方案(j_random_hacker
为指出这一点而赞誉)。一个例子是:
Alan Bill Chas Doug Edie Fred Bal
Bill->Alan $5 5- 5 0 0 0 0 0
Bill->Chas $20 5- 25 20- 0 0 0 0
Doug->Edie $2 5- 25 20- 2 2- 0 0
Doug->Fred $1 5- 25 20- 3 2- 1- 0
显然,这可以逆转为四步(因为要到达那只需要四步),但是,如果您不明智地选择了第一步(Edie->Bill $2)
,那么您将获得的最低限度是五步。
您可以使用以下规则解决此 特定 问题:
这将导致以下顺序:
Alan->Bill $5
。Chas->Bill $20
。但是,这仅是因为可能性很小。随着人数的增加和小组之间的相互关系变得越来越复杂,您很可能需要进行详尽的搜索,以找到所需的最小移动次数(基本上是上述规则1、2和3,但已扩展以处理更多的深度)
。
我认为这是在所有情况下为您提供最少数量交易的条件。但是,可能不需要 最佳
答案(在这种情况下,最好的意思是最大“每单位成本”)。可能即使是基本的1/2/3规则集也可以为您的目的提供足够好的答案。
问题内容: 我正在编写几个节点外壳脚本,供在平台上开发时使用。我们有Mac和Windows开发人员。是否可以在Node中检查变量以便在一个实例中运行.sh文件,在另一个实例中运行.bat? 问题答案: 使用的变量是 在Mac上,变量返回。在Windows上,它返回(甚至在64位上)。 当前可能的值为: 我只是将其设置在我的jakeFile的顶部:
操作系统使用各种算法来有效地调度处理器上的进程。 调度算法的目的 最大CPU利用率 公平分配CPU 最大吞吐量 最短周转时间 最短的等待时间 最短响应时间 有以下算法可用于计划作业。 1. 先来先服务 这是最简单的算法。 最短到达时间的过程将首先获得CPU。 到达时间越少,进程得到CPU的速度越快。 这是非抢先式的调度。 2. 轮循 在循环调度算法中,操作系统定义了一个时间片(片)。 所有的进程将
进程与线程 1. 进程 2. 线程 3. 区别 进程状态的切换 进程调度算法 1. 批处理系统 2. 交互式系统 3. 实时系统 进程同步 1. 临界区 2. 同步与互斥 3. 信号量 4. 管程 经典同步问题 1. 哲学家进餐问题 2. 读者-写者问题 进程通信 1. 管道 2. FIFO 3. 消息队列 4. 信号量 5. 共享存储 6. 套接字 进程与线程 1. 进程 进程是资源分配的基本单
计算机操作系统
在得到答案之前,我冒着这个问题被关闭的风险,但我真的很想知道答案。所以现在开始。 我目前正在尝试学习算法,我开始理解它,但无法与它联系起来。 我理解时间复杂性和空间复杂性。我也理解一些基于伪代码的排序算法 排序算法,如 气泡排序 插入排序 选择排序 快速排序 合并排序 堆垛(一些什么) 我也知道最佳情况和最坏情况(一般情况不多)。 一些在线相关参考资料 不错的地方,用图形显示了上述所有内容。 这也
问题内容: 我想确定正在执行的某些脚本是否正在运行Mac OSX的特定版本。我意识到我可以执行/产生命令: 有没有办法在没有node-exec-sync的情况下同步执行此操作(类似于process.arch)?我意识到同步生成/执行它是一个公认的坏习惯,但是我看不到其他方法。 问题答案: 您可以这样使用 OS模块: 然后将发行版本映射到Mac OS X的特定版本。 达尔文到Mac OS X的映射可
本文向大家介绍C#操作windows系统进程的方法,包括了C#操作windows系统进程的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#操作windows系统进程的方法。分享给大家供大家参考。具体如下: 这段代码演示了如何根据进程名关闭进程和启动进程 希望本文所述对大家的C#程序设计有所帮助。
YodaOS Event Event battery.info 表示电池状态,参数描述如下: 参数名称 类型 描述 data string 电池信息 data.batSupported bool 表示是否支持电池 data.batChargingOnline bool 表示是否在充电 data.batLevel int 当前电量 Event app.setup.network-available