powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Не могу понять, в чем ошибка в Merge-Sort.
25 сообщений из 40, страница 1 из 2
Не могу понять, в чем ошибка в Merge-Sort.
    #39976347
Alexandrietz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
Не могу понять, в чем ошибка в Merge-Sort.
    #39976352
Alexandrietz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не понимаю, как правильно организовать функцию merge. Если там запустить сортировку вставками, то все гуд, но сам алгоритм MergeSort теряет смысл.
...
Рейтинг: 0 / 0
Не могу понять, в чем ошибка в Merge-Sort.
    #39976392
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexandrietz, а кто тебе подсказал эту реализацию? Ты сам ее написал или это скопировано из учебника?
...
Рейтинг: 0 / 0
Не могу понять, в чем ошибка в Merge-Sort.
    #39976407
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мой поинт вот в чем. Исторически merge-sort (MR) создавался как механизм сортировки данных на магнитных лентах.
Тоесть на тех устройствах где не было random-access, a было только последовательное чтение и последовательная
запись. Тоесть грубо говоря не было class RandomAccessFile а были только интерфейсы InputStream/OutputStream
и было очень мало (!) реально сцуко мало оперативки. Буквально несколько килобайт. Вот под эти условия
и проектировался MR.



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

algorithmrandom shuffledordered ascordered descHoare SortShell Sort

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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