Re[4]: здачки с собеседования в yandex
От: CreatorCray  
Дата: 03.04.21 08:28
Оценка: +8 -1
Здравствуйте, AmSpb, Вы писали:

AS>Можно не знать реализации тех или иных структур и алгоритмов, но знать сложность обязан, а если лень знать, распечатываешь и вешаешь перед собой

Знать за сложность надо, да. Но надо ж ещё понимать что именно за этим стоит. А то куча народу дрочит на big-О вприсядку до состояния слепой веры.
А то ж порой бывает и так что алгоритм с линейной сложностью работает быстрее чем с логарифмической, просто потому что цена одного "шага" разная.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re: здачки с собеседования в yandex
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 03.04.21 08:34
Оценка: +3
Здравствуйте, sergey2b, Вы писали:

S>в принципе задачки нормальные, не чем не хуже реверса отдельных слов в строке

S>и поиск цикла в list

Да, когда такая задачка одна — это хорошо и правильно... но вот в случае с описанием по линке что-то пошло не так

Но, опять таки, это же можно просто озвучить в процессе собеседования.


S>https://habr.com/ru/post/550088/

S>Собеседование в Яндекс: театр абсурда :/

Комменты вообще огонь я считаю и реально театр абсурда. Каждый второй сводится к тому, что "я хотел бы в Яндекс, но как только захожу на Литкод, корона нестерпимо давить начинает".
Re[5]: здачки с собеседования в yandex
От: AmSpb  
Дата: 03.04.21 08:46
Оценка: +2 :)
Здравствуйте, CreatorCray, Вы писали:

AS>>Можно не знать реализации тех или иных структур и алгоритмов, но знать сложность обязан, а если лень знать, распечатываешь и вешаешь перед собой

CC>Знать за сложность надо, да. Но надо ж ещё понимать что именно за этим стоит. А то куча народу дрочит на big-О вприсядку до состояния слепой веры.
CC>А то ж порой бывает и так что алгоритм с линейной сложностью работает быстрее чем с логарифмической, просто потому что цена одного "шага" разная.

Да, понимать тоже стоит, но без деталей, т.к. детали со временем забываются, остается только общее понимание.
Re[4]: здачки с собеседования в yandex
От: Hobbes Россия  
Дата: 03.04.21 13:27
Оценка: :)
Здравствуйте, Lexey, Вы писали:

L>Логично, ибо это O(N) по памяти против O(1) у "зайца и черепахи".


Число элементов списка известно заранее?
Re[4]: здачки с собеседования в yandex
От: Тёмчик Австралия жж
Дата: 03.04.21 21:21
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Ну в принципе, этот алгоритм не то, чтобы совсем очевидный. Если тебе его не рассказали, сам можешь и не придумать.


Наблюдал, как весьма хорошие программисты, успешно и быстро решившие тот же переворот, впадали в ступор при подсказках про поиск цикла.
Re: здачки с собеседования в yandex
От: Тёмчик Австралия жж
Дата: 03.04.21 21:24
Оценка:
Здравствуйте, sergey2b, Вы писали:

S>в принципе задачки нормальные, не чем не хуже реверса отдельных слов в строке

S>и поиск цикла в list

Классический гномикосекас есть? Или обмельчали?
Re[2]: здачки с собеседования в yandex
От: Тёмчик Австралия жж
Дата: 03.04.21 21:28
Оценка:
Здравствуйте, Lexey, Вы писали:

L>Здравствуйте, sergey2b, Вы писали:


S>>в принципе задачки нормальные, не чем не хуже реверса отдельных слов в строке


L>Лучше, в основном. Реверс строки или слов в строке — это уже заезженная пластинка.

Для тебя заезженная. Для многих нет.

S>>и поиск цикла в list


L>А вот это плохая задача для собеседований. Ибо, к ней нужен весьма специальный подход. И если его не знаешь, то не решишь, скорее всего.

Если не знаешь, можно поговорить. Там 3 варианта решения, соответственно, "без использования памяти и модификации"- можно подсказать.
Re[3]: здачки с собеседования в yandex
От: Тёмчик Австралия жж
Дата: 03.04.21 21:34
Оценка: -1 :)
Здравствуйте, sergii.p, Вы писали:

SP>особенно понравилось

SP>

SP>Тут же меня спросили, какова сложность алгоритма — ок, норм, это нужно знать, потому что в реальном программировании мне это потребовалось целых 0 раз.

SP>Реально питон головного мозга. Вроде и программист, но как с другой планеты.

Господа, ну зачем сразу "питон'? Вы вообще в курсе, что на питоне отсчитывают всякие там корелляции и финансы- там сложность — первое требование.
А отквоченный текст- это я считаю, типичный руссо-укро-беларусский программист. Да. 99% таких чуваков можно опознать ещё по упоминаниям мифических индусов, за которыми они разгребают.
Re[5]: здачки с собеседования в yandex
От: Pzz Россия https://github.com/alexpevzner
Дата: 03.04.21 22:44
Оценка:
Здравствуйте, Тёмчик, Вы писали:

Pzz>>Ну в принципе, этот алгоритм не то, чтобы совсем очевидный. Если тебе его не рассказали, сам можешь и не придумать.


Тё>Наблюдал, как весьма хорошие программисты, успешно и быстро решившие тот же переворот, впадали в ступор при подсказках про поиск цикла.


А ты сможешь решить такую задачу: есть массив, он разделен на две, возможно неравные, части (0...N, N+1...M), надо переставить эти две части местами?

[AAAA][BBBBB] -> [BBBBB][AAAA]
Re[6]: здачки с собеседования в yandex
От: Буравчик Россия  
Дата: 03.04.21 23:04
Оценка: 3 (1)
Здравствуйте, Pzz, Вы писали:

Pzz>А ты сможешь решить такую задачу: есть массив, он разделен на две, возможно неравные, части (0...N, N+1...M), надо переставить эти две части местами?

Pzz>[AAAA][BBBBB] -> [BBBBB][AAAA]

Переворачиваем сначала весь массив, а потом переворачиваем каждую часть.
Переворачиваем = переставляем в обратном порядке. Т.е. меняем первый элемент с последним, второй с предпоследним и т.д.
Best regards, Буравчик
Re[6]: здачки с собеседования в yandex
От: Тёмчик Австралия жж
Дата: 03.04.21 23:05
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>А ты сможешь решить такую задачу: есть массив, он разделен на две, возможно неравные, части (0...N, N+1...M), надо переставить эти две части местами?


Pzz>[AAAA][BBBBB] -> [BBBBB][AAAA]


Можно как разворот строки решить, сходу, за 2с*O(N). Можно заморочиться чтоб за c*O(N-1), то мне лень мозг вывихивать.
Re[7]: здачки с собеседования в yandex
От: Pzz Россия https://github.com/alexpevzner
Дата: 03.04.21 23:30
Оценка: +1
Здравствуйте, Буравчик, Вы писали:

Pzz>>А ты сможешь решить такую задачу: есть массив, он разделен на две, возможно неравные, части (0...N, N+1...M), надо переставить эти две части местами?

Pzz>>[AAAA][BBBBB] -> [BBBBB][AAAA]

Б>Переворачиваем сначала весь массив, а потом переворачиваем каждую часть.

Б>Переворачиваем = переставляем в обратном порядке. Т.е. меняем первый элемент с последним, второй с предпоследним и т.д.

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

[AAAA][BBBBB] -> [BBBB][AAAA][B] -> [BBBB][BAAAA]

Про тройной переворот я не знал/не догадался. Но рекурсивный вариант вроде как делает меньше обращений к памяти (на каждом шаге одна из частей массива оказывается уже на своем окончательном месте).
Re[8]: здачки с собеседования в yandex
От: Тёмчик Австралия жж
Дата: 03.04.21 23:56
Оценка:
Здравствуйте, Pzz, Вы писали:

Б>>Переворачиваем сначала весь массив, а потом переворачиваем каждую часть.

Б>>Переворачиваем = переставляем в обратном порядке. Т.е. меняем первый элемент с последним, второй с предпоследним и т.д.

Pzz>Мне когда в реальной жизни понадобилось, я сделал рекурсивно: выбираем ту "половину", которая поменьше, и меняем ее местами с соседней с ней частью такого же размера. Потом во второй половине рекурсивно меняем ту часть, которую мы только что туда записали, и оставшуюся.


Pzz>[AAAA][BBBBB] -> [BBBB][AAAA][B] -> [BBBB][BAAAA]


Pzz>Про тройной переворот я не знал/не догадался. Но рекурсивный вариант вроде как делает меньше обращений к памяти (на каждом шаге одна из частей массива оказывается уже на своем окончательном месте).

Это двойной переворот.

Можно сделать циклический сдвиг, получится O(N):
[0..k), [k..n)
Как-то так, но нужно проверять правильность offset:

function swap_k<T>(a: T[], k: number) {
  const n = a.length;

  if (k === 0 || k === n - 1) {
    return;
  }
  const acc = a[k];
  const offset = n / 2 + n % 2;
  for (let i=0; i < offset; ++i) {
     a[(k + i) % n] = a[(k + offset + i) % n];
  }
  a[k + off] = acc;
}
Отредактировано 04.04.2021 0:36 Артём . Предыдущая версия .
Re[8]: здачки с собеседования в yandex
От: mgu  
Дата: 04.04.21 06:46
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>>>А ты сможешь решить такую задачу: есть массив, он разделен на две, возможно неравные, части (0...N, N+1...M), надо переставить эти две части местами?

Pzz>>>[AAAA][BBBBB] -> [BBBBB][AAAA]

Б>>Переворачиваем сначала весь массив, а потом переворачиваем каждую часть.

Б>>Переворачиваем = переставляем в обратном порядке. Т.е. меняем первый элемент с последним, второй с предпоследним и т.д.

Pzz>Мне когда в реальной жизни понадобилось, я сделал рекурсивно: выбираем ту "половину", которая поменьше, и меняем ее местами с соседней с ней частью такого же размера. Потом во второй половине рекурсивно меняем ту часть, которую мы только что туда записали, и оставшуюся.


Pzz>[AAAA][BBBBB] -> [BBBB][AAAA][B] -> [BBBB][BAAAA]


Pzz>Про тройной переворот я не знал/не догадался. Но рекурсивный вариант вроде как делает меньше обращений к памяти (на каждом шаге одна из частей массива оказывается уже на своем окончательном месте).


Двойной разворот -- это из "Потрескивания на интервью по написанию кода". А интересная оказалась задача, вот мой однопроходный вариант:

function swapArrayParts(arr, ind) {
  if (!Array.isArray(arr))
    return "Incorrect array.";
    
  var len = arr.length;
  
  if (!Number.isInteger(ind) || ind < 1 || ind >= len)
    return "Incorrect index.";

  var i, curPos = 0, oldPos, newPos, oldBuff = arr[curPos], newBuff; 
  
  for (var i = 0; i < len; i++) {
    newPos = curPos < ind ? curPos + len - ind : curPos - ind; // New position to drop the previous buffered item.
    newBuff = arr[newPos]; 
    arr[newPos] = oldBuff;
    
    if (oldPos === newPos) {  // 2 elements have swapped, move to the next item in the 1st subset.
      curPos = newPos + 1;
      oldBuff = arr[curPos];
    }
    else {                    // Leap with the buffered value to the new position.
      oldPos = curPos;
      curPos = newPos;
      oldBuff = newBuff;
    }
  } 

  return arr;
}


  Тест
<html>
<body>
<form onsubmit="javascript:swapArr(); return false;" >
<p>
Array (chars w/o delimiters):                               <br/><input type="string" id="arr">         <p>
Pivot (0-based index of the first item in the 2nd subset):  <br/><input type="number" id="ind" min="1"> <p>
<input type="submit" value="Swap">
</form>

Result:<p>
<p id="output"/> 

<script>
function swapArrayParts(arr, ind) {
  if (!Array.isArray(arr))
    return "Incorrect array.";
    
  var len = arr.length;
  
  if (!Number.isInteger(ind) || ind < 1 || ind >= len)
    return "Incorrect index.";

  var i, curPos = 0, oldPos, newPos, oldBuff = arr[curPos], newBuff; 
  
  for (var i = 0; i < len; i++) {
    newPos = curPos < ind ? curPos + len - ind : curPos - ind; // New position to drop the previous buffered item.
    newBuff = arr[newPos]; 
    arr[newPos] = oldBuff;
    
    if (oldPos === newPos) {  // 2 elements have swapped, move to the next item in the 1st subset.
      curPos = newPos + 1;
      oldBuff = arr[curPos];
    }
    else {                    // Leap with the buffered value to the new position.
      oldPos = curPos;
      curPos = newPos;
      oldBuff = newBuff;
    }
  } 

  return arr;
}

function swapArr() {
  var arr = document.getElementById("arr").value;
  var ind = document.getElementById("ind").valueAsNumber;
  var output = swapArrayParts(arr.split(""), ind);
  
  document.getElementById("output").innerHTML = output;
}
</script>
</body>
</html>
Re[3]: здачки с собеседования в yandex
От: aik Австралия  
Дата: 04.04.21 11:36
Оценка: +3
Здравствуйте, sergey2b, Вы писали:

S>Да автору не зачёт

S>Большая честь задач не сложные

пост же не про задачи сами по себе, а что одну и ту же пластинку ставят раз за разом. такое ощущение что это какие то hunger games заочные, ищут самого выносливого и/или мотиварованного что ли.
Re: здачки с собеседования в yandex
От: SaZ  
Дата: 04.04.21 20:28
Оценка: +2 -1
Здравствуйте, sergey2b, Вы писали:

S>в принципе задачки нормальные, не чем не хуже реверса отдельных слов в строке

S>и поиск цикла в list

S>https://habr.com/ru/post/550088/

S>Собеседование в Яндекс: театр абсурда :/

Я как-то собеседовался в Яндекс (в Минске) лет 6 назад. Причём честно предупредил, что у меня нет высшего образования, только среднее специальное, а остальное доучиваю сам по необходимости.
В общем, меня завалили на вопросе: объясните почему сложность O(С*n) < O(n^2) где С — конастанта?
Как бы для своих решений я могу посчитать алгоритмическую сложность. Даже объяснял это с примерами.
Убило то, что на этим вопросом меня мурыжили 45 минут не давая никаких наводящих вопросов, а на все мои рассуждения и попытки найти истину отвечали: это неправильно.
Оказалось, что от меня хотели, чтобы я просто взял предел.

Я конечно всё понимаю и не утверждаю, что это бесполезные знания, но по-моему это уже какой-то бзик, где такие вот вопросы ставят выше умений проектировать архитектуру и знаний языка.
Отредактировано 04.04.2021 20:32 SaZ . Предыдущая версия . Еще …
Отредактировано 04.04.2021 20:31 SaZ . Предыдущая версия .
Re[2]: здачки с собеседования в yandex
От: sergey2b ЮАР  
Дата: 04.04.21 20:33
Оценка:
Я знаю несколько человек которые хотели работать в компании типа Яндекса, и ходили на собеседования каждый год пока не прошли

Один из них точно счастлив,
5 год в гугле пишет поиск авиабилетов или отелей
Re[2]: здачки с собеседования в yandex
От: AmSpb  
Дата: 04.04.21 20:45
Оценка: +1
Здравствуйте, SaZ, Вы писали:

SaZ>В общем, меня завалили на вопросе: объясните почему сложность O(С*n) < O(n^2) где С — конастанта?

SaZ>Как бы для своих решений я могу посчитать алгоритмическую сложность. Даже объяснял это с примерами.
SaZ>Убило то, что на этим вопросом меня мурыжили 45 минут не давая никаких наводящих вопросов, а на все мои рассуждения и попытки найти истину отвечали: это неправильно.
SaZ>Оказалось, что от меня хотели, чтобы я просто взял предел.

А причем тут предел ?
Можно график начертить, и увидеть, что квадратичная фунция растет быстрее линейной, и при n стремящимся в бесконечность, значение C можно принять за 1, т.к. это константа, т.е. она не зависит от n
Re[3]: здачки с собеседования в yandex
От: SaZ  
Дата: 04.04.21 21:04
Оценка:
Здравствуйте, AmSpb, Вы писали:

AS>Здравствуйте, SaZ, Вы писали:


SaZ>>В общем, меня завалили на вопросе: объясните почему сложность O(С*n) < O(n^2) где С — конастанта?

SaZ>>Как бы для своих решений я могу посчитать алгоритмическую сложность. Даже объяснял это с примерами.
SaZ>>Убило то, что на этим вопросом меня мурыжили 45 минут не давая никаких наводящих вопросов, а на все мои рассуждения и попытки найти истину отвечали: это неправильно.
SaZ>>Оказалось, что от меня хотели, чтобы я просто взял предел.

AS>А причем тут предел ?

AS>Можно график начертить, и увидеть, что квадратичная фунция растет быстрее линейной, и при n стремящимся в бесконечность, значение C можно принять за 1, т.к. это константа, т.е. она не зависит от n

Рисовал график. От меня требовали именно теоретическое обоснование.
Re[4]: здачки с собеседования в yandex
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 04.04.21 21:26
Оценка: :)
Здравствуйте, Тёмчик, Вы писали:

Тё>Господа, ну зачем сразу "питон'? Вы вообще в курсе, что на питоне отсчитывают всякие там корелляции и финансы- там сложность — первое требование.


Это всё скорее всего "отсчитывается" библиотеками, которые ты подцепил
Маньяк Робокряк колесит по городу
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.