febb: (Default)
[personal profile] febb
Гуглята издеваются на интервью. Например они задают такие классические задачки.

Дан массив целых чисел (положительные и отрицательные) найти кусок в этом массиве,
сумма элементов в котором максимальная.

Это известная задачка. Поэтому кто знает ответ, не залезая в Гугл,
может просто написать тут "знаю". Это своеобразные азы, ликбез
для молодого гугловода... :)

А кто не знает, можете предложить алгоритм тут.
Нам будет забавно узнать какие вы умные. :))

Date: 2009-09-30 01:51 pm (UTC)
From: [identity profile] bespechnoepero.livejournal.com
написал бы ты мне програмку, пока не работаешь. попрактикуешься, а заодно и проверим какой ты умный)))

ну и в портфолио такая програмка не помешает. слова хорошо, но лучше один раз показать, что ты можешь, чем сто раз рассказать.

Date: 2009-09-30 01:53 pm (UTC)
From: [identity profile] tcikuta.livejournal.com
Так ты не оплошал?

Date: 2009-09-30 01:59 pm (UTC)
From: [identity profile] diffio.livejournal.com
Я к алгоритмам отношения не имею, но наверное, бежать и суммировать и сбоку держать сумму, каждый раз сравнивая. Если больше - обновить и запомнить индексы двух чисел, если нет, то просто продолжать дальше.

Date: 2009-09-30 02:14 pm (UTC)
From: [identity profile] febb.livejournal.com
Это нельзя назвать таким словом :)))

Date: 2009-09-30 02:15 pm (UTC)
From: [identity profile] febb.livejournal.com
Какую програмку?)

Date: 2009-09-30 02:16 pm (UTC)
From: [identity profile] tcikuta.livejournal.com
Ты их сделал? :)

Date: 2009-09-30 03:06 pm (UTC)
From: [identity profile] febb.livejournal.com
Впервые эту задачку поставил один профессор из Браун университета, а решил другой из Карнеги-Мелон. У меня было 3 минуты и я не успел :)

Date: 2009-09-30 03:57 pm (UTC)
From: [identity profile] bespechnoepero.livejournal.com
нужно смоделировать наиболее плотную упаковку шариков разного диаметра. задается диаметр шариков, соотношение колличества шариков разного размера в смеси, и программа рассчитывает их наиболее плотную упаковку. к примеру, имеются шарики диаметром один, сантиметр, два сантиметра и три сантиметра, тридцать процентов первых, тридцать процентов вторых, и сорок процентов третьих. нужно выдать на монитор картинку их наиболее плотной упаковки, и проявить образовавшуюся структуру.

Date: 2009-09-30 04:04 pm (UTC)
From: [identity profile] febb.livejournal.com
Очень любопытная задачка!

Date: 2009-09-30 04:08 pm (UTC)
From: [identity profile] febb.livejournal.com
С одинаковыми шариками всё просто:
http://en.wikipedia.org/wiki/Close-packing_of_spheres

Date: 2009-09-30 04:24 pm (UTC)
From: [identity profile] bespechnoepero.livejournal.com
сомневаюсь я, что эта задача решаемая. в маленьких массивах еще можно перебрать все комбинации, а уже в массиве сто на сто колличесво возможных кусков будет огромным. я себе не представляю алгоритм, который позволит отбросить большинство комбинаций, как заведомо "плохих".

подумав немного

Date: 2009-09-30 04:29 pm (UTC)
From: [identity profile] bespechnoepero.livejournal.com
нужно составить новый массив из сумм соседних чисел. алгоритм для этого прост. но вот, что этот новый массив нам даст, и каков следующий шаг?

еще подумав

Date: 2009-09-30 04:33 pm (UTC)
From: [identity profile] bespechnoepero.livejournal.com
на самом деле получится четыре массива, один для сумм по горизонтали, один для сумм по вертикали, и два для сумм по диагонали. может их сложение прояснит картину?

Date: 2009-09-30 04:40 pm (UTC)
From: [identity profile] bespechnoepero.livejournal.com
да, с одинаковыми шариками все просто, поэтому стоит ввести ограничение в программу, что число размеров должно быть от 2 до, скажем, 9. ну и также предотвратить создание кластеров в модели, чтобы программа не жульничала.

мне кажется, что есть смысл ввести понятие "квантов", то есть очень маленьких частиц пространства, из которых состоят и шарики, и пустота между ними. тогда задача сводится на нахождению комбинации с максимальным числом непустых квантов.

Date: 2009-09-30 08:14 pm (UTC)
From: [identity profile] febb.livejournal.com
Ограничения врядли помогут. Если аналитическое решение затруднительно, то просто "кухне" они вряли помешают.
Задача напоминает о гравитации многих тел. Ведь компактность - минимум энерги... Кажись шравитация 3-х - это максимум на что способна аналитика.

Date: 2009-09-30 08:16 pm (UTC)
From: [identity profile] febb.livejournal.com
Алгоритм очень просто - 15 строчек :)
И сложность O(n).

Re: еще подумав

Date: 2009-09-30 08:17 pm (UTC)
From: [identity profile] febb.livejournal.com
Ну это простой перебор.
Простой перебор не считается в среде программистов "алгоритмом"! :)

Date: 2009-10-01 03:45 am (UTC)
From: [identity profile] leeeto.livejournal.com
омг. вот мой вариант :)
нужен пост про правильно :)

<%


//int arr[]={-1,0,2,7,-10,8,4,3,-4,1};

int arr[]={3,0,2,-7,5,-8,4,3,-4,1};

int max = 0, sum = 0, step=0, firstpos = 0, a=0, b=0;
for (int i=0;i<10;i++)out.println(arr[i]+" ");
out.println("
");

boolean isfirst=true;
if(arr[1]<0)isfirst=false;

for (int i=0;i<10;i++)
{
if (arr[i]<0) {
if(sum>max)
{
max=sum;
a=firstpos;
b=firstpos+step-1;

}

sum=0;
isfirst=true;
step=0;
}
else {
if(isfirst) {
firstpos=i+1;
step=0;
isfirst=false;
}
sum = sum+arr[i];
step++;
}

}

out.println("max= "+max+" a = "+a+ " b= "+b);

%>

Date: 2009-10-01 01:40 pm (UTC)
From: [identity profile] febb.livejournal.com
У меня тоже была сначала идея, что нужно искать по отрицательным элементам.
Но это на самом деле не так. Ведь за небольшим отрицательным может быть очень хорошее положительное!
Надо быть оптимистом! :)
Спасибо!

Date: 2009-10-01 01:50 pm (UTC)
From: [identity profile] andy-scott.livejournal.com
построить дерево от листьев к вершине

листья - элементы массива

сумма 2 соседних элементов - узлы первого уровня (если нечетное к-во элементов, до дополняем до четного псевдоэлементом == 0)
сумма 4 соседних элементов - узлы 2 уровня
итд до корня

потом обойти дерево и найти узел/лист, в котором значение максимально

Date: 2009-10-01 01:52 pm (UTC)
From: [identity profile] andy-scott.livejournal.com
ну и на всякий случай - первое дерево строим с array[0] второе точно так же но начиная с array[1]

и алгоритм выполняем дважды соответственно

Date: 2009-10-01 02:02 pm (UTC)
From: [identity profile] febb.livejournal.com
Можно придумать массив, для котрого этот алгоритм бессилен.

Date: 2009-10-01 02:03 pm (UTC)
From: [identity profile] febb.livejournal.com
И вообще нужно всё сделать в один проход :)

Date: 2009-10-01 02:09 pm (UTC)
From: [identity profile] leeeto.livejournal.com
хм.
а ведь вы правы. :)))))))))

ладно. буду думать дальше.

Date: 2009-10-01 02:44 pm (UTC)
From: [identity profile] andy-scott.livejournal.com
Вообще да, я поторопился :)

и как же правильно решается задача?

Date: 2009-10-01 02:55 pm (UTC)
From: [identity profile] andy-scott.livejournal.com
или однопроходный алгоритм с двумя ползущими указателями и "ощупыванием" вперед переднего на 1 элемент и назад от заднего на 1 элемент, запоминаем для макс. суммы значение и 2 индекса

Re: еще подумав

Date: 2009-10-01 03:14 pm (UTC)
From: [identity profile] bespechnoepero.livejournal.com
обижаете. какой же это перебор? это преобразование.

Date: 2009-10-01 03:27 pm (UTC)
From: [identity profile] bespechnoepero.livejournal.com
Жаль. Такая програмка здорово бы помогла в разработке сверхтвердых керамик и сплавов, но раз аналитика не может помочь, то будем алхимичить по-старому, интуитивно. Авось, что-нибудь испечется съедобное.

Date: 2009-10-01 03:35 pm (UTC)
From: [identity profile] febb.livejournal.com
В принципе это известный класс задач.
Нахождение минимум функционала с ограничениями.
Задачу надо центрировать.
Центр - это центр тяжести кластера.
Надо найти минимум его момента инерции.
Ограничения просты - расстояния между точками больше суммы радиусов.
Можно пофантазировать, что на самом деле кластеров будет не один, а много...
И тп.п.

Date: 2009-10-01 03:39 pm (UTC)
From: [identity profile] febb.livejournal.com
Я бы сделал такое моделирование: на каждом шаге шарик пытается приблизится к своему ближайшему соседу на минимальное возможное расстояние. Считается как можно дольше с некоторой перетряской. Когда система устаканится, можно посмотреть, что получается.

Date: 2009-10-01 03:41 pm (UTC)
From: [identity profile] febb.livejournal.com
Точнее приблизиться к центру кластера и с некоторой случайной вероятностью отклониться от этого прямого пути.

Profile

febb: (Default)
febb

March 2022

S M T W T F S
  1 2 345
6 7 89 101112
13141516171819
20212223242526
2728293031  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 10th, 2026 08:47 am
Powered by Dreamwidth Studios