[Ответить в тред] Ответить в тред

02/12/16 - Конкурс визуальных новелл доски /ruvn/
15/11/16 - **НОВЫЙ ФУНКЦИОНАЛ** - Стикеры
09/10/16 - Открыта доска /int/ - International, давайте расскажем о ней!


Новые доски: /2d/ - Аниме/Беседка • /wwe/ - WorldWide Wrestling Universe • /ch/ - Чатики и конфочки • /int/ - International • /ruvn/ - Российские визуальные новеллы • /math/ - Математика • Создай свою

[Назад][Обновить тред][Вниз][Каталог] [ Автообновление ] 50 | 2 | 15
Назад Вниз Каталог Обновить

Аноним 11/12/16 Вск 23:31:28  142007977  
2131313232.png (196Кб, 1152x923)
Програмистов тред

Раскидайте схематично как сделать так, чтобы двумерный массив был рассортирован построчно по количеству одинаковых символов в строке.
Т.е. есть строки в массиве и столбцы. если в строке одинаковых символов больше чем в других, то она перемещается на первое место и так далее.

Как сделать?
Аноним 11/12/16 Вск 23:33:44  142008195
бамп
Аноним 11/12/16 Вск 23:37:18  142008527
бамп
Аноним 11/12/16 Вск 23:47:38  142009374
бамп
Аноним 11/12/16 Вск 23:49:36  142009489
Не, ну я тебе накидаю на пистоне, но там 75% алгоритма будет скрыто в стандартной библиотеке.

Нахуй ты спрашиваешь?
Аноним 11/12/16 Вск 23:52:26  142009668
>>142009489
мне принцип надо понять. не выходит что-то.
Аноним 11/12/16 Вск 23:52:46  142009687
>>142007977 (OP)
Ты шо додик? Или аниме любишь смотреть?
Аноним 11/12/16 Вск 23:53:48  142009749
>>142007977 (OP)
Сорь за вопрос сверху, по пику сразу же видно анимедауна
Аноним 11/12/16 Вск 23:56:19  142009937
берем переменную Ф, которая равна первому значению в массиве первой строки.
Запускаем цикл с счетчиком, где если значение первой строки равно значению переменной Ф, то +1 к счетчику. В итоге получаем количество одинаковых элементов в строке.
Но это, во-первых, работает по ебаному. Не всегда правильно считает и я не понял почему. Но иногда правильно.
А во-вторых, что дальше делать? Делать новую матрицу, где напротив строки вставлять значение равное количеству одинаковых смиволов, а потом сортировать этот новый массив, а потом удалять последний столбец? Это же ебано получается.

Можете на псевдокоде написать решение?
Аноним 11/12/16 Вск 23:56:44  142009971
>>142009687
>>142009749
Нету больше картинок.
Аноним 12/12/16 Пнд 00:00:10  142010226
>>142007977 (OP)
Ну хз. В лоб и без оптимизации (n - длинна строки, y - количество строк):
1. Сортануть каждую строку. n log n y
2. Посчитать количество повторов в каждой строке. n y
3. Отсортировать строки по количеству повторов. y
log y

В итоге n log n + y log y
Аноним 12/12/16 Пнд 00:00:27  142010253
В цикле по строкам массива:
1. создаем хэштаблицу
2. в цикле по элементам строки:
если элемент есть в хэштаблице, прибавляем единицу к значению по элементу
иначе заносим элемент в хэштаблицу со значением 1
3. наибольшее значение в хэштаблице будет весом строки
4. сортируем строки по убыванию
Аноним 12/12/16 Пнд 00:01:44  142010341
>>142010226
Сука, макаба разметку пожрала :(
Аноним 12/12/16 Пнд 00:02:31  142010392
>>142010253
по убыванию веса*
Аноним 12/12/16 Пнд 00:48:35  142013048
Бамп
Аноним 12/12/16 Пнд 00:49:21  142013096
>>142009668
окей, гугл, алгоритмы сортировки.
Аноним 12/12/16 Пнд 00:52:48  142013292
>>142010253
А оно не посчитает количество повторов элемента по всему массиву а не строке.?
Аноним 12/12/16 Пнд 00:56:22  142013503
>>142009937
близко к правде. создай проходной одномерный массив n_max=количество_строк_двумерного_массива. перебери двумерный массив по количеству повторяющихся символов, внося их число на соответствующую позицию в проходном одномерном. далее обработай одномерный, затем на него глядя перепиши свой исходный двумерный, например
Аноним 12/12/16 Пнд 01:34:30  142015508
Бамп
Аноним 12/12/16 Пнд 01:36:39  142015630
>>142007977 (OP)
У тебя двумерный массив символов, так?
Аноним 12/12/16 Пнд 01:40:25  142015832
>>142007977 (OP)
сделать функцию, принимающую на вход сам массив и номер строки и возвращающую количество одинаковых символов
потом отсортировать массив, воспринимая его как одномерный массив строк
Аноним 12/12/16 Пнд 02:02:11  142016806
>>142010253
Двачую этот ответ, правда, чтобы улучшить, нужно хранить где-то переменную типа max. И, когда ты прибавляешь единицу, сравниваешь свой max с обновленным значением элемента в хэштаблице и заменяешь свой max этим значением, если оно больше. Таким образом не прийдется потом тратить дохуя времени на нахождение максимума в каждой хэштаблице
Аноним 12/12/16 Пнд 02:04:04  142016893
Да что ж за хуйня, каждый день программер треды в б на главной. Вы ебанулись что-ли?
Аноним 12/12/16 Пнд 02:11:59  142017264
>>142015630
Да. Даже не символов, а чисел.
Аноним 12/12/16 Пнд 02:13:08  142017319
>>142016893
Скоро программистов будет столько же сколько экономистов и юристов.
Аноним 12/12/16 Пнд 04:28:43  142021995
бамп
Аноним 12/12/16 Пнд 04:34:31  142022136
>>142017319
но они все вместе никогда не достигнут числа менеджеров
Аноним 12/12/16 Пнд 04:59:07  142022795
>>142022136
>менеджеров
это не специальность. это должность.
Аноним 12/12/16 Пнд 05:09:11  142023032
>>142007977 (OP)
Впадлу задумываться(
Аноним 12/12/16 Пнд 05:11:33  142023090
>>142023032
я написал кусочек, который по строке пробегает и считает, сколько раз каждый элемент встречается. Но! Он не записывает никулда значения и в итоге выдает количество повторов последнего символа в строке. Как с этим бороться? Как сделать условие, чтобы он сразу сравнивал сколько раз встречается каждый жлемент и выбирал наибольший.
Аноним 12/12/16 Пнд 05:16:45  142023188
>>142023090
Госпади как же больно(
Аноним 12/12/16 Пнд 05:17:56  142023215
Я второй день пытаюсь SOAP на жс осилить. Вроде прохавал все завтра буду практиковаться, а потом ссать на всех
Аноним 12/12/16 Пнд 05:23:52  142023334
>>142023188
Надо по идее значение = количеству повторов для каждого элемента присовить переменной и задать условие, что если следующее значение больше, то перезаписываем. Но куда его вставить и как сделать так чтобы оно работало? Потому что куда бы я не ставил перемнную которой присываивает значение, оно постоянно перезаписывается после каждого цикла и а итге все-равно считает количество повторов последнего символа в строке.
Аноним 12/12/16 Пнд 05:37:17  142023582
>>142023334
Короче. В цикле выбираешь значение с раименьлей длинной и записываешь в новый массив, из старого удаляешь. Продолжаешь итерацию до тех пор покуда в старом нихуя не останется
Мимо быдло кодер
Аноним 12/12/16 Пнд 05:38:25  142023614
>>142023582
А не. Я оп пост жопой прочитал. Сам ебись
Аноним 12/12/16 Пнд 05:40:14  142023663
>>142023582
сделал как правильно посчитатьколичество символов в строке. а дальше что? как-то некрасиво получается каждый раз удалять строку, записывать в новый. а нельзя проще как-то?
Аноним 12/12/16 Пнд 05:44:57  142023755
>>142007977 (OP)
напиши пример что есть, что надо.
По-моему обычная быстрая сортировка тебя спасет
Аноним 12/12/16 Пнд 05:45:19  142023764
>>142023663
Я на самом деле хуй пойму что тебе надо. Не то что бы ты описал непонятно, просто мне впадлу
Аноним 12/12/16 Пнд 06:00:18  142024052
blob (0Кб, 65x21)
>>142023755
Надо упорядочить строки целочисленной прямоугольной матрицы по возрастанию количества одинаковых элементов в каждой строке.

Есть двумерный массив чисел.
В этом массиве посчитать в каждой строке сколько раз встречаются одинаковые числа. И строку в которой одинаковые числа встречаются большее количество раз поставить на первое место и так далее рассортировать.

Сейчас я придумал как посчитать количество повторов каждого числа в строке и соотвественно наибольшее количество повторов для строки. Т.е. нашел тот показатель по которому надо отсортировать строки.
Аноним 12/12/16 Пнд 06:17:01  142024416
>>142024052
сначала надо подсчитать повторы для каждой строки, это делается линейно обычным проходом по массиву и записью в хеш таблицу, потом проход по хеш таблице и поиск максимального числа повторений,
затем сортировка строк
Аноним 12/12/16 Пнд 06:20:24  142024481
>>142024416
быстрофикс, можно добавить переменную макс и в ней отслеживать максимальное число повторений.
Аноним 12/12/16 Пнд 06:27:11  142024645
>>142024416
Да не, я уже посчитал максимальное количество повторений в строке. А вот дальше как не соображу. А хеш таблица - это что? Новый двумерный массив где номера строк и числа повторений для этих строк?
Думал добавить новый столбец в массив где вписать значения повторов и по нему отсортировать. Но как-то ебано получается. Добавить, отсортировать, удалить. Как-будто не так надо было, а как-то проще, логичнее.
Аноним 12/12/16 Пнд 06:49:28  142025235
>>142024645
хеш таблица это посути массив где ключи высчитываются с помощью хеш функции. например у тебя числа 2, 10, 500 и когда ты считаешь повторения проходом за раз по всему массиву не занимать памяти на 500 ячеек делаешь массив на 3 и подбираешь хеш фнукцию чтобы все значения попали в разные ячейки массива.

Аноним 12/12/16 Пнд 06:58:09  142025435
>>142024645
import 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();
}
}
}

Вот на джаве написал, завернул массив в объект чтобы индекс сохранить и можно было воспользоваться встроенной быстрой сортировкой, можно конечно обойтись без нее.
Сложность алгоритма n
y + ylog(y)
Аноним 12/12/16 Пнд 07:01:39  142025526
>>142025235
Я не догоняю, походу потому что слишком тупой.

Вот есть на массив на листе.
Мы его считали, внесли в память.
Далее мы с этим массивом можем что-то сделать.
Вот написали цикл и посчитали наибольшее количество повторений в строке 1.

Что дальше делать? Можно это число записать в память куда-нибудь. Чтобы когда мы запустили цикл уже по 2 строке сравнить это число с тем, что будет для строки 2. и если оно меньше, то поменять строки в массиве сразу местами. и так далее.
Аноним 12/12/16 Пнд 07:03:29  142025571
>>142025435
Да я не на яве тужусь. Но спасибо.
Аноним 12/12/16 Пнд 07:11:23  142025765
>>142025526
создай массив (для записи повторений) по кол-во строк, инициализируй его нулями, индекс в массиве должен соотвествовать индексу строки в двумерном массиве, потом считай для каждой строки максимальное число повторений (считается за n время), дальше сортируй любым видом сортировки, берешь индекс строки смотришь в массиве где записаны повторения и меняешь строки, смотря какой алгоритм так и строки меняются. Если нельзя использовать/нет стандартного оптимизированного Quicksort то я бы использовал heapsort.

Меня сразу это бессмыслено любой алгоритм который применяет сравнения быстрее nlogn не работает, делай лучше по шагам, посчитал - отсортировал
Аноним 12/12/16 Пнд 07:21:36  142025942
>>142025765
Да я вообще на vba пытаюсь. Не спрашивай как так вышло. Я его 3 дня изучаю. Я вообще не программист.
Аноним 12/12/16 Пнд 07:28:48  142026053
>>142007977 (OP)
Пишешь функцию, которая вычисляет количество повторяющихся элементов в массиве и делаешь ее ключом сортировки.

Например на питоне:
sorted(s, key=lambda l: l.count(max(l, key=lambda x: l.count(x))), reverse=True)

Аноним 12/12/16 Пнд 09:50:18  142029179
бамап
Аноним 12/12/16 Пнд 12:34:16  142035696

[Назад][Обновить тред][Вверх][Каталог] [Реквест разбана] [Подписаться на тред] [ ] 50 | 2 | 15
Назад Вверх Каталог Обновить

Топ тредов
Избранное