Я предполагаю, что могут быть некоторые совпадения с предыдущими вопросами SO, но я не мог найти конкретный вопрос в 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;
Я предполагаю, что для варианта if требуется время O (n) для завершения (т.е. для нахождения правильного действия), если правильное действие ACTIONi имеет высокое значение i, тогда как вариант варианта занимает намного меньше времени (O (1 )?).
- Я исправляю этот переключатель намного быстрее?
- Правильно ли, что время, необходимое для нахождения правильного действия в случае коммутатора, фактически не зависит от n? То есть верно ли, что на самом деле не требуется больше времени проверять миллион случаев, чем проверять 10 случаев?
- Как именно это работает?