15 лет на работе, где все время надо работать - это сильно! Я бы не смог.tau wrote:Так работать же надо, а жизнь так коротка.Sergunka wrote:Ага и два поста на привете Да Вы, батенька, немногословныtau wrote:Одно интервью за последние 15 лет работы.
Кто меньше?
Задачи для IT интервью
-
- Уже с Приветом
- Posts: 18862
- Joined: 30 Aug 2001 09:01
- Location: 3rd planet
Re: Задачи для IT интервью
Тупизна как Энтропия. Неумолимо растет.
-
- Уже с Приветом
- Posts: 34124
- Joined: 03 Dec 2000 10:01
- Location: Vladivostok->San Francisco->Los Angeles->San Francisco
Re: Задачи для IT интервью
Были такие сроки с "без права переписки" (с)Boriskin wrote:15 лет на работе, где все время надо работать - это сильно! Я бы не смог.tau wrote:Так работать же надо, а жизнь так коротка.Sergunka wrote:Ага и два поста на привете Да Вы, батенька, немногословныtau wrote:Одно интервью за последние 15 лет работы.
Кто меньше?
"A patriot must always be ready to defend his country against his government." Edward Abbey
-
- Уже с Приветом
- Posts: 510
- Joined: 07 Dec 2001 10:01
- Location: toronto
Re: Задачи для IT интервью
Дети появятся - сможешь.Boriskin wrote: 15 лет на работе, где все время надо работать - это сильно! Я бы не смог.
-
- Уже с Приветом
- Posts: 18862
- Joined: 30 Aug 2001 09:01
- Location: 3rd planet
Re: Задачи для IT интервью
Дык то не по своей воле.Sergunka wrote:Были такие сроки с "без права переписки" (с)
Тупизна как Энтропия. Неумолимо растет.
-
- Уже с Приветом
- Posts: 18862
- Joined: 30 Aug 2001 09:01
- Location: 3rd planet
Re: Задачи для IT интервью
Может проще работу сменить?tau wrote:Дети появятся - сможешь.Boriskin wrote: 15 лет на работе, где все время надо работать - это сильно! Я бы не смог.
Тупизна как Энтропия. Неумолимо растет.
-
- Уже с Приветом
- Posts: 510
- Joined: 07 Dec 2001 10:01
- Location: toronto
Re: Задачи для IT интервью
Перестанет устраивать - тут же сменю.Boriskin wrote:Может проще работу сменить?tau wrote:Дети появятся - сможешь.Boriskin wrote: 15 лет на работе, где все время надо работать - это сильно! Я бы не смог.
-
- Уже с Приветом
- Posts: 34124
- Joined: 03 Dec 2000 10:01
- Location: Vladivostok->San Francisco->Los Angeles->San Francisco
Re: Задачи для IT интервью
Не говори гоп...tau wrote:Перестанет устраивать - тут же сменю.Boriskin wrote:Может проще работу сменить?tau wrote:Дети появятся - сможешь.Boriskin wrote: 15 лет на работе, где все время надо работать - это сильно! Я бы не смог.
"A patriot must always be ready to defend his country against his government." Edward Abbey
-
- Уже с Приветом
- Posts: 18862
- Joined: 30 Aug 2001 09:01
- Location: 3rd planet
Re: Задачи для IT интервью
Ну тогда "бог в помощь..." (с)tau wrote:Перестанет устраивать - тут же сменю.
Тупизна как Энтропия. Неумолимо растет.
-
- Уже с Приветом
- Posts: 10599
- Joined: 17 Jul 2003 22:11
Re: Задачи для IT интервью
Капитализм! С работы надо уходить с чуством невыполненного долга!Boriskin wrote:15 лет на работе, где все время надо работать - это сильно! Я бы не смог.tau wrote:Так работать же надо, а жизнь так коротка.Sergunka wrote:Ага и два поста на привете Да Вы, батенька, немногословныtau wrote:Одно интервью за последние 15 лет работы.
Кто меньше?
Пх'нглуи мглв'нафх Ктулху Р'лайх угахнагл фхтагн
-
- Уже с Приветом
- Posts: 990
- Joined: 27 Mar 2002 10:01
- Location: Palo Alto, CA
Re: Задачи для IT интервью
Решил не открывать новую тему, а воспользоваться существующей - благо название подходящее и место, вроде, людное.
Придумалась алгоритмическая задача, которую можно было бы использовать при собеседовании (не обязательно очном и за час) в диапазоне от студента до PhD. Хочется понять реальные пределы применимости.
Есть N=2^n чисел, A0 < A1 < A2 < A3 < …< AN-1, которые расположены в массиве через один, например для 2^4=16:
[A0 A8 A1 A9 A2 A10 A3 A11 A4 A12 A5 A13 A6 A14 A7 A15]
Нужно восстановить естественный порядок (отсортировать).
Вызов библиотечной функции сортировки - 1 балл + мороженное.
Дополнительная память O(n), время O(n) - 2 балла.
Дополнительная память O(1) - 3 балла.
Дополнительная память O(1), оптимальное количество чтений/записей в массив - 4 балла.
Дополнительная память O(1), оптимальное количество чтений/записей в массив, время O(n) - 5 баллов.
5, наверное, запредельно. 3 - вполне реально. Вопрос, подъемно ли 4?
Придумалась алгоритмическая задача, которую можно было бы использовать при собеседовании (не обязательно очном и за час) в диапазоне от студента до PhD. Хочется понять реальные пределы применимости.
Есть N=2^n чисел, A0 < A1 < A2 < A3 < …< AN-1, которые расположены в массиве через один, например для 2^4=16:
[A0 A8 A1 A9 A2 A10 A3 A11 A4 A12 A5 A13 A6 A14 A7 A15]
Нужно восстановить естественный порядок (отсортировать).
Вызов библиотечной функции сортировки - 1 балл + мороженное.
Дополнительная память O(n), время O(n) - 2 балла.
Дополнительная память O(1) - 3 балла.
Дополнительная память O(1), оптимальное количество чтений/записей в массив - 4 балла.
Дополнительная память O(1), оптимальное количество чтений/записей в массив, время O(n) - 5 баллов.
5, наверное, запредельно. 3 - вполне реально. Вопрос, подъемно ли 4?
-
- Posts: 1
- Joined: 24 Dec 2015 15:41
Re: Задачи для IT интервью
Такое решение на сколько тянет?
Я использовал бы Shellsort, объяснил что он идеален для частично сортированного массива. Написал бы Shelllsort и получил мороженное. Интересно как повлияет на производительность Shellsort если подобрать increment sequence отличную от (3*k-1)/2.
Code: Select all
public static void main(String[] args) {
String[] a = {"A0", "A8", "A1", "A9", "A2", "A10", "A3", "A11", "A4", "A12", "A5", "A13", "A6", "A14", "A7", "A15"};
System.out.println(Arrays.toString(a));
for(int i = 1; i<a.length/2; i++) {
for(int j=i; j<(a.length-i); j+=2)
exch(a, j,j+1 );
}
System.out.println(Arrays.toString(a));
}
-
- Уже с Приветом
- Posts: 2169
- Joined: 10 Mar 2003 05:28
- Location: Houston, TX
Re: Задачи для IT интервью
Code: Select all
String[] a = {"A0", "A8", "A1", "A9", "A2", "A10", "A3", "A11", "A4", "A12", "A5", "A13", "A6", "A14", "A7", "A15"}, b = new String[a.length];
for (int i = 0, idx1 = 0, idx2 = a.length / 2; i < a.length; i++)
b[i % 2 == 0 ? idx1++ : idx2++] = a[i];
a = b;
-
- Уже с Приветом
- Posts: 990
- Joined: 27 Mar 2002 10:01
- Location: Palo Alto, CA
Re: Задачи для IT интервью
Время O(n^2) - 1 балл. Я бы отредактировал свой пост, заменив N на n: n = 2^k, чтобы все оценки сложности были от длины массива.sereja123 wrote:Такое решение на сколько тянет?
-
- Уже с Приветом
- Posts: 990
- Joined: 27 Mar 2002 10:01
- Location: Palo Alto, CA
Re: Задачи для IT интервью
Это 2 балла - квалификационный уровень (практика показывает, что не все его проходят). Попробуйте теперь без дополнительного массива.Aleksey Kudinov wrote:но задачка так себе, ни уму ни сердцу.Code: Select all
String[] a = {"A0", "A8", "A1", "A9", "A2", "A10", "A3", "A11", "A4", "A12", "A5", "A13", "A6", "A14", "A7", "A15"}, b = new String[a.length]; for (int i = 0, idx1 = 0, idx2 = a.length / 2; i < a.length; i++) b[i % 2 == 0 ? idx1++ : idx2++] = a[i]; a = b;
-
- Уже с Приветом
- Posts: 2169
- Joined: 10 Mar 2003 05:28
- Location: Houston, TX
Re: Задачи для IT интервью
Ишь, квалификации ещё понапридумывали... [EDIT] nevermind, похоже на читингolg2002 wrote:Это 2 балла - квалификационный уровень (практика показывает, что не все его проходят). Попробуйте теперь без дополнительного массива.Aleksey Kudinov wrote:но задачка так себе, ни уму ни сердцу.Code: Select all
String[] a = {"A0", "A8", "A1", "A9", "A2", "A10", "A3", "A11", "A4", "A12", "A5", "A13", "A6", "A14", "A7", "A15"}, b = new String[a.length]; for (int i = 0, idx1 = 0, idx2 = a.length / 2; i < a.length; i++) b[i % 2 == 0 ? idx1++ : idx2++] = a[i]; a = b;
Code: Select all
int[] a = {0, 8, 1, 9, 2, 10, 3, 11, 4, 12, 5, 13, 6, 14, 7, 15};
int idx = 0;
while (idx < a.length / 2) {
while (a[idx] != idx)
exchange(a, idx, a[idx]);
idx++;
}
-
- Уже с Приветом
- Posts: 1679
- Joined: 04 Oct 2006 23:30
- Location: Las Vegas
Re: Задачи для IT интервью
это неверное решение, рассмотрите пример где a[0] = 1Aleksey Kudinov wrote:Ишь, квалификации ещё понапридумывали... [EDIT] nevermind, похоже на читингolg2002 wrote:Это 2 балла - квалификационный уровень (практика показывает, что не все его проходят). Попробуйте теперь без дополнительного массива.Aleksey Kudinov wrote:но задачка так себе, ни уму ни сердцу.Code: Select all
String[] a = {"A0", "A8", "A1", "A9", "A2", "A10", "A3", "A11", "A4", "A12", "A5", "A13", "A6", "A14", "A7", "A15"}, b = new String[a.length]; for (int i = 0, idx1 = 0, idx2 = a.length / 2; i < a.length; i++) b[i % 2 == 0 ? idx1++ : idx2++] = a[i]; a = b;
Code: Select all
int[] a = {0, 8, 1, 9, 2, 10, 3, 11, 4, 12, 5, 13, 6, 14, 7, 15}; int idx = 0; while (idx < a.length / 2) { while (a[idx] != idx) exchange(a, idx, a[idx]); idx++; }
-
- Уже с Приветом
- Posts: 2169
- Joined: 10 Mar 2003 05:28
- Location: Houston, TX
Re: Задачи для IT интервью
Набросились, критиковать-то все мастера... Ну ужас ужасный, конечно, получился, ну что ж теперь тут поделать.
Code: Select all
@Test
public void testArray2() {
String[] a = {"A0", "A8", "A1", "A9", "A2", "A10", "A3", "A11", "A4", "A12", "A5", "A13", "A6", "A14", "A7", "A15"};
System.out.println(Arrays.toString(a));
int halfSize = a.length / 2;
for (int i1 = 1; i1 < halfSize; i1 += 2) {
int i = i1;
String tempValue = "";
do {
int idx = i + (i % 2 == 0 ? -i / 2 : halfSize - i / 2 - 1);
if ("".equals(tempValue)) {
tempValue = a[idx];
a[idx] = a[i];
} else {
String s = tempValue;
tempValue = a[idx];
a[idx] = s;
}
i = idx;
} while (i != i1);
}
System.out.println(Arrays.toString(a));
}
-
- Уже с Приветом
- Posts: 990
- Joined: 27 Mar 2002 10:01
- Location: Palo Alto, CA
Re: Задачи для IT интервью
Мысль движется в правильном направлении, но для n=32 алгоритм не сработает.
-
- Уже с Приветом
- Posts: 2169
- Joined: 10 Mar 2003 05:28
- Location: Houston, TX
Re: Задачи для IT интервью
ну и х.. с ним, пусть гугли оптимизируют. если мне на интервью покажут второй массив - будет солидный повод для дальнейшего разговора.olg2002 wrote:Мысль движется в правильном направлении, но для n=32 алгоритм не сработает.
-
- Уже с Приветом
- Posts: 802
- Joined: 24 Jan 2007 07:32
- Location: Сергели->Новосибирск->SFBA->Новосибирск->Москва->NY->SFBA
Re: Задачи для IT интервью
Мое подправленное решение следующееolg2002 wrote:Решил не открывать новую тему, а воспользоваться существующей - благо название подходящее и место, вроде, людное.
Придумалась алгоритмическая задача, которую можно было бы использовать при собеседовании (не обязательно очном и за час) в диапазоне от студента до PhD. Хочется понять реальные пределы применимости.
Есть N=2^n чисел, A0 < A1 < A2 < A3 < …< AN-1, которые расположены в массиве через один, например для 2^4=16:
[A0 A8 A1 A9 A2 A10 A3 A11 A4 A12 A5 A13 A6 A14 A7 A15]
Нужно восстановить естественный порядок (отсортировать).
Вызов библиотечной функции сортировки - 1 балл + мороженное.
Дополнительная память O(n), время O(n) - 2 балла.
Дополнительная память O(1) - 3 балла.
Дополнительная память O(1), оптимальное количество чтений/записей в массив - 4 балла.
Дополнительная память O(1), оптимальное количество чтений/записей в массив, время O(n) - 5 баллов.
5, наверное, запредельно. 3 - вполне реально. Вопрос, подъемно ли 4?
1. Надо вычислить формулу для нахождения индекса j в Aj имея на входе только номер позиции (начиная с нуля).
Например в позиции 5 лежит число A10, индекс j=10
Общая формула следующая
j = (i%2 == 0) ? i/2 : (N+i)/2
Для четных j = i/2, для нечетных j = N/2 + i/2, где i - номер позиции
2. Для все нечетных позиций от 1 до N/2-1 вычислить последовательность переходов-обменов значениями.
По номеру позиции мы всегда можем узнать индекс j следующего перехода.
На примере это выглядит так для N = 16
A8->A4->A2->A1
A9->A12->A6->A3
A10->A5
A11->A13->A14->A7
Количество итераций равно N/4, максимально число переходов обменов равно 4.
То есть количество обменов не больше чем O(N).
Last edited by Pantigalt on 25 Dec 2015 10:00, edited 1 time in total.
Спи быстрее, твоя подушка нужна другому. Copyright Зощенко
-
- Уже с Приветом
- Posts: 990
- Joined: 27 Mar 2002 10:01
- Location: Palo Alto, CA
Re: Задачи для IT интервью
1. Формула вычисления следующего индекса выглядит коряво, но за ней скрывается очень простая и наглядная идея.
2. Случай N=16 оказывается слишком простым и приводит к неверным обобщениям. Для N=32 один такой цикл это
A5 -> A18 -> A9 -> A20 -> A10
т.е. если мы просто применим такой цикл ко всем нечетным индексам меньше N/2, то поскольку в этом конкретном цикле
встречаются 5 и 9, он будет применен два раза (это то же самое, что происходит в последнем алгоритме Aleksey Kudinov).
Если бы мы могли избежать повторного применения одного и того же цикла, мы бы получили решение на 4 балла.
2. Случай N=16 оказывается слишком простым и приводит к неверным обобщениям. Для N=32 один такой цикл это
A5 -> A18 -> A9 -> A20 -> A10
т.е. если мы просто применим такой цикл ко всем нечетным индексам меньше N/2, то поскольку в этом конкретном цикле
встречаются 5 и 9, он будет применен два раза (это то же самое, что происходит в последнем алгоритме Aleksey Kudinov).
Если бы мы могли избежать повторного применения одного и того же цикла, мы бы получили решение на 4 балла.
-
- Уже с Приветом
- Posts: 802
- Joined: 24 Jan 2007 07:32
- Location: Сергели->Новосибирск->SFBA->Новосибирск->Москва->NY->SFBA
Re: Задачи для IT интервью
Применим цикл ко всем нечетным индексам меньше N/2, где N=32, рассматриваем цепочки длины k, такое что N = 2^kolg2002 wrote:1. Формула вычисления следующего индекса выглядит коряво, но за ней скрывается очень простая и наглядная идея.
2. Случай N=16 оказывается слишком простым и приводит к неверным обобщениям. Для N=32 один такой цикл это
A5 -> A18 -> A9 -> A20 -> A10
т.е. если мы просто применим такой цикл ко всем нечетным индексам меньше N/2, то поскольку в этом конкретном цикле
встречаются 5 и 9, он будет применен два раза (это то же самое, что происходит в последнем алгоритме Aleksey Kudinov).
Если бы мы могли избежать повторного применения одного и того же цикла, мы бы получили решение на 4 балла.
a) Запомним наименьшее значение индекса для всех уже рассмотренных цепочек global min
b) Находим наименьшее значение индекса для текущей цепочки local min
c) Если global min >= local min то отбрасываем цепочку
d) Производим обмены значениями
A16 -> A8 -> A4 -> A2 -> A1 (local min = A1)
A17 -> A24 -> A12 -> A6 -> A3 (local min = A3)
A18 -> A9 -> A20 -> A10 -> A5 (local min = A5)
A19 -> A25 -> A28 -> A14 -> A7 (local min = A7)
A20 -> A10 -> A5 -> A18 -> A9 (local min = A5)
A21 -> A26 -> A13 -> A22 -> A11 (local min = A11)
A22 -> A11 -> A21 -> A26 -> A13 (local min = A11)
A23 -> A27 -> A29 -> A30 -> A15 (local min = A15)
В цепочках нет дубликатов следственно число обменов меньше N.
Отступление 1:
Из этого кстати видно что количество дубликатов будет расти по логарифмическому закону
Число дубликатов = N * (k/4 - 1) = N * (log(N)/4 - 1)
Число дублирующих цепочек = N * (k/4 - 1)/k = N * (log(N)/4 - 1)/log(N)
Отступление 2:
По сути это задача нахождения Эйлерова цикла в графе. Для поиска Эйлерова цикла воспользуемся тем, что эйлеров цикл — это объединение всех простых циклов графа. Ребра графа - это переходы, например A5 -> A18.
Так как есть ограничение по памяти то мы не можем кэшировать уже рассмотренные ребра. Но можем узнать есть ли значение в кэше или нет. Ребро не может находится больше чем в одном простом цикле графа. Сравнивая вершины с минимальными индексами ребер мы можем отсечь те циклы которые являются дубликатами существующих.
Сложность алгоритма линейно зависит от числа ребер (числа переходов) и равна O(N).
Last edited by Pantigalt on 25 Dec 2015 10:48, edited 1 time in total.
Спи быстрее, твоя подушка нужна другому. Copyright Зощенко
-
- Уже с Приветом
- Posts: 15759
- Joined: 01 Mar 2008 15:14
Re: Задачи для IT интервью
5050 - Сумму посчитатьctin wrote:Из свежего: Есть мешок с шарами, пронумерованными от 1 до 100. Один из шаров вынули и дали мешок Вам. Ваша задача - за один проход узнать какой именно шар был вынут.
-
- Уже с Приветом
- Posts: 990
- Joined: 27 Mar 2002 10:01
- Location: Palo Alto, CA
Re: Задачи для IT интервью
Почему цепочки получаются длины k? (Это, кстати, неверно в общем случае: при N=16 у нас уже была цепочка длины 2.)Pantigalt wrote: Применим цикл ко всем нечетным индексам меньше N/2, где N=32, рассматриваем цепочки длины k, такое что N = 2^k
a) Запомним наименьшее значение индекса для всех уже рассмотренных цепочек global min
b) Находим наименьшее значение индекса для текущей цепочки local min
c) Если global min >= local min то отбрасываем цепочку
d) Производим обмены значениями
Идея с глобальным минимумом неверна. Собственно, b) - уже практически решение, остается только правильно сформулировать, что делать с этим локальным минимумом.
Отступление 2:
По сути это задача нахождения Эйлерова цикла в графе.
Я не вижу связи. Наш "граф" состоит из большого количества несвязных циклов длины k (делящей k на самом деле). Искать их не надо - все они заданы формулой пересчета индекса.
-
- Уже с Приветом
- Posts: 802
- Joined: 24 Jan 2007 07:32
- Location: Сергели->Новосибирск->SFBA->Новосибирск->Москва->NY->SFBA
Re: Задачи для IT интервью
olg2002 wrote:Почему цепочки получаются длины k? (Это, кстати, неверно в общем случае: при N=16 у нас уже была цепочка длины 2.)Pantigalt wrote: Применим цикл ко всем нечетным индексам меньше N/2, где N=32, рассматриваем цепочки длины k, такое что N = 2^k
a) Запомним наименьшее значение индекса для всех уже рассмотренных цепочек global min
b) Находим наименьшее значение индекса для текущей цепочки local min
c) Если global min >= local min то отбрасываем цепочку
d) Производим обмены значениями
Идея с глобальным минимумом неверна. Собственно, b) - уже практически решение, остается только правильно сформулировать, что делать с этим локальным минимумом.Отступление 2:
По сути это задача нахождения Эйлерова цикла в графе.
Я не вижу связи. Наш "граф" состоит из большого количества несвязных циклов длины k (делящей k на самом деле). Искать их не надо - все они заданы формулой пересчета индекса.
Цепочки могут быть меньшей длины не превышающей k - откуда не знаю, эмпирически. Эту часть мне еще надо доказать.olg2002 wrote:Почему цепочки получаются длины k? (Это, кстати, неверно в общем случае: при N=16 у нас уже была цепочка длины 2.)
Про global min я погорячился с названием, имелось ввиду что выбираем максимальный минимум из уже рассмотренных цепочек и сравниваем с текущем минимумом цепочки.olg2002 wrote:Идея с глобальным минимумом неверна.
Мы их не ищем. Мы отсекаем те простые циклы графа которые будут дублирующими существующих.olg2002 wrote:Я не вижу связи. Наш "граф" состоит из большого количества несвязных циклов длины k (делящей k на самом деле). Искать их не надо - все они заданы формулой пересчета индекса.
Спи быстрее, твоя подушка нужна другому. Copyright Зощенко