したがって、これは、配列の特定のインデックスがヒープの最大レベルまたは最小レベルを表すかどうかを判断するために作成したメソッドです。最小レベルの深さは偶数(0を含む)、最大レベルの深さは奇数です。正常に動作しますが、実行時間は(私が思うに)O(log N)です。実行時間が一定である単純な数学計算のように、これを行うためのより効率的な方法はありますか?このメソッドは、データがインデックス0ではなく配列のインデックス1から始まることを前提としていることに注意してください。
private boolean isMaxLevel(int i)
{
int border = 1;
int prev = 1;
int count = 1;
boolean isMax = false;
// alternates boolean between true and false as each level is checked.
while (true)
{
if (i >= prev && i <= border)
return isMax;
isMax = !isMax;
prev = border + 1;
count *= 2;
border += count;
}
}