Задать вопрос
  • Как эффективно сгруппировать строки?

    MaxLich, а позиция элемента вам зачем в группировке?
    Смотрите. у вас есть строки
    "F;I;J", 
    "F;X;A",
    "X;D;P",

    Вы все строки пронумеровали, они у вас в массиве, в файле, базе данных и т.д.
    Из каждой строки достали термы и положили эти термы по номерам строк, где они присутствуют. F : [1,2], X: [2,3].
    Теперь у вас получились группы с номерами строк, разбитые по термам. Мы их можем объединять дальше, разбивать, сливать и т.д. При этом не забывать тащить за собой номера строк.
    В этом случае нам вообще не важна позиция терма. Нам только важно, что он встречается в строке 5, 10, 13 и т.д.
    Объединив например F + X через intersection, получим еще 1 группу, где есть и F и X равно (F,X):[2] и встречается только в строке 2
  • Как эффективно сгруппировать строки?

    MaxLich, у вас группа содержит массив (сет) номеров строк! По номеру строки вытащить саму строку? Ключ (имя) группы у вас сожержит сам элемент, найти его в исходной строке не составляет проблемы. Только все эти операции к самой группировке не имеют никакого отношения! Они нужны только на самом последнем и очень быстром этапе - выводе на печать результатов. Ну и зачем все это тащить в память?!
  • Как эффективно сгруппировать строки?

    MaxLich, зачем вам номер группы и номер позиции? Номер строки нужен, это и так понятно. Номер группы и номер позиции всегда можно получить уже при выдаче конечного результата.
  • Как эффективно сгруппировать строки?

    MaxLich, Вам еще и позицию подсвечивать? Ну это же совсем просто. Сам терм у вас есть, строка разбита, достаточно одного прямого сравнения.
  • Как эффективно сгруппировать строки?

    @MaxLich, По вашему выводу нельзя восстановить строки и вывести их в таком виде, как я указал.

    Это как же нельзя восстановить?! Это же просто номера строк исходного массива myData[i]!!!!
    // выводим результат
    		for(Entry<String, TreeSet<Integer>> group: groups.entrySet()) {
    			if(group.getValue().size() >1)
    				System.out.printf("Группа: %s\n", group.getKey().toString());
    group.getValue().forEach((i)->System.out.println(myData[i]));
    		}
  • Как эффективно сгруппировать строки?

    MaxLich, Конечно же не запускал! Во первых, эту матрицу еще и сформировать нужно. Во вторых, задача все-же Ваша! В третьих, под боооольшие массивы можно и пооптимизировать, что я конечно же не делал. В четвертых, а не пытаетесь Вы всю исходную матрицу засунуть в память? И в пятых, если уж и валится, то берем в руки профайлер и ловим где и что. В шестых, такие большие матрицы нужно обрабатывать в несколько проходов.
    Собственно, сама задача давно описана и называется map-reduse, так что ее можно еще и распараллелить.
  • Как эффективно сгруппировать строки?

    MaxLich, Еще раз по задаче. Вам нужно сгруппировать строки, где число совпадающих элементов больше одного? Мой пример группирует строки, где совпадение есть хотя бы по одному элементу. Чтобы найти остальные совпадения, нужно уже редусить и группировать мой результат, и не нужно просматривать весь список заново.
  • Как эффективно сгруппировать строки?

    MaxLich, Собственно у меня длина строки и количество термов ничем не лимитировано, хоть один, хоть 1000.
  • Как эффективно сгруппировать строки?

    MaxLich, мой вывод достаточно прост
    Группа - [номера строк]
    Т.е. запись
    A - [1, 3, 5]
    говорит, что группе A принадлежат строки 1,3,5. Сами строки я не вывожу. Имя группы равно имени общего терма.
  • Как эффективно сгруппировать строки?

    MaxLich, Вот здесь?
    List<String> terms = Arrays.asList(myData[line].split(";"));

    А пример строки хотя бы? Какова ее длина?
  • Как эффективно сгруппировать строки?

    MaxLich, Возможно я не до конца понял вашу задачу, перечитал еще раз, и похоже, по группам нужно пройти еще раз (и еще в рекурсии) и найти интерсекции массивов в каждой из групп, создав дополнительные группы типа (F,X,n...).
    В любом случае на первом этапе мы получили группы строк из одного повторяющегося элемента. Теперь нужно бегать этому результату и редьюсить, создавая новые группы, пока редьюсится. (доберусь до работы, попробую сделать, уж очень задачка понравилась.)
  • Какой СХД выбрать для виртуализации?

    Что происходит с сетью и с клиентами при отвале одного CEPH сервера?

    Не далее как намедни с субботы по понедельник утро умер один из серверов ceph (40Тб сырых данных), никто ничего не заметил. Умер во время очень тяжелых расчетов с активным использованием распределенного хранилища.
    PS. Кому надо по рукам надавали, если чо.

    Infiniband не лучше будет?

    Лучше! Несомненно, собственно он у нас и есть :-) Но на 10G эзернетах тоже все неплохо ползает.
    И да, инфинибанд поддерживается официально, только юзайте IP-over-IB. А вот RDMA так и не пробовали. С другой стороны кроме мелланокса ничего путного и нет.
  • Для чего используется Java в современном вебе?

    MaxLich, Нет, не совсем медленный, просто задача такая: python3 + flask + jinja2 + elasticsearch-dsl
    Для elasticseach была взята библиотека elasticsearch-dsl, вот она очень медленная оказалась, а от подобного уже отказываться не хотелось.

    В яве - java8 + jooby + peeble + jest
    Вот всё вместе и дало такую прибавку, а это минус три сервера!

    Вообще-то питон не очень быстр - https://benchmarksgame-team.pages.debian.net/bench...
    По всем тестам в совокупности питон проигрывает яве в 36 раз, где-то больше, где-то меньше, где-то вровень.
    Но это не значит, что на нем нельзя писать, вполне производительный язык, особенно в плане программирования.
  • Как сделать двухстороннее общение приложений?

    Сергей Горностаев, Можно и сокеты использовать, а поверх них придумать свой велосипед из протокола, авторизации, терминации и возобновления сессии, передачи параметров, аргументов, вызова процедур.
    Вот зачем вам все вот это?! Берете и разворачиваете REST сервис, используете и на клиенте и на сервере стандартный обмен.
    На самом деле, это так кажется, "вот как возьму сокет, как буду туда писать и читать", а потом возникает понимание, что кроме борьбы с таймаутами, возобновлением и прочей шелухой, вам еще нужно кучу всего сделать. И учтите, что все вот это "свое" придется поддерживать с двух сторон при любом изменении, на клиенте и на сервере!
    А так есть уже отлаженный протокол http, отлаженные сервера и фреймворки, держащие по 10к+ соединений одновременно, есть отлаженные клиенты для этих протоколов с кучей возможностей - бери и пользуй, гоняй свои данные.

    Да, XMPP хорош, AMQP еще лучше. Но эти протоколы хороши, когда у нас связи не один ко многим, а многие ко многим, когда клиенты через эти протоколы обмениваются между собой через общий сервер сообщений.
    По мне, HTTP гораздо приятнее именно в вашей ситуации, развернуть и запустить можно все буквально в течении одного рабочего дня, с отладкой, шлюхами и преферансом.

    Приконнектился клиент, сервер отдал ему все что для него нужно из накопленного в очереди, и сиди ожидай следующей команды на этом же соединении. Отвалился по таймайту через минут 10-20, переконнектился заново. Done!

    PS. И да, я знаю о чем говорю, начиная от MODBUS и заканчивая тем же самым ZeroMQ, опыт за 20 с небольшим лет по протоколам - огромный.
  • Как сделать двухстороннее общение приложений?

    mitaichik, ну и что, что не веб-приложение! На сервере запустите службу веб-сокетов, а на клиентах просто коннектитесь к серверу и общайтесь. Библиотеку можно использовать okhttp навпимер.
  • Не могу понять в чем ошибка (math.min(), math.max())?

    А чего не устраивает? Хоть бы результат привели, ну и ожидаемый результат тоже
  • Infiniband по двум портам?

    leahch
    @leahch Куратор тега Linux
    opensm attaches to a specific IB port on the local machine and configures only the fabric connected to it. (If the local machine has other IB ports, opensm will ignore the fabrics connected to those other ports). If no port is specified, it will select the first "best" available port.

    На одном сервере запустите opensm на первом порту, на втором сервере - на второй порт.
  • Infiniband по двум портам?

    leahch
    @leahch Куратор тега Linux
    Opensm запущен? Это демон программной насторйки фабрики.
    Он должен быть один на фабрику.