Задачи для IT интервью
-
- Posts: 2
- Joined: 04 Jul 2019 08:46
Re: Задачи для IT интервью
нашел что то мож кому поможет
-
- Уже с Приветом
- Posts: 2603
- Joined: 19 Jun 2003 20:22
- Location: USA
Re: Задачи для IT интервью
Сдвиг массива длиной N на количество шагов M был?
-
- Уже с Приветом
- Posts: 4185
- Joined: 27 Apr 2011 03:43
- Location: Сергели ->Chicago
Re: Задачи для IT интервью
кривые квадратики каждый рисовать умеет.
МоржСорт имплементед:
https://github.com/valchkou/JavaSnippet ... eSort.java
МоржСорт имплементед:
https://github.com/valchkou/JavaSnippet ... eSort.java
-
- Уже с Приветом
- Posts: 7869
- Joined: 05 Aug 2003 21:39
- Location: CA
Re: Задачи для IT интервью
Или на HackerRank:
-
- Уже с Приветом
- Posts: 2749
- Joined: 11 Jul 2015 19:01
- Location: Chicago
Re: Задачи для IT интервью
Не знаю, приветствуется ли код ревью, но читать (a<=b) вместо (a <= b) лично мне тяжело, также и с плюсами, особенно когда стиль пляшет то первый вариант, то второй. Есть пару ошибок в комментах к коду.valchkou wrote: ↑09 Jul 2019 03:17 кривые квадратики каждый рисовать умеет.
МоржСорт имплементед:
https://github.com/valchkou/JavaSnippet ... eSort.java
Ну и for(int k=0; k < arr.lenght(); k++) { print arr[k] } вместо for(int element in arr) { print element } вообще тут уже обсуждалось.
-
- Уже с Приветом
- Posts: 4185
- Joined: 27 Apr 2011 03:43
- Location: Сергели ->Chicago
Re: Задачи для IT интервью
комментарии конечно приветствуются, я этот код лет 6 назад написал судя по гитхабу.nyekimov wrote: ↑09 Jul 2019 04:54Не знаю, приветствуется ли код ревью, но читать (a<=b) вместо (a <= b) лично мне тяжело, также и с плюсами, особенно когда стиль пляшет то первый вариант, то второй. Есть пару ошибок в комментах к коду.valchkou wrote: ↑09 Jul 2019 03:17 кривые квадратики каждый рисовать умеет.
МоржСорт имплементед:
https://github.com/valchkou/JavaSnippet ... eSort.java
Ну и for(int k=0; k < arr.lenght(); k++) { print arr[k] } вместо for(int element in arr) { print element } вообще тут уже обсуждалось.
Но честно сказать ты первый кто удосужился прокомментировать, а может даже и просмотреть.
И даже мне он кажется каким то странным.
Но суть не в этом, а в том что написать работающий сортморж намного сложнее чем вот то виде с доской и квадратиками.
-
- Уже с Приветом
- Posts: 1679
- Joined: 04 Oct 2006 23:30
- Location: Las Vegas
Re: Задачи для IT интервью
для быстрой сортировки int[] - radix sort - выбор мастеров, быстрее стандартного джавского Arrays.sort() в 3 раза
-
- Уже с Приветом
- Posts: 143
- Joined: 29 Apr 2014 12:22
Re: Задачи для IT интервью
На современных языках с их синтаксическим сахаром, подобное пишется быстро и строчек в 30. Без всяких досок и квадратиков.
Code: Select all
public func mergeSort<Element>(_ array: [Element]) -> [Element] where Element: Comparable {
guard array.count > 1 else { return array }
let middle = array.count / 2
let left = mergeSort(Array(array[..<middle]))
let right = mergeSort(Array(array[middle...]))
return merge(left, right)
}
private func merge<Element>(_ left: [Element], _ right: [Element]) -> [Element] where Element: Comparable {
var leftIndex = 0
var rightIndex = 0
var result: [Element] = []
while leftIndex < left.count && rightIndex < right.count {
let leftElement = left[leftIndex]
let rightElement = right[rightIndex]
if leftElement < rightElement {
result.append(leftElement)
leftIndex += 1
} else if leftElement > rightElement {
result.append(rightElement)
rightIndex += 1
} else {
result.append(leftElement)
leftIndex += 1
result.append(rightElement)
rightIndex += 1
}
}
if leftIndex < left.count {
result.append(contentsOf: left[leftIndex...])
}
if rightIndex < right.count {
result.append(contentsOf: right[rightIndex...])
}
return result
}
-
- Уже с Приветом
- Posts: 1679
- Joined: 04 Oct 2006 23:30
- Location: Las Vegas
Re: Задачи для IT интервью
каков cost result.append() ? сдается мне что эта реализация будет за O(n^2) работатьfleshold wrote: ↑09 Jul 2019 17:54На современных языках с их синтаксическим сахаром, подобное пишется быстро и строчек в 30. Без всяких досок и квадратиков.Code: Select all
public func mergeSort<Element>(_ array: [Element]) -> [Element] where Element: Comparable { guard array.count > 1 else { return array } let middle = array.count / 2 let left = mergeSort(Array(array[..<middle])) let right = mergeSort(Array(array[middle...])) return merge(left, right) } private func merge<Element>(_ left: [Element], _ right: [Element]) -> [Element] where Element: Comparable { var leftIndex = 0 var rightIndex = 0 var result: [Element] = [] while leftIndex < left.count && rightIndex < right.count { let leftElement = left[leftIndex] let rightElement = right[rightIndex] if leftElement < rightElement { result.append(leftElement) leftIndex += 1 } else if leftElement > rightElement { result.append(rightElement) rightIndex += 1 } else { result.append(leftElement) leftIndex += 1 result.append(rightElement) rightIndex += 1 } } if leftIndex < left.count { result.append(contentsOf: left[leftIndex...]) } if rightIndex < right.count { result.append(contentsOf: right[rightIndex...]) } return result }
-
- Уже с Приветом
- Posts: 2603
- Joined: 19 Jun 2003 20:22
- Location: USA
Re: Задачи для IT интервью
Писали же раньше что quicksort самый быстрый?
-
- Уже с Приветом
- Posts: 4185
- Joined: 27 Apr 2011 03:43
- Location: Сергели ->Chicago
Re: Задачи для IT интервью
А можно попросить ваш современный код отсортировать 1 млн интегеров и замерить время.
Ради интереса, что оптимизирует сахар под капотом. Думаю что в контексте данного теста железо не так важно
но если что у меня mac intel i7, количество памяти и коров значение не имеют
Что то вроде такого.
мой сорт занял 15 сек что очень долго
к слову родной ява сорт занимает всего 250 mls для 1mln
Ради интереса, что оптимизирует сахар под капотом. Думаю что в контексте данного теста железо не так важно
но если что у меня mac intel i7, количество памяти и коров значение не имеют
Что то вроде такого.
Code: Select all
int max = 1000000;
int[] arr = new int[max];
for (int i = 0; i<max; i++) {
arr[i] = ThreadLocalRandom.current().nextInt(max);
}
long t = System.currentTimeMillis();
sort(arr);
System.out.println(System.currentTimeMillis() - t);
к слову родной ява сорт занимает всего 250 mls для 1mln
Code: Select all
int[] sorted = IntStream.of(arr).sorted().toArray();
fleshold wrote: ↑09 Jul 2019 17:54 На современных языках с их синтаксическим сахаром, подобное пишется быстро и строчек в 30. Без всяких досок и квадратиков.Code: Select all
public func mergeSort<Element>(_ array: [Element]) -> [Element] where Element: Comparable { guard array.count > 1 else { return array } let middle = array.count / 2 let left = mergeSort(Array(array[..<middle])) let right = mergeSort(Array(array[middle...])) return merge(left, right) } private func merge<Element>(_ left: [Element], _ right: [Element]) -> [Element] where Element: Comparable { var leftIndex = 0 var rightIndex = 0 var result: [Element] = [] while leftIndex < left.count && rightIndex < right.count { let leftElement = left[leftIndex] let rightElement = right[rightIndex] if leftElement < rightElement { result.append(leftElement) leftIndex += 1 } else if leftElement > rightElement { result.append(rightElement) rightIndex += 1 } else { result.append(leftElement) leftIndex += 1 result.append(rightElement) rightIndex += 1 } } if leftIndex < left.count { result.append(contentsOf: left[leftIndex...]) } if rightIndex < right.count { result.append(contentsOf: right[rightIndex...]) } return result }
Last edited by valchkou on 09 Jul 2019 20:11, edited 1 time in total.
-
- Уже с Приветом
- Posts: 4185
- Joined: 27 Apr 2011 03:43
- Location: Сергели ->Chicago
Re: Задачи для IT интервью
наверное если бы он был самым быстрым то не стали бы придумывать ничего другого.
ява использует аналог тимсорт
https://en.wikipedia.org/wiki/Timsort
-
- Уже с Приветом
- Posts: 2603
- Joined: 19 Jun 2003 20:22
- Location: USA
Re: Задачи для IT интервью
Кроме скорости, есть другие причины выдумывать собственные сортировки. Мозги-то шевелятся, шарики-то крутятся. Вот в поиске простых чисел придумано ли что-то лучше Евклидова сита?valchkou wrote: ↑09 Jul 2019 20:11наверное если бы он был самым быстрым то не стали бы придумывать ничего другого.
ява использует аналог тимсорт
https://en.wikipedia.org/wiki/Timsort
-
- Уже с Приветом
- Posts: 1679
- Joined: 04 Oct 2006 23:30
- Location: Las Vegas
Re: Задачи для IT интервью
сортировка 100 mln ints на моем ноуте занимает
Arrays.sort() - 9.5 sec
merge sort - 19.5 sec
radix sort - 4.2 sec
Arrays.sort() - 9.5 sec
merge sort - 19.5 sec
radix sort - 4.2 sec
-
- Уже с Приветом
- Posts: 143
- Joined: 29 Apr 2014 12:22
Re: Задачи для IT интервью
Конечно. Попробую. Чуть позже.valchkou wrote: ↑09 Jul 2019 20:04 А можно попросить ваш современный код отсортировать 1 млн интегеров и замерить время.
Ради интереса, что оптимизирует сахар под капотом. Думаю что в контексте данного теста железо не так важно
но если что у меня mac intel i7, количество памяти и коров значение не имеют
Что то вроде такого.
Насколько помню, никогда так вот в книжках не писали. Смысл тогда в других алгоритмах? Насколько я могу помнить (всё таки читал такие книжки 20-25 лет назад), писали что то типа, что выбор конкретного алгоритма сортировки, "в реальных программах", зависит от многих факторов, и лучше использовать несколько алгоритмов, и применять в зависимости от ситуации, или модифицировать какой нибудь из "улучшенных" алгоритмов. Ведь не секрет, что при определённых условиях быстрая сортировка проиграет пузырьковой "улучшенной" и некоторым другим, как "улучшенным" (не факт, надо проверить) так и нет.
-
- Уже с Приветом
- Posts: 8470
- Joined: 02 Aug 2003 01:32
- Location: SPb->SFBA
Re: Задачи для IT интервью
Вот задачка для иллюстрации смысла разных алгоритмов.
Нужно отсортировать коробки на складе. Коробки тяжелые, носить нужно по одной вручную.
Нужно отсортировать коробки на складе. Коробки тяжелые, носить нужно по одной вручную.
-
- Уже с Приветом
- Posts: 4185
- Joined: 27 Apr 2011 03:43
- Location: Сергели ->Chicago
Re: Задачи для IT интервью
Arrays.parallelSort(arr); менее 3х секJohn Smith wrote: ↑09 Jul 2019 21:14 сортировка 100 mln ints на моем ноуте занимает
Arrays.sort() - 9.5 sec
merge sort - 19.5 sec
radix sort - 4.2 sec
-
- Уже с Приветом
- Posts: 3208
- Joined: 25 Jul 2000 09:01
-
- Уже с Приветом
- Posts: 7869
- Joined: 05 Aug 2003 21:39
- Location: CA
-
- Уже с Приветом
- Posts: 8470
- Joined: 02 Aug 2003 01:32
- Location: SPb->SFBA
Re: Задачи для IT интервью
Нет, просто в ряд стоят, нужно по порядку переставить.
-
- Уже с Приветом
- Posts: 143
- Joined: 29 Apr 2014 12:22
Re: Задачи для IT интервью
Обратный порядок массиваvalchkou wrote: ↑09 Jul 2019 20:04 А можно попросить ваш современный код отсортировать 1 млн интегеров и замерить время.
Ради интереса, что оптимизирует сахар под капотом. Думаю что в контексте данного теста железо не так важно
но если что у меня mac intel i7, количество памяти и коров значение не имеют
Что то вроде такого.мой сорт занял 15 сек что очень долгоCode: Select all
int max = 1000000; int[] arr = new int[max]; for (int i = 0; i<max; i++) { arr[i] = ThreadLocalRandom.current().nextInt(max); } long t = System.currentTimeMillis(); sort(arr); System.out.println(System.currentTimeMillis() - t);
к слову родной ява сорт занимает всего 250 mls для 1mlnCode: Select all
int[] sorted = IntStream.of(arr).sorted().toArray();
---Example of MergeSort---
2019-07-10 05:54:14 +0000
2019-07-10 05:54:23 +0000
Случайный
---Example of MergeSort shuffled---
2019-07-10 05:57:14 +0000
2019-07-10 05:57:22 +0000
Родной .sort() обратный порядок (также и случайный)
---Example of sort---
2019-07-10 06:11:59 +0000
2019-07-10 06:11:59 +0000
Radix говорите? Хорошо.
Radix в любом порядке
---Example of radixsotr---
2019-07-10 06:41:04 +0000
2019-07-10 06:41:07 +0000
Поразрядная Radix известно что O(k * n) , хорошо, сделаем k - кнстантой
---Example of radixsotr---
2019-07-10 06:55:53 +0000
2019-07-10 06:55:54 +0000
Program ended with exit code: 0
-
- Уже с Приветом
- Posts: 143
- Joined: 29 Apr 2014 12:22
Re: Задачи для IT интервью
-
- Уже с Приветом
- Posts: 143
- Joined: 29 Apr 2014 12:22
-
- Уже с Приветом
- Posts: 8470
- Joined: 02 Aug 2003 01:32
- Location: SPb->SFBA
Re: Задачи для IT интервью
-
- Уже с Приветом
- Posts: 7869
- Joined: 05 Aug 2003 21:39
- Location: CA
Re: Задачи для IT интервью
ну если силы есть и оплата почасовая, то и таскайте их по одной, хоть бабл сортом переставляя, в чем вопрос?