小编Kaf*_*ait的帖子

为清晰起见,我想在Dart中使用命名参数.我应该怎么处理它们?

TL; DR:由于有意识的设计选择,命名参数是可选的.没有官方语言支持,有没有办法强制执行(并通知)所需的命名参数?


我发现在定义类时使用命名参数非常有用.以AbilityMMORPG 为例:

class Ability {

  final name;
  final effectDuration;
  final recast;            // wait time until next use
  // ...
}
Run Code Online (Sandbox Code Playgroud)

effectDuration并且recast两者都携带相同类型的信息(即持续时间),并且可能由相同的数据类型表示.很容易混淆哪个数字去哪里.但是,它们对于对象的正确性都是至关重要的信息,因此在实例化期间它们不会丢失.

我可以通过try-catch打破程序来强制执行这些参数的要求,但这对于使用该类并且不知道的人来说听起来不是很有趣(缺少阅读文档并直观地理解类的内容)他们是必需的.

是否有办法强制执行某些命名参数的要求,同时管理通知呼叫者所述要求和/或帮助他们正确使用它?

named-parameters required dart flutter

13
推荐指数
4
解决办法
7980
查看次数

在O(logn)时间内找到最大值?

我一直认为迭代搜索是在未排序列表中查找最大值的首选方法.

这个想法相当随机,但简而言之:我相信我可以在O(logn)时间内完成任务,n是输入数组的大小.

合并排序的方法:分而治之.

步骤1:将findMax()任务划分为两个子任务findMax(leftHalf)findMax(rightHalf).这个部门应该及时完成O(logn).

第2步:合并两个最大候选人备份.该步骤中的每个层应该花费恒定的时间O(1),并且在前一步骤中存在O(logn)这样的层.所以它也应该及时完成O(1) * O(logn) = O(logn)(原谅滥用符号).这是错的.每次比较都是在恒定时间内完成的,但是还有2^j/2这样的比较(第j级的2 ^ j对候选者).

因此,整个任务应该及时完成O(logn). O(n)时间.

但是,当我尝试计时时,我会得到清晰反映线性O(n)运行时间的结果.

size = 100000000 max = 0 time = 556

size = 200000000 max = 0 time = 1087

size = 300000000 max = 0 time = 1648

size = 400000000 max = 0 time = 1990

size = 500000000 max = 0 time = 2190 …

java max divide-and-conquer

1
推荐指数
1
解决办法
1490
查看次数