Гость
Форумы / Java [игнор отключен] [закрыт для гостей] / Не могу понять, в чем ошибка в Merge-Sort. / 25 сообщений из 40, страница 1 из 2
05.07.2020, 02:56
    #39976347
Alexandrietz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу понять, в чем ошибка в Merge-Sort.
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
package Algorithms.lessons;

import java.util.Arrays;
import java.util.Scanner;

public class MergeSort
{
	public static void main(String[] args)
	{
		Scanner scanner = new Scanner(System.in);
		int N, start, end;
		do
		{
			start = scanner.nextInt();
			end = scanner.nextInt();
			N = scanner.nextInt();
		} while (N <= 0 && start < 0 && end > start && N < end);
		double[] arr = new double[N];
		for(int i = 0; i < N; i++)
		{
			arr[i] = Math.random();
		}
		mergeSort(arr, start, end);
		for(int i = 0; i < N; i++)
		{
			System.out.printf("arr[%d] = %f\n", i, arr[i]);
		}
	}
	
	public static void mergeSort(double[] arr, int start, int end)
	{
		int q;
		if(start >= end)  // подмассив arr содержит не более одного элемента
		{
			return;
		}
		else
		{
			q = (int)((start + end)/2);
			mergeSort(arr, start, q);
			mergeSort(arr, q + 1, end);
			merge(arr, start, q, end);
		}	
	}
	
	public static double[] merge(double[] arr, int start, int q, int end)
	{
		int n1 = q - start + 1;
		int n2 = end - q;
		double[] B = new double[n1 + 1];
		double[] C = new double[n2 + 1];
		B = Arrays.copyOfRange(arr, start, q + 1);
		C = Arrays.copyOfRange(arr, q + 1, end + 1);
		B[n1] = C[n2] = Double.MAX_VALUE;
		int i = 0;
		int j = 0;
		for(int k = start; k < q; k++)
		{
			if(B[i] <= C[j])
			{
				arr[k] = B[i];
				i++;
			}
			else
			{
				arr[k] = C[j];
				j++;
			}
		}
		return arr;
	}
}


Изучаю Java, решил подтянуть алгоритмы. Дошел до Merge-Sort. Решил написать код по книжке Кормена(сами алгоритмы там пишутся в серых табличках). Выдает ошибку
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
0
10
11
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
	at Algorithms.lessons.MergeSort.merge(MergeSort.java:54)
	at Algorithms.lessons.MergeSort.mergeSort(MergeSort.java:42)
	at Algorithms.lessons.MergeSort.mergeSort(MergeSort.java:40)
	at Algorithms.lessons.MergeSort.mergeSort(MergeSort.java:40)
	at Algorithms.lessons.MergeSort.mergeSort(MergeSort.java:40)
	at Algorithms.lessons.MergeSort.main(MergeSort.java:23)


Знаю, что вышел тупо за пределы массива. А нельзя тупо сделать в функции merge массив размера end - start + 1 каждый раз, а потом тупо сделать сортировку, например, quicksort?
...
Рейтинг: 0 / 0
05.07.2020, 04:33
    #39976352
Alexandrietz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу понять, в чем ошибка в Merge-Sort.
Не понимаю, как правильно организовать функцию merge. Если там запустить сортировку вставками, то все гуд, но сам алгоритм MergeSort теряет смысл.
...
Рейтинг: 0 / 0
05.07.2020, 11:57
    #39976392
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу понять, в чем ошибка в Merge-Sort.
Alexandrietz, а кто тебе подсказал эту реализацию? Ты сам ее написал или это скопировано из учебника?
...
Рейтинг: 0 / 0
05.07.2020, 12:59
    #39976407
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу понять, в чем ошибка в Merge-Sort.
Мой поинт вот в чем. Исторически merge-sort (MR) создавался как механизм сортировки данных на магнитных лентах.
Тоесть на тех устройствах где не было random-access, a было только последовательное чтение и последовательная
запись. Тоесть грубо говоря не было class RandomAccessFile а были только интерфейсы InputStream/OutputStream
и было очень мало (!) реально сцуко мало оперативки. Буквально несколько килобайт. Вот под эти условия
и проектировался MR.



Это очень старый алгоритм. И маэстро всех алгоритмов Дональд Кнут даже включил поддержку ленточных
устройств в свой виртуальный компьютер MMIX, просто чтобы было историческое наследие.

И невозможно тебе реализовать и понять назначение MR без понимания исторических предпосылок.

Сам по себе merge-sort прост и реализовать его легко. Но есть соблазн реализовать его неправильно.
И вот чтобы понять что ПРАВИЛЬНО и что НЕ-правильно - нужен исторический экскурс.
...
Рейтинг: 0 / 0
05.07.2020, 15:22
    #39976434
Alexandrietz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу понять, в чем ошибка в Merge-Sort.
mayton,

Ну, как мне говорили, что алгоритмы и структуры данных надо знать, так как иначе это будет говнокод.
https://en.wikipedia.org/wiki/Sorting_algorithm - тут куча алгоритмов. Как я понимаю, стажер (пока я, конечно, мечу туда) должен знать о них, и в какой ситуации применять. Я просто читаю Кормена и сам пытаюсь придумать код, хотя рецепт алгоритма в Кормене дается.
...
Рейтинг: 0 / 0
05.07.2020, 15:24
    #39976435
Alexandrietz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу понять, в чем ошибка в Merge-Sort.
mayton,

Помимо этого есть сортировки гномья, глупая, расческой и т.п.
...
Рейтинг: 0 / 0
05.07.2020, 15:32
    #39976437
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу понять, в чем ошибка в Merge-Sort.
Alexandrietz
mayton,

Ну, как мне говорили, что алгоритмы и структуры данных надо знать, так как иначе это будет говнокод.
https://en.wikipedia.org/wiki/Sorting_algorithm - тут куча алгоритмов. Как я понимаю, стажер (пока я, конечно, мечу туда) должен знать о них, и в какой ситуации применять. Я просто читаю Кормена и сам пытаюсь придумать код, хотя рецепт алгоритма в Кормене дается.

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

Но тебя могут просто спросить про свойства сортирующих алгоритмов.
Например асимптоматику и потребление дополнительной памяти и стека.

Про Гномью - забудь. Я сколько работаю - никогда в практике собесов этого не слышал. Никогда этого никто не спросит.

Могут спросить сортировку Хоара и Шелла. Они имеют наилучшие характеристики в скорости и стабильности.

Вообще это тема "начать диалог". Тоесть понять насколько ты способен технически мыслить и соображать.
Некоторые из сортировок - (метод прямого выбора или метод вставок) настолько интуитивны что даже
если ты их не знал ты их сам напишешь на бумажке минут через 30 рассуждений.
...
Рейтинг: 0 / 0
05.07.2020, 15:39
    #39976438
Alexandrietz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу понять, в чем ошибка в Merge-Sort.
mayton,

Я вот думаю взять массив из 10^N элементов, где N от нуля до, например, 10 и сделать дял кажжого алгоритма график.
...
Рейтинг: 0 / 0
05.07.2020, 15:41
    #39976439
Alexandrietz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу понять, в чем ошибка в Merge-Sort.
mayton,

Я вот дебил не могу merge организовать никак, но алгоритм с точки зрения мозгов очень легкий, но написать это на ЯПе тяжело. А так мне понравился вставочная сортировка, но у нее много сравнений, то есть он хорош, когда массив изначально хорошо отсортирован.
...
Рейтинг: 0 / 0
05.07.2020, 17:05
    #39976449
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу понять, в чем ошибка в Merge-Sort.
Alexandrietz
mayton,

Я вот думаю взять массив из 10^N элементов, где N от нуля до, например, 10 и сделать дял кажжого алгоритма график.

График чего?
...
Рейтинг: 0 / 0
05.07.2020, 17:29
    #39976460
Alexandrietz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу понять, в чем ошибка в Merge-Sort.
mayton,

Зависимости числа операций от числа элементов
...
Рейтинг: 0 / 0
05.07.2020, 17:34
    #39976462
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу понять, в чем ошибка в Merge-Sort.
А ну ОК. Одобряю. Только посчитать раздельно операции по категорям.

- сравнение двух элементов.
- чтение элемента
- запись элемента
- обмен

при этом мы будем понимать что обмен в себя всё равно включает чтение и запись но не всякое
чтение обязательно ассоциировано с обменом. Например в методе прямого выбора есть просто
прочёсывание диапазона на предмет максимального ключа и количество чтений при этом должно
быть учтено.
...
Рейтинг: 0 / 0
05.07.2020, 17:48
    #39976466
Alexandrietz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу понять, в чем ошибка в Merge-Sort.
mayton,

Сложность еще зависит от изначальной отсортированности массива. Где-то она будет лучше, где-то хуже.
...
Рейтинг: 0 / 0
05.07.2020, 17:54
    #39976468
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу понять, в чем ошибка в Merge-Sort.
Alexandrietz
mayton,

Сложность еще зависит от изначальной отсортированности массива. Где-то она будет лучше, где-то хуже.

Верно рассуждаешь. Твой эксперимент по сути должен еще разделиться на 3 части.

algorithmrandom shuffledordered ascordered descHoare SortShell Sort

Некоторые из них будут - благоприятным начальным раскладом. А некоторые - worst case. Это тот случай когда
изначально быстрый алгоритм начинает идти по избыточному пути и делать действия которые не нужны.
Здесь кстати в любой алгоритм можно опционально добавить проверку на то что массив уже отсортирован.
Это - наивно. Но это помогает отбросить worst-case.
...
Рейтинг: 0 / 0
05.07.2020, 19:32
    #39976482
Alexandrietz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу понять, в чем ошибка в Merge-Sort.
mayton,

Как я понимаю, можно еще комбинировать алгоритмы, то есть для одной части один алгоритм, а для другой - другой, но это надо заранее знать отсортированность алгоритма.
...
Рейтинг: 0 / 0
05.07.2020, 19:35
    #39976484
Alexandrietz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу понять, в чем ошибка в Merge-Sort.
mayton,

А какие ты галеры знаешь, даже самые херовые, где могут взять таких унтерменшей, как я, в будущем? Я вообще изначально в 23 года узнал о веб-программировании, но сказали, что из-за орды школьников пробиться даже на стажера почти нереал.
...
Рейтинг: 0 / 0
05.07.2020, 21:37
    #39976503
Alexandrietz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу понять, в чем ошибка в Merge-Sort.
Zzz79,

Moscow
...
Рейтинг: 0 / 0
05.07.2020, 22:40
    #39976516
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу понять, в чем ошибка в Merge-Sort.
Alexandrietz
mayton,

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

Да. Никто не запретит тебе комбинировать алгоритмы. Но асимптоматику результата еще сложнее
будет изучать и доказывать т.к. у нас появляется еще одна ветка if-else где надо расчитать с какой
вероятностью мы вылетим с позитивным условияем (уже отсортирован) и как дорого для нас
это будет стоить.

Это опять-же игры не столько с алгоритмами а больше с композицией алгоритма + тех сведений
которые известны о самих данных.
...
Рейтинг: 0 / 0
06.07.2020, 07:44
    #39976550
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу понять, в чем ошибка в Merge-Sort.
Alexandrietz
mayton,

А какие ты галеры знаешь, даже самые херовые, где могут взять таких унтерменшей, как я, в будущем? Я вообще изначально в 23 года узнал о веб-программировании, но сказали, что из-за орды школьников пробиться даже на стажера почти нереал.

Не своди все свои топики на ПТ о жизни
...
Рейтинг: 0 / 0
06.07.2020, 10:03
    #39976574
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу понять, в чем ошибка в Merge-Sort.
Alexandrietz
mayton,

А какие ты галеры знаешь, даже самые херовые, где могут взять таких унтерменшей, как я, в будущем? Я вообще изначально в 23 года узнал о веб-программировании, но сказали, что из-за орды школьников пробиться даже на стажера почти нереал.

По конторам ничего не мог сказать. Щас ситуация меняется каждый квартал.
Нет никакого инсайда у меня. Иди в крупные галеры (от 10 000 чел) стажёром.
И спокойно там расти до джуна.

Тыж сам говорил что деньги для тебя не имеют значения. Вот и посиди пол-годика
без амбиций.
...
Рейтинг: 0 / 0
06.07.2020, 15:03
    #39976705
Alexandrietz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу понять, в чем ошибка в Merge-Sort.
Zzz79,

Все разное говорят. Нет, у меня нет технической ВО. Поэтому не знаю, что делать. Если только идти в Бауманку ради технопарка. Потому и спросил про галеры, где есть возможность дорасти до джуна.
...
Рейтинг: 0 / 0
06.07.2020, 15:09
    #39976708
Alexandrietz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу понять, в чем ошибка в Merge-Sort.
mayton,

Ок, а если дорасту до джуна теоретически, дальше что?
...
Рейтинг: 0 / 0
06.07.2020, 15:11
    #39976712
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу понять, в чем ошибка в Merge-Sort.
Alexandrietz
mayton,

Ок, а если дорасту до джуна теоретически, дальше что?

Откуда я знаю!

Твоё чувство важности вырастет. Будешь вместо дешевого пива пить заграничное. Можешь на этом и остаться и быть счастливым.
...
Рейтинг: 0 / 0
06.07.2020, 15:44
    #39976723
Alexandrietz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу понять, в чем ошибка в Merge-Sort.
mayton,

Я с точки зрения диплома.
...
Рейтинг: 0 / 0
06.07.2020, 15:46
    #39976724
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу понять, в чем ошибка в Merge-Sort.
Забудь про бумажки. Это все не имеет никакого значения для твоей карьеры. Важно - то что написано
в твоём резюме с точки зрения опыта работы (кол-во месяцев) и важен стек технологий и важны
твои responsibilities на проекте которые были. И важны рекомендации от коллег - если таковые можно собрать.

Дипломы и сертификаты можешь выкинуть в мусорное ведро.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Не могу понять, в чем ошибка в Merge-Sort. / 25 сообщений из 40, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]