[ https://issues.apache.org/jira/browse/RNG-61?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16691429#comment-16691429 ]
ASF GitHub Bot commented on RNG-61: ----------------------------------- Github user coveralls commented on the issue: https://github.com/apache/commons-rng/pull/13 [![Coverage Status](https://coveralls.io/builds/20175287/badge)](https://coveralls.io/builds/20175287) Coverage increased (+0.009%) to 97.552% when pulling **d3ac7f75e2ed7e21fc48c5db8c5ea8bfbe3533f3 on aherbert:improvement-RNG-61** into **0fdcd9007c708aa48f1989cb2211ea56c1fcd702 on apache:master**. > PermutationSampler shuffle contains unnecessary conditional > ----------------------------------------------------------- > > Key: RNG-61 > URL: https://issues.apache.org/jira/browse/RNG-61 > Project: Commons RNG > Issue Type: Improvement > Components: sampling > Reporter: Alex D Herbert > Priority: Trivial > Fix For: 1.2 > > > The Fisher-Yates algorithm in the PermutationSampler has a conditional {{if}} > statement within the loop that checks if the step is the first in the loop. > It then swaps a position with itself. For example for the towards head > variant: > {code:java} > for (int i = 0; i <= start; i++) { > final int target; > // Check for start > if (i == start) { > target = start; // this means target == i > } else { > target = rng.nextInt(start - i + 1) + i; > } > // if target == i then this step is not needed. > final int temp = list[target]; > list[target] = list[i]; > list[i] = temp; > } > {code} > This can be removed by altering the iteration loop: > {code:java} > for (int i = start; i > 0; i--) { > final int target = rng.nextInt(i + 1); > final int temp = list[target]; > list[target] = list[i]; > list[i] = temp; > } > {code} > An equivalent fix is available for the shuffle towards the tail. -- This message was sent by Atlassian JIRA (v7.6.3#76005)