これは Python です。Javaに翻訳できるように、これがどのように機能するかを正確に理解しようとしています。
numInversions = sum(
state.index(START[j]) > state.index(START[i])
for i in range(16) for j in range(i) # each pair (i,j)
)
このような:
numInversions = 0
for i in range(16):
for j in range(i):
if state.index(START[j]) > state.index(START[i]):
numInversions += 1
はまたはと同等の a を返し>ます。bool01
コードは詳細形式に似ています
numInversions = =
for i in range(16):
for j in range(i):
if state.index(START[j]) > state.index(START[i]):
numInversions += 1
ただし、式全体がジェネレーター式としてラップされ、組み込みの sum に渡されます。
ネストされたループ構造は左から右に読み取られるため、次のように展開されます。
for i in range(16):
for j in range(i):
ブール値の True または False に評価される条件が合計されます。したがって、条件がTrueと評価されるすべてのインスタンスをカウントすることになります
内側のループは、2 つのネストされたループに基づいてブール値 (Trueおよび) を生成します。FalsePython では、ブール値は のサブクラスでintあり、合計すると、それぞれ1および0として機能します。TrueFalse
したがって、これを次のように書き換えることができます。
numInversions = 0
for i in range(16):
for j in range(i):
if state.index(START[j]) > state.index(START[i]):
numInversions += 1
(疑似)Java:
int numInversions = 0;
for (int i = 0; i < 16; ++i) {
for (int j = 0; j < i; ++j) {
if (state.index(START[j]) > state.index(START[i])) {
++numInversions;
}
}
}