Програмистов тредРаскидайте схематично как сделать так, чтобы двумерный массив был рассортирован построчно по количеству одинаковых символов в строке. Т.е. есть строки в массиве и столбцы. если в строке одинаковых символов больше чем в других, то она перемещается на первое место и так далее.Как сделать?
бамп
Не, ну я тебе накидаю на пистоне, но там 75% алгоритма будет скрыто в стандартной библиотеке.Нахуй ты спрашиваешь?
>>142009489мне принцип надо понять. не выходит что-то.
>>142007977 (OP)Ты шо додик? Или аниме любишь смотреть?
>>142007977 (OP)Сорь за вопрос сверху, по пику сразу же видно анимедауна
берем переменную Ф, которая равна первому значению в массиве первой строки. Запускаем цикл с счетчиком, где если значение первой строки равно значению переменной Ф, то +1 к счетчику. В итоге получаем количество одинаковых элементов в строке. Но это, во-первых, работает по ебаному. Не всегда правильно считает и я не понял почему. Но иногда правильно.А во-вторых, что дальше делать? Делать новую матрицу, где напротив строки вставлять значение равное количеству одинаковых смиволов, а потом сортировать этот новый массив, а потом удалять последний столбец? Это же ебано получается.Можете на псевдокоде написать решение?
>>142009687>>142009749Нету больше картинок.
>>142007977 (OP)Ну хз. В лоб и без оптимизации (n - длинна строки, y - количество строк):1. Сортануть каждую строку. n log n y2. Посчитать количество повторов в каждой строке. n y3. Отсортировать строки по количеству повторов. y log yВ итоге n log n + y log y
В цикле по строкам массива:1. создаем хэштаблицу2. в цикле по элементам строки: если элемент есть в хэштаблице, прибавляем единицу к значению по элементу иначе заносим элемент в хэштаблицу со значением 13. наибольшее значение в хэштаблице будет весом строки4. сортируем строки по убыванию
>>142010226Сука, макаба разметку пожрала :(
>>142010253по убыванию веса*
Бамп
>>142009668окей, гугл, алгоритмы сортировки.
>>142010253А оно не посчитает количество повторов элемента по всему массиву а не строке.?
>>142009937близко к правде. создай проходной одномерный массив n_max=количество_строк_двумерного_массива. перебери двумерный массив по количеству повторяющихся символов, внося их число на соответствующую позицию в проходном одномерном. далее обработай одномерный, затем на него глядя перепиши свой исходный двумерный, например
>>142007977 (OP)У тебя двумерный массив символов, так?
>>142007977 (OP)сделать функцию, принимающую на вход сам массив и номер строки и возвращающую количество одинаковых символовпотом отсортировать массив, воспринимая его как одномерный массив строк
>>142010253Двачую этот ответ, правда, чтобы улучшить, нужно хранить где-то переменную типа max. И, когда ты прибавляешь единицу, сравниваешь свой max с обновленным значением элемента в хэштаблице и заменяешь свой max этим значением, если оно больше. Таким образом не прийдется потом тратить дохуя времени на нахождение максимума в каждой хэштаблице
Да что ж за хуйня, каждый день программер треды в б на главной. Вы ебанулись что-ли?
>>142015630Да. Даже не символов, а чисел.
>>142016893Скоро программистов будет столько же сколько экономистов и юристов.
>>142017319но они все вместе никогда не достигнут числа менеджеров
>>142022136>менеджеровэто не специальность. это должность.
>>142007977 (OP)Впадлу задумываться(
>>142023032я написал кусочек, который по строке пробегает и считает, сколько раз каждый элемент встречается. Но! Он не записывает никулда значения и в итоге выдает количество повторов последнего символа в строке. Как с этим бороться? Как сделать условие, чтобы он сразу сравнивал сколько раз встречается каждый жлемент и выбирал наибольший.
>>142023090Госпади как же больно(
Я второй день пытаюсь SOAP на жс осилить. Вроде прохавал все завтра буду практиковаться, а потом ссать на всех
>>142023188Надо по идее значение = количеству повторов для каждого элемента присовить переменной и задать условие, что если следующее значение больше, то перезаписываем. Но куда его вставить и как сделать так чтобы оно работало? Потому что куда бы я не ставил перемнную которой присываивает значение, оно постоянно перезаписывается после каждого цикла и а итге все-равно считает количество повторов последнего символа в строке.
>>142023334Короче. В цикле выбираешь значение с раименьлей длинной и записываешь в новый массив, из старого удаляешь. Продолжаешь итерацию до тех пор покуда в старом нихуя не останетсяМимо быдло кодер
>>142023582А не. Я оп пост жопой прочитал. Сам ебись
>>142023582сделал как правильно посчитатьколичество символов в строке. а дальше что? как-то некрасиво получается каждый раз удалять строку, записывать в новый. а нельзя проще как-то?
>>142007977 (OP)напиши пример что есть, что надо. По-моему обычная быстрая сортировка тебя спасет
>>142023663Я на самом деле хуй пойму что тебе надо. Не то что бы ты описал непонятно, просто мне впадлу
>>142023755Надо упорядочить строки целочисленной прямоугольной матрицы по возрастанию количества одинаковых элементов в каждой строке.Есть двумерный массив чисел.В этом массиве посчитать в каждой строке сколько раз встречаются одинаковые числа. И строку в которой одинаковые числа встречаются большее количество раз поставить на первое место и так далее рассортировать.Сейчас я придумал как посчитать количество повторов каждого числа в строке и соотвественно наибольшее количество повторов для строки. Т.е. нашел тот показатель по которому надо отсортировать строки.
>>142024052сначала надо подсчитать повторы для каждой строки, это делается линейно обычным проходом по массиву и записью в хеш таблицу, потом проход по хеш таблице и поиск максимального числа повторений,затем сортировка строк
>>142024416быстрофикс, можно добавить переменную макс и в ней отслеживать максимальное число повторений.
>>142024416Да не, я уже посчитал максимальное количество повторений в строке. А вот дальше как не соображу. А хеш таблица - это что? Новый двумерный массив где номера строк и числа повторений для этих строк? Думал добавить новый столбец в массив где вписать значения повторов и по нему отсортировать. Но как-то ебано получается. Добавить, отсортировать, удалить. Как-будто не так надо было, а как-то проще, логичнее.
>>142024645хеш таблица это посути массив где ключи высчитываются с помощью хеш функции. например у тебя числа 2, 10, 500 и когда ты считаешь повторения проходом за раз по всему массиву не занимать памяти на 500 ячеек делаешь массив на 3 и подбираешь хеш фнукцию чтобы все значения попали в разные ячейки массива.
>>142024645import java.util.;public class Test { public static void main(String[] args) { int n = 10; Random r = new Random(25); int[][] arr = new int[n][n]; for (int[] a : arr) { for (int y = 0; y < a.length; ++y) { a[y] = r.nextInt(3); } } StringInArray[] wrapper = new StringInArray[n]; for (int k = 0; k < wrapper.length; ++k) { wrapper[k] = new StringInArray(arr[k], k); } final int[] dup = new int[100]; Map<Integer, Integer> table; for (int i = 0; i < arr.length; ++i) { int max = 0, curr = 0; table = new HashMap<>(); for (int j = 0; j < arr.length; ++j) { int num = arr[j]; if (table.containsKey(num)) { curr = table.get(num) + 1; } else { curr = 1; } table.put(num, curr); if (max < curr) max = curr; } dup = max; } Arrays.sort(wrapper, new Comparator<StringInArray>() { @Override public int compare(StringInArray o1, StringInArray o2) { return dup[o2.index] - dup[o1.index]; } }); for (StringInArray s : wrapper) { System.out.println(s); } } static class StringInArray { int index; int[] arr; StringInArray(int[] arr, int index) { this.arr = arr; this.index = index; } @Override public String toString() { StringBuilder bd = new StringBuilder(); for (int a : arr) { bd.append(a); } return bd.toString(); } }}Вот на джаве написал, завернул массив в объект чтобы индекс сохранить и можно было воспользоваться встроенной быстрой сортировкой, можно конечно обойтись без нее.Сложность алгоритма ny + ylog(y)
>>142025235Я не догоняю, походу потому что слишком тупой. Вот есть на массив на листе.Мы его считали, внесли в память.Далее мы с этим массивом можем что-то сделать.Вот написали цикл и посчитали наибольшее количество повторений в строке 1.Что дальше делать? Можно это число записать в память куда-нибудь. Чтобы когда мы запустили цикл уже по 2 строке сравнить это число с тем, что будет для строки 2. и если оно меньше, то поменять строки в массиве сразу местами. и так далее.
>>142025435Да я не на яве тужусь. Но спасибо.
>>142025526создай массив (для записи повторений) по кол-во строк, инициализируй его нулями, индекс в массиве должен соотвествовать индексу строки в двумерном массиве, потом считай для каждой строки максимальное число повторений (считается за n время), дальше сортируй любым видом сортировки, берешь индекс строки смотришь в массиве где записаны повторения и меняешь строки, смотря какой алгоритм так и строки меняются. Если нельзя использовать/нет стандартного оптимизированного Quicksort то я бы использовал heapsort. Меня сразу это бессмыслено любой алгоритм который применяет сравнения быстрее nlogn не работает, делай лучше по шагам, посчитал - отсортировал
>>142025765Да я вообще на vba пытаюсь. Не спрашивай как так вышло. Я его 3 дня изучаю. Я вообще не программист.
>>142007977 (OP)Пишешь функцию, которая вычисляет количество повторяющихся элементов в массиве и делаешь ее ключом сортировки.Например на питоне:sorted(s, key=lambda l: l.count(max(l, key=lambda x: l.count(x))), reverse=True)
бамап