Как нанять грамотного индуса?

User avatar
Mic
Уже с Приветом
Posts: 6906
Joined: 20 Apr 1999 09:01
Location: Seattle

Re: Как нанять грамотного индуса?

Post by Mic »

jms wrote:
zenant2 wrote:В чем тут подвох то?

A = 1 2 3 4 5, m = 2
->
3 2 1 4 5
3 4 1 2 5
3 4 5 2 1

Вроде неправильно получается..


Задача решается в 2 итерации путем переставления элементов от крайних со смещением к центру:
1 2 3 4 5
5 2 3 4 1
5 4 3 2 1

Бенефиты: быстро, не используется extra-память.
User avatar
jms
Уже с Приветом
Posts: 268
Joined: 29 Dec 2006 12:03

Re: Как нанять грамотного индуса?

Post by jms »

Mic wrote:
jms wrote:
zenant2 wrote:В чем тут подвох то?

A = 1 2 3 4 5, m = 2
->
3 2 1 4 5
3 4 1 2 5
3 4 5 2 1

Вроде неправильно получается..


Задача решается в 2 итерации путем переставления элементов от крайних со смещением к центру:
1 2 3 4 5
5 2 3 4 1
5 4 3 2 1

Бенефиты: быстро, не используется extra-память.

Только вот в исходной задаче нужно сделать циклический сдвиг а не перевернуть масив ;-)
Last edited by jms on 12 Sep 2009 20:42, edited 1 time in total.
-- who says a penguin can't fly? http://www.youtube.com/watch?v=9dfWzp7rYR4
User avatar
Mic
Уже с Приветом
Posts: 6906
Joined: 20 Apr 1999 09:01
Location: Seattle

Re: Как нанять грамотного индуса?

Post by Mic »

jms wrote:Только вот в исходной задаче нужно сделать циклический сдвиг а перевернуть масив ;-)

Сдвиг? На сколько? В одну сторону или в обе? Что делать если заданное количество сдвигов превысит размер массива?

Есть массив A1, A2, ..., Am, Am+1, Am+2, ..., An. Без использования дополнительного массива преобразовать в массив Am+1, Am+2, ..., An, A1, A2, ..., Am

В исходной задаче вообще ни хрена не понятно...
User avatar
jms
Уже с Приветом
Posts: 268
Joined: 29 Dec 2006 12:03

Re: Как нанять грамотного индуса?

Post by jms »

Mic wrote:
jms wrote:Только вот в исходной задаче нужно сделать циклический сдвиг а перевернуть масив ;-)

Сдвиг? На сколько? В одну сторону или в обе? Что делать если заданное количество сдвигов превысит размер массива?

Есть массив A1, A2, ..., Am, Am+1, Am+2, ..., An. Без использования дополнительного массива преобразовать в массив Am+1, Am+2, ..., An, A1, A2, ..., Am

В исходной задаче вообще ни хрена не понятно...

А помоему там вполне четко описан циклический свдиг вправо на m.

Update: свдиг вправо на n - m.
Last edited by jms on 12 Sep 2009 20:56, edited 1 time in total.
-- who says a penguin can't fly? http://www.youtube.com/watch?v=9dfWzp7rYR4
User avatar
Bonny P.
Уже с Приветом
Posts: 19001
Joined: 22 Nov 2005 23:20

Re: Как нанять грамотного индуса?

Post by Bonny P. »

jms wrote:
Bonny P. wrote: и не замкнуть через него кольцо (n-m)-кратного циклического сдвига?

Если чесно, не совсем понял что это..

for (i=0, i<(n-m), i++) {
for (j=0, j<n, j++)
a[n-j] = a[n-j-1];
a[0] = a[n];
}
User avatar
jms
Уже с Приветом
Posts: 268
Joined: 29 Dec 2006 12:03

Re: Как нанять грамотного индуса?

Post by jms »

Bonny P. wrote:
jms wrote:
Bonny P. wrote: и не замкнуть через него кольцо (n-m)-кратного циклического сдвига?

Если чесно, не совсем понял что это..

for (i=0, i<(n-m), i++) {
for (j=0, j<n, j++)
a[n-j] = a[n-j-1];
a[0] = a[n];
}

Не знаю будет ли это работать, но сложность явно O(nm).

Update: у вас сложность O(n^2 - nm)
Last edited by jms on 12 Sep 2009 20:56, edited 1 time in total.
-- who says a penguin can't fly? http://www.youtube.com/watch?v=9dfWzp7rYR4
User avatar
Bonny P.
Уже с Приветом
Posts: 19001
Joined: 22 Nov 2005 23:20

Re: Как нанять грамотного индуса?

Post by Bonny P. »

jms wrote:Не знаю будет ли это работать, но сложность явно O(nm).
Что там может не работать?
User avatar
jms
Уже с Приветом
Posts: 268
Joined: 29 Dec 2006 12:03

Re: Как нанять грамотного индуса?

Post by jms »

Bonny P. wrote:
jms wrote:Не знаю будет ли это работать, но сложность явно O(nm).
Что там может не работать?

Какая разница. У вас в решении большая сложность O(n^2). Нужно O(n). То есть если n = 1 000 000 то ваше решение будет делать (1 000 000 - m) 1 000 000 циклов, а мое только 1 000 000.
-- who says a penguin can't fly? http://www.youtube.com/watch?v=9dfWzp7rYR4
User avatar
jms
Уже с Приветом
Posts: 268
Joined: 29 Dec 2006 12:03

Re: Как нанять грамотного индуса?

Post by jms »

Bonny P. wrote:
jms wrote:
Bonny P. wrote: и не замкнуть через него кольцо (n-m)-кратного циклического сдвига?

Если чесно, не совсем понял что это..

for (i=0, i<(n-m), i++) {
for (j=0, j<n, j++)
a[n-j] = a[n-j-1];
a[0] = a[n];
}

И кстати увеличение масива на 1 обычно считается созданием нового масива, что противоречит условию задачи. Конечно можно завести переменную под лишний элемент, но тогда решение получится явно не такое простое.
-- who says a penguin can't fly? http://www.youtube.com/watch?v=9dfWzp7rYR4
User avatar
deve
Уже с Приветом
Posts: 5476
Joined: 17 Mar 2006 22:18
Location: Tomsk,RU -> DC -> SFBA

Re: Как нанять грамотного индуса?

Post by deve »

jms wrote:Че то как то я не уловил логики. Работающуюу программу я написал. Вопроса "о почему о других так плохо думаете или о себе слишком хорошо ?" я если чесно не понял. Я думаю о людях плохо когда они того заслуживают.

Так с логикой похоже тоже не лады. Ну ладно, расшифруем: с чего вы решили, что вы тут "один Д`Артаньян", а "правильное решение (за O(n)) подавляющее большинство местных гуру :nono: не напишет на собеседовании" ?
User avatar
Bonny P.
Уже с Приветом
Posts: 19001
Joined: 22 Nov 2005 23:20

Re: Как нанять грамотного индуса?

Post by Bonny P. »

jms wrote:
Bonny P. wrote:
jms wrote:Не знаю будет ли это работать, но сложность явно O(nm).
Что там может не работать?

Какая разница.
Ответ, достойный интервьюера! :)
User avatar
Kalifornian
Уже с Приветом
Posts: 7838
Joined: 16 Oct 2003 22:06
Location: Kalifornia

Re: Как нанять грамотного индуса?

Post by Kalifornian »

oshibka_residenta wrote:К сожалению свою любимые сказать не могу, а тот как я буду проверять индусов


Боитесь, что мы переведем ваши вопросы на хинди и продадим детям ганга?
adda_
Уже с Приветом
Posts: 10708
Joined: 22 Jul 2006 20:19

Re: Как нанять грамотного индуса?

Post by adda_ »

Kalifornian wrote:
oshibka_residenta wrote:К сожалению свою любимые сказать не могу, а тот как я буду проверять индусов


Боитесь, что мы переведем ваши вопросы на хинди и продадим детям ганга?

Это типа задача на зеркальную перестановку массива относительно центра?
Этому учат на первом курсе института правда не на С, а на Паскале..
isartw
Уже с Приветом
Posts: 203
Joined: 04 Nov 2004 14:32
Location: Great White North

Re: Как нанять грамотного индуса?

Post by isartw »

java wrote:этак получите человека, который владеет конкретным простым навыком. например, умеет добавлять форму в стратс. что не говорит о том, что человек умеет хоть немного думать :) и что он сможет в нужный момент сказать "да хватит добавлять сюда формы, пора концепцию поменять, потому что ляляляля".

немного думать != "а давайте перепишем все нафик". Вообще говоря, не гонять же человека, которого берут на позицию j2ee девелопера скажем, по 3-му тому Кнута. Не помню если честно, когда мне последний раз приходилось алгоритм топографической сортировки применять. А вот прогуглить и выбрать какой-нибудь open-source framework быстро и грамотно нужно все чаще и чаще.
На счет поменять концепрцию - скорее не соглашусь, это задача архитектора скорее, а его аутсорсить нужно в последнюю очередь, imho. Иначе мало ли чего эти киборги мумбайские надизайнят. Проходили уже, nafique
User avatar
John Smith
Уже с Приветом
Posts: 1679
Joined: 04 Oct 2006 23:30
Location: Las Vegas

Re: Как нанять грамотного индуса?

Post by John Smith »

Кстати о гугле, вот ответ на задачу o циклическом сдвиге (Внимание! кто хочет сам решить - туда не смотреть): http://stackoverflow.com/questions/876293/fastest-algorithm-for-circle-shift-n-sized-array-for-m-position

Нарветесь на грамотного индуса - спеца по задачкам, вот он вам напрограммирует.
User avatar
Mic
Уже с Приветом
Posts: 6906
Joined: 20 Apr 1999 09:01
Location: Seattle

Re: Как нанять грамотного индуса?

Post by Mic »

jms wrote:А помоему там вполне четко описан циклический свдиг вправо на m.


Тогда вот:

Code: Select all

   
public class Task
{
   // Есть массив A1, A2, ..., Am, Am+1, Am+2, ..., An.
   // Без использования дополнительного массива преобразовать
   // в массив Am+1, Am+2, ..., An, A1, A2, ..., Am
   public void LoopShifting()
   {
      int shift = 7;                   
      string[] arr = {"0","1","2","3","4"};

      for (int i = 0; i < shift; i++)
      {
         ShiftRight(arr);
         PrintResult(arr, i);
      }
   }

   private void ShiftRight(string[] arr)
   {
      if (arr == null)
         throw new ApplicationException("The parameter 'string[] arr' is null");

      if (arr.Length < 2)
         return;

      string last = arr[arr.Length - 1];
      for (int i = arr.Length - 1; i > 0; i--)
      {
         arr[i] = arr[i - 1];
      }
      arr[0] = last;
   }

   private void PrintResult(string[] arr, int step)
   {
      if (arr == null)
         throw new ApplicationException("The parameter 'string[] arr' is null");

      Debug.Write(String.Format("Step {0}: ", step));

      foreach (var a in arr)
      {
         Debug.Write(a + " ");
      }
      Debug.WriteLine("");
   }
}


Результат на каждый шаг:

Code: Select all

Step 0: 4 0 1 2 3 
Step 1: 3 4 0 1 2
Step 2: 2 3 4 0 1
Step 3: 1 2 3 4 0
Step 4: 0 1 2 3 4
Step 5: 4 0 1 2 3
Step 6: 3 4 0 1 2


Вообще классически на интервью просят два решения - одно оптимизировано по ресурсам, другое по быстродействию.
Last edited by Mic on 12 Sep 2009 23:57, edited 1 time in total.
User avatar
Mic
Уже с Приветом
Posts: 6906
Joined: 20 Apr 1999 09:01
Location: Seattle

Re: Как нанять грамотного индуса?

Post by Mic »

Я только одного не понимаю - как такого рода задачки характеризуют меня как программера?... :pain1:
Sasha3091
Уже с Приветом
Posts: 1369
Joined: 05 Sep 2008 01:22

Re: Как нанять грамотного индуса?

Post by Sasha3091 »

Вы уж определитесь в вопросе - или грамотного - или индуса. Кот не может быть хорошим с точки зрения мышей.
User avatar
KOT MATPOCKUH
Уже с Приветом
Posts: 2735
Joined: 17 Jul 2000 09:01
Location: Одесса -> Лос-Анджелес -> Делавер -> Мэриленд -> Вирджиния. Хочу снова в Одессу.

Re: Как нанять грамотного индуса?

Post by KOT MATPOCKUH »

Sasha3091 wrote:Вы уж определитесь в вопросе - или грамотного - или индуса. Кот не может быть хорошим с точки зрения мышей.


Кроме того, вот эта цель:

Марик wrote:Придется нам набрать несколько индусов в Индии взамен Московской команды, что бы спихнуть на них саппорт, багфиксы


недостижима в принципе. Седьмой закон Ньютона гласит, что какой бы ни был индус, пофиксив один баг, он обязательно привнесёт как минимум один новый :umnik1:
А я все чаще замечаю, что меня как будто кто-то подменил...
User avatar
Komissar
Уже с Приветом
Posts: 64661
Joined: 12 Jul 2002 16:38
Location: г.Москва, ул. Б. Лубянка, д.2

Re: Как нанять грамотного индуса?

Post by Komissar »

В Америке индустрия (ИТ) уже слишком сильно проедена индусами. Индусов не исправишь, остается только менять профессию. Переквалифицироваться в управдома (лендлорда), например.
User avatar
jms
Уже с Приветом
Posts: 268
Joined: 29 Dec 2006 12:03

Re: Как нанять грамотного индуса?

Post by jms »

Mic wrote:
jms wrote:А помоему там вполне четко описан циклический свдиг вправо на m.


Тогда вот:

Code: Select all

   
public class Task
{
   // Есть массив A1, A2, ..., Am, Am+1, Am+2, ..., An.
   // Без использования дополнительного массива преобразовать
   // в массив Am+1, Am+2, ..., An, A1, A2, ..., Am
   public void LoopShifting()
   {
      int shift = 7;                   
      string[] arr = {"0","1","2","3","4"};

      for (int i = 0; i < shift; i++)
      {
         ShiftRight(arr);
         PrintResult(arr, i);
      }
   }

   private void ShiftRight(string[] arr)
   {
      if (arr == null)
         throw new ApplicationException("The parameter 'string[] arr' is null");

      if (arr.Length < 2)
         return;

      string last = arr[arr.Length - 1];
      for (int i = arr.Length - 1; i > 0; i--)
      {
         arr[i] = arr[i - 1];
      }
      arr[0] = last;
   }

   private void PrintResult(string[] arr, int step)
   {
      if (arr == null)
         throw new ApplicationException("The parameter 'string[] arr' is null");

      Debug.Write(String.Format("Step {0}: ", step));

      foreach (var a in arr)
      {
         Debug.Write(a + " ");
      }
      Debug.WriteLine("");
   }
}


Результат на каждый шаг:

Code: Select all

Step 0: 4 0 1 2 3 
Step 1: 3 4 0 1 2
Step 2: 2 3 4 0 1
Step 3: 1 2 3 4 0
Step 4: 0 1 2 3 4
Step 5: 4 0 1 2 3
Step 6: 3 4 0 1 2


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

Ok. Но это опять квадратичное время а не линейное..
-- who says a penguin can't fly? http://www.youtube.com/watch?v=9dfWzp7rYR4
User avatar
jms
Уже с Приветом
Posts: 268
Joined: 29 Dec 2006 12:03

Re: Как нанять грамотного индуса?

Post by jms »

deve wrote:
jms wrote:Че то как то я не уловил логики. Работающуюу программу я написал. Вопроса "о почему о других так плохо думаете или о себе слишком хорошо ?" я если чесно не понял. Я думаю о людях плохо когда они того заслуживают.

Так с логикой похоже тоже не лады. Ну ладно, расшифруем: с чего вы решили, что вы тут "один Д`Артаньян", а "правильное решение (за O(n)) подавляющее большинство местных гуру :nono: не напишет на собеседовании" ?

Это моя субьективная оценка обьективной реальности. Кстати я нигде не давал себе оценку как програмисту, это ваша фантазия.
-- who says a penguin can't fly? http://www.youtube.com/watch?v=9dfWzp7rYR4
User avatar
jms
Уже с Приветом
Posts: 268
Joined: 29 Dec 2006 12:03

Re: Как нанять грамотного индуса?

Post by jms »

Bonny P. wrote:
jms wrote:
Bonny P. wrote:
jms wrote:Не знаю будет ли это работать, но сложность явно O(nm).
Что там может не работать?

Какая разница.
Ответ, достойный интервьюера! :)

Вы вырвали фразу из контекста.
-- who says a penguin can't fly? http://www.youtube.com/watch?v=9dfWzp7rYR4
User avatar
jms
Уже с Приветом
Posts: 268
Joined: 29 Dec 2006 12:03

Re: Как нанять грамотного индуса?

Post by jms »

John Smith wrote:Кстати о гугле, вот ответ на задачу o циклическом сдвиге (Внимание! кто хочет сам решить - туда не смотреть): http://stackoverflow.com/questions/876293/fastest-algorithm-for-circle-shift-n-sized-array-for-m-position

Нарветесь на грамотного индуса - спеца по задачкам, вот он вам напрограммирует.

Кстати мой алгоритм быстрее, у них 2n итерации, а у меня n :umnik1:
Хотя записывается их намного элегантнее.

Update: хотя если подумать у меня операций в итерации намного больше, так что у них полюбому круче.
-- who says a penguin can't fly? http://www.youtube.com/watch?v=9dfWzp7rYR4
User avatar
GarikToo
Уже с Приветом
Posts: 24386
Joined: 03 Jan 2007 08:32
Location: Львов->Израиль->Убей Эрия

Re: Как нанять грамотного индуса?

Post by GarikToo »

Komissar wrote:В Америке индустрия (ИТ) уже слишком сильно проедена индусами. Индусов не исправишь, остается только менять профессию. Переквалифицироваться в управдома (лендлорда), например.


Да ладно. Можно подумать белые програмеры все идеальны
Оливье готовлю, холодец варю, посуду мою, пылесоса не боюсь. Скупой.

Return to “Работа и Карьера в IT”