Вот простая программа для вас.
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
/**
*
* @author Momir Sarac
*/
public class GroupByEvenAndOddNumbers {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// create a collection
List<Integer> listOfNumbers = new ArrayList<>();
// do code within a loop for 10 times
for(int i=0;i<10;i++)
{
//print to screen this text
System.out.println("Input your number:");
//get next input integer
int number = scanner.nextInt();
// add it to collection
listOfNumbers.add(number);
}
// sort this collection, list of numbers
// convert all numbers(positive and negative ) within to 0 or 1 depending whether or not they are even or odd and sort them accordignaly.
Collections.sort(listOfNumbers, Comparator.comparingInt(n -> Math.floorMod(n, 2)));
//print sorted collection
System.out.println("Ordered list ..." + listOfNumbers);
}
}
Стандартный топологический вид является O (n) (хорошо, O (V+E)), т.е. необходимо смочь отсортировать миллион фиксаций в памяти в части секунды. Никакой возрастающий взлом как те, которые в Tcl, не необходим.
BTW, я использую GitX (взгляды намного лучше, чем Gitk на OS X) каждый день и не имею никакой проблемы с ним (возможно, потому что у меня нет тех сумасшедших слияний в моих репозиториях), :)
Вам действительно нужно отображать 100k коммитов одновременно? Какой пользователь может впитывать такую информацию?
Вы думали о пейджинге? Т.е. просто вычислить за ~ 100 коммитов или что-то в этом роде. Если линия ответвления идет далеко назад (вне страницы), вы можете использовать что-то вроде стрелки Github, указывающей назад, чтобы показать это.
Хорошо, таким образом, мне так же нелегко читать полноту того патча, но давайте посмотрим, могу ли я соединить его от того, что я действительно выяснял.
Прежде всего, gitk упрощает вещи путем сжатия строки фиксаций в дугу, содержа серию фиксаций, что у каждого только есть один родитель и один ребенок. Кроме чего-либо еще, делая это должно сократить довольно существенно на количестве узлов, которые необходимо рассмотреть для вида, который выручит любой алгоритм, который Вы используете. В качестве награды связанные фиксации закончатся, группировался.
Это действительно представляет некоторую сложность с точки зрения нахождения дуги при чтении новой фиксации. Существует несколько ситуаций:
Можно хотеть быть мультиребенка или мультиродительские фиксации в дугах, или может иметь больше смысла разделять их. Так или иначе не должно быть слишком трудно создать этот набор дуг инкрементно.
После того как у Вас есть эти дуги, Вас все еще оставляют с попыткой линеаризовать их. В Вашем случае первый алгоритм, описанный на вышеупомянутой странице Wikipedia, звучит полезным, поскольку у Вас есть известный набор точек разветвления для использования в качестве S набора начальной буквы.
Другие примечания:
Так или иначе я надеюсь, что это помогает. Было интересно думать о, по крайней мере.
Я не использовал GitX, поэтому возможно, я пропускаю что-то, но кажется, что Вы могли идти назад от ребенка к родителю (родителям) от главы каждого текущего ответвления, пока Вы не можете потянуть несколько экранов графика.
Это не могло бы дать Вам оптимальную визуальную разметку ответвлений, которые базированы ранее. Но кажется, что скорость отклика была бы более важна, чем ожидание потянуть график с наименьшим количеством пересечений, так как большинство пользователей, вероятно, будет интересоваться недавним действием.