Возрастающая линеаризация мерзавца DAG

Вот простая программа для вас.

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);
    }
}
12
задан tshepang 21 May 2014 в 20:06
поделиться

4 ответа

Стандартный топологический вид является O (n) (хорошо, O (V+E)), т.е. необходимо смочь отсортировать миллион фиксаций в памяти в части секунды. Никакой возрастающий взлом как те, которые в Tcl, не необходим.

BTW, я использую GitX (взгляды намного лучше, чем Gitk на OS X) каждый день и не имею никакой проблемы с ним (возможно, потому что у меня нет тех сумасшедших слияний в моих репозиториях), :)

6
ответ дан 2 December 2019 в 23:08
поделиться

Вам действительно нужно отображать 100k коммитов одновременно? Какой пользователь может впитывать такую ​​информацию?

Вы думали о пейджинге? Т.е. просто вычислить за ~ 100 коммитов или что-то в этом роде. Если линия ответвления идет далеко назад (вне страницы), вы можете использовать что-то вроде стрелки Github, указывающей назад, чтобы показать это.

0
ответ дан 2 December 2019 в 23:08
поделиться

Хорошо, таким образом, мне так же нелегко читать полноту того патча, но давайте посмотрим, могу ли я соединить его от того, что я действительно выяснял.

Прежде всего, gitk упрощает вещи путем сжатия строки фиксаций в дугу, содержа серию фиксаций, что у каждого только есть один родитель и один ребенок. Кроме чего-либо еще, делая это должно сократить довольно существенно на количестве узлов, которые необходимо рассмотреть для вида, который выручит любой алгоритм, который Вы используете. В качестве награды связанные фиксации закончатся, группировался.

Это действительно представляет некоторую сложность с точки зрения нахождения дуги при чтении новой фиксации. Существует несколько ситуаций:

  • Новая фиксация имеет родителя-одиночку или никаких родителей. Это расширяется (возможно пустой) дуга. Большую часть времени Вы просто расширите новую дугу. Существует несколько интересных подслучаев:
    • Это может заставить существующую дугу быть разделенной, если ее родитель уже имеет ребенка (т.е. ее родитель оказывается точкой разветвления, которая я заключаю, что Вы не знаете заранее).
    • Это могло быть "недостающее звено", которое соединяет две дуги вместе.
    • Можно уже знать, что эта фиксация имеет несколько детей
  • Новая фиксация имеет несколько родителей (фиксация слияния).

Можно хотеть быть мультиребенка или мультиродительские фиксации в дугах, или может иметь больше смысла разделять их. Так или иначе не должно быть слишком трудно создать этот набор дуг инкрементно.

После того как у Вас есть эти дуги, Вас все еще оставляют с попыткой линеаризовать их. В Вашем случае первый алгоритм, описанный на вышеупомянутой странице Wikipedia, звучит полезным, поскольку у Вас есть известный набор точек разветвления для использования в качестве S набора начальной буквы.

Другие примечания:

  • Перемещение фиксаций должно быть управляемо. В первую очередь, только необходимо заботиться при соединении двух дуг, или через новую фиксацию слияния, недавно обнаруженную точку разветвления или через объединение двух дуг в одну. Любая данная дуга может легко поддержать свой текущий диапазон номера строки (предполагающий, что Вы соглашаетесь с помещением дуги на последовательных строках), так пересечение дерева, проверяющего, который показывают все новые предки, позже должно быть довольно быстрым.
  • Я не знаю достаточно, чтобы сказать многое о проведении линий графика, но я предполагаю, что это не будет слишком отличаться от того, что Вы делаете теперь.

Так или иначе я надеюсь, что это помогает. Было интересно думать о, по крайней мере.

3
ответ дан 2 December 2019 в 23:08
поделиться

Я не использовал GitX, поэтому возможно, я пропускаю что-то, но кажется, что Вы могли идти назад от ребенка к родителю (родителям) от главы каждого текущего ответвления, пока Вы не можете потянуть несколько экранов графика.

Это не могло бы дать Вам оптимальную визуальную разметку ответвлений, которые базированы ранее. Но кажется, что скорость отклика была бы более важна, чем ожидание потянуть график с наименьшим количеством пересечений, так как большинство пользователей, вероятно, будет интересоваться недавним действием.

-2
ответ дан 2 December 2019 в 23:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: