gpt4 book ai didi

performance - 德尔福性能: Case Versus If

转载 作者:行者123 更新时间:2023-12-03 14:34:15 25 4
gpt4 key购买 nike

我想可能与以前的问题有一些重叠,但我找不到关于这个主题的特定于 Delphi 的问题。

假设您想要检查无符号 32 位整数变量“MyAction”是否等于任何常量 ACTION1、ACTION2、...、ACTIONn,其中 n 是 - 比如说 1000。我猜,除了更优雅,

case MyAction of
ACTION1: {code};
ACTION2: {code};
...
ACTIONn: {code};
end;

快得多
if MyAction = ACTION1 then
// code
else if MyAction = ACTION2 then
// code
...
else if MyAction = ACTIONn then
// code;

我猜如果正确的操作 ACTIONi 具有较高的 i 值,则 if 变体需要时间 O(n) 来完成(即找到正确的操作),而 case 变体花费的时间要少得多(O(1 )?)。

  1. 我说的切换速度更快吗?
  2. 在开关盒中找到正确 Action 所需的时间实际上与 n 无关,我这样说对吗? IE。检查一百万个病例真的不会比检查十个病例花费更多时间吗?
  3. 这到底是如何运作的?

最佳答案

编译器会将 case 语句转换为以下之一:

  1. 两级表,使用一张表将值映射到索引,并使用索引从跳转表中选择地址
  2. 间接跳转表格
  3. 顺序跳转
  4. 二分搜索 - 这是递归的,因此二分搜索的叶子可以使用 2、3 或 4 中的任何一个。

它使用启发式方法,例如案例数量、案例范围、不同替代方案的数量(每个替代方案可以实现一系列不同的值)等。

case 语句的直觉是它是一个 O(1) 操作。

关于performance - 德尔福性能: Case Versus If,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2547059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com