Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / задание дойче банк / 25 сообщений из 33, страница 1 из 2
24.08.2014, 23:30
    #38727697
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задание дойче банк
Добрый день!
Одним глазком просмотрел пример теста, одно из заданий: есть 3 массива размером n, p, q. Требуется найти элемент который есть в трех массивах за O(n+p+q)
Я думаю это примерно так:
Код: java
1.
2.
3.
4.
5.
Map map1 = new HashMap();
Map map2 = new HashMap();
for(int element : ArrayN) map1.add(element);
for(int element : ArrayP) if(map1.contains(element)) map2.add(element);
for(int element : ArrayQ) if(map2.contains(element)) return element;


Правильно сделать так? Есть ли еще решения?


xXx_жава жуниор_xXx
...
Рейтинг: 0 / 0
25.08.2014, 11:33
    #38727936
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задание дойче банк
офф: дойче банк это... ну как бы помягче :)
странные они люди)))
...
Рейтинг: 0 / 0
25.08.2014, 11:41
    #38727951
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задание дойче банк
no56892Правильно сделать так?
Да: http://stackoverflow.com/a/8923300
...
Рейтинг: 0 / 0
25.08.2014, 13:00
    #38728026
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задание дойче банк
Blazkowiczno56892Правильно сделать так?
Да: http://stackoverflow.com/a/8923300
Простите как же да, если getEntry (и containsKey соответственно) это O(n) (в худшем случае).
Другими словами
for(int element : ArrayP) if(map1.contains(element)) map2.add(element);
Это O(n*p).
А O(n+p) это может быть только при условии, что количество корзин в hashmap больше n и p и нет коллизий.
...
Рейтинг: 0 / 0
25.08.2014, 13:08
    #38728030
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задание дойче банк
Сергей АрсеньевПростите как же да, если getEntry (и containsKey соответственно) это O(n) (в худшем случае).

А почему обязательно "худший случай рассматривать". При нормальной реализации hashCode - O(1) о чем и заявлено в JavaDoc.
...
Рейтинг: 0 / 0
25.08.2014, 13:18
    #38728037
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задание дойче банк
BlazkowiczСергей АрсеньевПростите как же да, если getEntry (и containsKey соответственно) это O(n) (в худшем случае).

А почему обязательно "худший случай рассматривать". При нормальной реализации hashCode - O(1) о чем и заявлено в JavaDoc.

Ну на заборе тоже пишут. От
Код: java
1.
for (Entry<K,V> e = table[indexFor(hash, table.length)];


Никуда не уйти.

А в академичиских задачах рассматривают именно худший случай. Ибо "наиболее часто встречающийся случай" всего лишь зависит от выборки, а никак не от генеральной совокупности.
Подгонка hash функции под отсутствие коллизий съест свою сложность.

P.S. Принцип то конечно тот же, но задача решается несколько проще например для 32 int достаточно гигабайтика оперативочки и трех пробежек по массивам.
...
Рейтинг: 0 / 0
25.08.2014, 13:26
    #38728047
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задание дойче банк
Сергей Арсеньев А в академичиских задачах рассматривают именно худший случай.
Это тоже на заборе написано?
...
Рейтинг: 0 / 0
25.08.2014, 13:55
    #38728077
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задание дойче банк
Blazkowicz,

Нет это сокральное знание передают только устно. :)

O(1) там накроется уже на добавлении с rehash. Чтобы обезапастся от него надо установить initial capacity и load factor
http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html If the initial capacity is greater than the maximum number of entries divided by the load factor, no rehash operations will ever occur.
(В нашем случае это проделано небыло)
Но там жеThis implementation provides constant-time performance for the basic operations (get and put), assuming the hash function disperses the elements properly among the buckets. Iteration over collection views requires time proportional to the "capacity" of the HashMap instance (the number of buckets) plus its size (the number of key-value mappings). Thus, it's very important not to set the initial capacity too high (or the load factor too low) if iteration performance is important.
Т.е. если мы сделаем их зависимыми от n то не видать нам O(n), а если не сделаем то может проскочит, а может и нет.
...
Рейтинг: 0 / 0
25.08.2014, 14:21
    #38728107
wst
wst
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задание дойче банк
Можно с исходной задачей поступить проще:
случай 1: размер минимум 2 массивов равен 1 - тогда задача сводится к проходу по третьему массиву и получаем линейную сложность.
случай 2: один из массивов пуст - задача решается за константное время.
случай 3: 2 и более массивов размером больше 1, все 3 не пустые - решения с линейной сложностью нет, о чем можно радостно скинуть исключение.
Может это и не тот ответ, который хотели там увидеть, зато точный (или я что-то пропустил и задача и правда решаема не только для вырожденных случаев).
...
Рейтинг: 0 / 0
25.08.2014, 14:39
    #38728131
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задание дойче банк
Сергей АрсеньевА в академичиских задачах рассматривают именно худший случай.

Не, бывает -
YouTube Video
...
Рейтинг: 0 / 0
25.08.2014, 15:00
    #38728156
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задание дойче банк
Alexey TominНо в JDK8 починили :)
Об этом много писали год-два назад. JEE контейнеры массово апдейты выпускли тогда для этой дыры. И по-моему должны были раньше чем в JDK8 починить.
...
Рейтинг: 0 / 0
25.08.2014, 15:20
    #38728180
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задание дойче банк
BlazkowiczAlexey TominНо в JDK8 починили :)
Об этом много писали год-два назад. JEE контейнеры массово апдейты выпускли тогда для этой дыры. И по-моему должны были раньше чем в JDK8 починить.

Починили в 8ке, по т.к. это security, то в 7ку включили (просто Сергей 7ку не видит давно). 6ка- всё...
...
Рейтинг: 0 / 0
25.08.2014, 15:57
    #38728230
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задание дойче банк
Alexey TominПочинили в 8ке, по т.к. это security, то в 7ку включили (просто Сергей 7ку не видит давно). 6ка- всё...

Г.м. кто просвятит каким алгоритмом можно "построить бинарное дерево" (см выше названный ютюб в вышеназванное время) за O(1)?
...
Рейтинг: 0 / 0
25.08.2014, 16:13
    #38728251
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задание дойче банк
Сергей Арсеньев Г.м. кто просвятит каким алгоритмом можно "построить бинарное дерево" (см выше названный ютюб в вышеназванное время) за O(1)?
Не понял вопроса. Бинарное дерево строится внутри бакета, если размер бакета привышает определенное значения. Как я понял, только для Comparable ключей.
...
Рейтинг: 0 / 0
25.08.2014, 16:17
    #38728257
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задание дойче банк
Сергей АрсеньевAlexey TominПочинили в 8ке, по т.к. это security, то в 7ку включили (просто Сергей 7ку не видит давно). 6ка- всё...

Г.м. кто просвятит каким алгоритмом можно "построить бинарное дерево" (см выше названный ютюб в вышеназванное время) за O(1)?

Бинарное дерево строится в "корзине".
Под O(1) подразумевается время доступа по ключу, при том что ключ реализует адекватный hashCode() и в бакете находится минимум элементов.
...
Рейтинг: 0 / 0
25.08.2014, 16:54
    #38728309
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задание дойче банк
Сергей АрсеньевAlexey TominПочинили в 8ке, по т.к. это security, то в 7ку включили (просто Сергей 7ку не видит давно). 6ка- всё...

Г.м. кто просвятит каким алгоритмом можно "построить бинарное дерево" (см выше названный ютюб в вышеназванное время) за O(1)?

А там не 0(1) будет. Это для случая, когда с хэшем беда, и надо не свалится в полные тормоза. Т.е. будет хуже, чем если коллизий нет, но много лучше, чем если вместо двоичного дерева- обычный список.
...
Рейтинг: 0 / 0
25.08.2014, 16:55
    #38728310
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задание дойче банк
Alexey TominСергей Арсеньевпропущено...


Г.м. кто просвятит каким алгоритмом можно "построить бинарное дерево" (см выше названный ютюб в вышеназванное время) за O(1)?

А там не 0(1) будет. Это для случая, когда с хэшем беда, и надо не свалится в полные тормоза. Т.е. будет хуже, чем если коллизий нет, но много лучше, чем если вместо двоичного дерева- обычный список.

И да, считается скорость не построения, а чтения.
...
Рейтинг: 0 / 0
25.08.2014, 23:37
    #38728554
chebaaagh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задание дойче банк
3. Develop a program which solves the following task:
Find one of the numbers which exists in each of three nondecreasing arrays x[p], y[q], z[r].
Algorithm complexity should be O(p+q+r).

В оригинале задания массивы отсортированы вообще-то, поэтому и без доп. памяти можно обойтись
...
Рейтинг: 0 / 0
26.08.2014, 00:16
    #38728569
cdtyjv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задание дойче банк
chebaaagh,
Тю, ну в такой постановке задача решается за линейное время вообще без каких-либо структур данных, на десятке локальных переменных.
...
Рейтинг: 0 / 0
27.08.2014, 14:07
    #38730297
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задание дойче банк
Всем спасибо за ответы, а по поводу как с делать O(n+p+q) и в худшем случае - это подойдет только для целых чисел размером <= int, хотя дыже с long такое не получится (для отрицательных long не прокатит array[abs(element)+CONST_MAX_INT]), а для всего остального - только в той или иной степени хэш.

chebaaagh, а у Вас нет случайно еще оттуда заданий, а то там был примерный вариант - но сейчас ссылка не открывается, может из прошлых лет и т.д. Буду очень признателен.
...
Рейтинг: 0 / 0
27.08.2014, 14:46
    #38730395
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задание дойче банк
no56892Всем спасибо за ответы, а по поводу как с делать O(n+p+q) и в худшем случае - это подойдет только для целых чисел размером <= int
Теоретически для чего угодно (что может быть выражено фиксированным количеством бит) за четверть адресуемой этим количеством бит памяти (за исключением очень маленьких - так для массивов boolean нужно 4 бита).
...
Рейтинг: 0 / 0
27.08.2014, 15:13
    #38730462
chebaaagh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задание дойче банк
no56892, вариантов нет, но учебников с подобными задачами известно уже уйма. Смотрите того же Шеня
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
15.02.2017, 19:30
    #39405233
nocrus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задание дойче банк
История давних лет конечно, но может есть помните несколько заданий с самого письменного теста в банке?))
...
Рейтинг: 0 / 0
15.02.2017, 21:50
    #39405296
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задание дойче банк
ахаха, читаю такой тему, думаю про себя "опять этот дойче банк, вот правильно первый коммент к теме написан", думаю такой, сошлюсь-ка я на него сейчас, потом прокрутил вверх автора глянуть и был слегка удивлен :)) мнение, кстати, с тех пор про банки в целом не изменилось :)
...
Рейтинг: 0 / 0
16.02.2017, 17:27
    #39405985
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задание дойче банк
Nixicахаха, читаю такой тему, думаю про себя "опять этот дойче банк, вот правильно первый коммент к теме написан", думаю такой, сошлюсь-ка я на него сейчас, потом прокрутил вверх автора глянуть и был слегка удивлен :)) мнение, кстати, с тех пор про банки в целом не изменилось :)

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


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