И что тут понимается под "кореневой персоной"? Наследники - это все потомки или только дети?OtherSide wrote:Есть связанный списокassazello wrote:Форумулировочка, конечно... Ничего не понял. Что имеется ввиду под "база данных"? что за корневая персона? она дана или ее надо найти? а если корневых несколько? всеми детьми - именно детьми или потомками?OtherSide wrote:Вопрос 10) Задача. Создайте базу данных, в которой существует персона и 2 ее родителя. Нужно вывести на экран дерево корневой персоны со всеми ее детьми на экран со сложностью O(n). Время на решение - 10 минут. (дали ноутбук нужно написать код на C#)
Как кто-то шутил выше, мне - no hire.
class person
{
string name;
person mother;
person father;
}
Нужно вывести на экран дерево наследников (в узле может быть и мама и папа) со сложностью O(N)
Вопросы на собеседовании на вакансию C#
-
- Уже с Приветом
- Posts: 1218
- Joined: 06 Mar 2015 00:18
- Location: San Jose, CA
Re: Вопросы на собеседовании на вакансию C#
-
- Уже с Приветом
- Posts: 5538
- Joined: 20 Mar 2001 10:01
- Location: SFBA
Re: Вопросы на собеседовании на вакансию C#
Не, ну очевидно же не список. Или там в структуре еще одно поле есть. Мозг кипит, разве что задача специально нечетко поставлена в расчете на диалог.
Увидев друга, Портос вскрикнул от радости...
-
- Уже с Приветом
- Posts: 15759
- Joined: 01 Mar 2008 15:14
Re: Вопросы на собеседовании на вакансию C#
Я даже не знаю как еще объяснить. По моему все очевидно. Есть список, в котором у каждой персоны известна папа и мама. Нужно на экран вывести дерево, во главе которого самый старый дедушка, ниже его дети, дети его детей и т.д.
Петров
=Иванов
==Сидоров
==Терехова
===Петрушкин
=Кукушкин
==Попов
Сложность алгоритма должна быть O(N)
Петров
=Иванов
==Сидоров
==Терехова
===Петрушкин
=Кукушкин
==Попов
Сложность алгоритма должна быть O(N)
Last edited by OtherSide on 31 Mar 2015 21:12, edited 1 time in total.
-
- Уже с Приветом
- Posts: 1218
- Joined: 06 Mar 2015 00:18
- Location: San Jose, CA
Re: Вопросы на собеседовании на вакансию C#
Петя мама:Валя папа:КоляOtherSide wrote:Я даже не знаю как еще объяснить. По моему все очевидно. Есть список, в котором у каждой персоны известна папа и мама. Нужно на экран вывести дерево, во главе которого самый старый дедушка, ниже его дети, дети его детей и т.д.
Петров
=Иванов
==Сидоров
==Терехова
===Петрушкин
=Кукушкин
==Попов
Сложность алгоритма должна быть O(N)
Валя мама: nil папа: nil
Коля мама: nil папа: nil
Кто у нас тут "самый старый дедушка" - Валя или Коля?
-
- Уже с Приветом
- Posts: 15759
- Joined: 01 Mar 2008 15:14
Re: Вопросы на собеседовании на вакансию C#
Предполагается что такого в базе нетassazello wrote:Петя мама:Валя папа:КоляOtherSide wrote:Я даже не знаю как еще объяснить. По моему все очевидно. Есть список, в котором у каждой персоны известна папа и мама. Нужно на экран вывести дерево, во главе которого самый старый дедушка, ниже его дети, дети его детей и т.д.
Петров
=Иванов
==Сидоров
==Терехова
===Петрушкин
=Кукушкин
==Попов
Сложность алгоритма должна быть O(N)
Валя мама: nil папа: nil
Коля мама: nil папа: nil
Кто у нас тут "самый старый дедушка" - Валя или Коля?
-
- Уже с Приветом
- Posts: 5538
- Joined: 20 Mar 2001 10:01
- Location: SFBA
Re: Вопросы на собеседовании на вакансию C#
Так не бывает.OtherSide wrote:Есть список, в котором у каждой персоны известна папа и мама.
Увидев друга, Портос вскрикнул от радости...
-
- Уже с Приветом
- Posts: 15759
- Joined: 01 Mar 2008 15:14
Re: Вопросы на собеседовании на вакансию C#
кроме одной8K wrote:Так не бывает.OtherSide wrote:Есть список, в котором у каждой персоны известна папа и мама.
-
- Уже с Приветом
- Posts: 15759
- Joined: 01 Mar 2008 15:14
Re: Вопросы на собеседовании на вакансию C#
У меня нет задания под рукой, пишу по памяти, я надеялся общий смысл понятен. Просто не понимаю, какой мне смысл препираться с вами?
И решение выше дал уже. Там предполагалось выводить не сразу, а заполнить Dictionary. Вроде ничего сложного, но ответ надо было дать в течении минуты. К тому же я для себя в голове держал скорость поиска по Словарю как логарифм, а не линейный.
Это n^2
class person
{
string name;
person mother;
person father;
}
List<person> storage;
List<person> GetChildren(person)
{
var list = new List<person>();
foreach (var v in storage)
if (v.mother == person || v.father = person)
list.add(v);
return list;
}
void Out(person p, string s)
{
Console.Write(s+ p.name);
foreach (v in GetChildren(p))
Out(v, s + "=");
}
void Out()
{
foreach (var v in storage)
if (v.mother == null || v.father = null)
Out(v, "");
}
И решение выше дал уже. Там предполагалось выводить не сразу, а заполнить Dictionary. Вроде ничего сложного, но ответ надо было дать в течении минуты. К тому же я для себя в голове держал скорость поиска по Словарю как логарифм, а не линейный.
Это n^2
class person
{
string name;
person mother;
person father;
}
List<person> storage;
List<person> GetChildren(person)
{
var list = new List<person>();
foreach (var v in storage)
if (v.mother == person || v.father = person)
list.add(v);
return list;
}
void Out(person p, string s)
{
Console.Write(s+ p.name);
foreach (v in GetChildren(p))
Out(v, s + "=");
}
void Out()
{
foreach (var v in storage)
if (v.mother == null || v.father = null)
Out(v, "");
}
-
- Уже с Приветом
- Posts: 5538
- Joined: 20 Mar 2001 10:01
- Location: SFBA
Re: Вопросы на собеседовании на вакансию C#
Ну, поиск в словаре, может, и линейный (по длине строки, хотя и не факт), а вставка, похоже, n-squared (тоже не факт):
If the Count property value already equals the capacity, the capacity of the Dictionary<TKey, TValue> is increased by automatically reallocating the internal array, and the existing elements are copied to the new array before the new element is added.
If the Count property value already equals the capacity, the capacity of the Dictionary<TKey, TValue> is increased by automatically reallocating the internal array, and the existing elements are copied to the new array before the new element is added.
Увидев друга, Портос вскрикнул от радости...
-
- Уже с Приветом
- Posts: 3647
- Joined: 23 May 2010 15:10
Re: Вопросы на собеседовании на вакансию C#
ну вообще человеку с опытом негоже делать настолько детские ошибки, даже если просто по запарке. Если по запарке затупил нужно просто признать неудачным собеседование и искать дальше.nightmare2 wrote: Просто придрались к первой же маленькой ошибке.
ИМХО, но вас не хотели брать по какой-то другой причине, возможно к вам лично не имеющей никакого отношения.
-
- Уже с Приветом
- Posts: 3647
- Joined: 23 May 2010 15:10
Re: Вопросы на собеседовании на вакансию C#
тоже нифига не врубился в заданиеassazello wrote:Форумулировочка, конечно... Ничего не понял. Что имеется ввиду под "база данных"? что за корневая персона? она дана или ее надо найти? а если корневых несколько? всеми детьми - именно детьми или потомками?OtherSide wrote:Вопрос 10) Задача. Создайте базу данных, в которой существует персона и 2 ее родителя. Нужно вывести на экран дерево корневой персоны со всеми ее детьми на экран со сложностью O(n). Время на решение - 10 минут. (дали ноутбук нужно написать код на C#)
Как кто-то шутил выше, мне - no hire.
но Dictionary в C# - это хеш таблица
-
- Уже с Приветом
- Posts: 15759
- Joined: 01 Mar 2008 15:14
Re: Вопросы на собеседовании на вакансию C#
Да я вообще-то не жалуюсь. Вы же попросили рассказать, что спрашивают на собеседования, я и написал. Сразу, конечно, в лучших интернет традициях набежали благожелатели с пожеланием убиться об стену и "аффтор не умеет программировать!"Alexandr wrote:ну вообще человеку с опытом негоже делать настолько детские ошибки, даже если просто по запарке. Если по запарке затупил нужно просто признать неудачным собеседование и искать дальше.nightmare2 wrote: Просто придрались к первой же маленькой ошибке.
ИМХО, но вас не хотели брать по какой-то другой причине, возможно к вам лично не имеющей никакого отношения.
-
- Уже с Приветом
- Posts: 15759
- Joined: 01 Mar 2008 15:14
Re: Вопросы на собеседовании на вакансию C#
Короче, задача звучала так: "Внесите небольшое изменение в код, что бы он заработал со сложностью O(N)"Alexandr wrote: тоже нифига не врубился в задание
но Dictionary в C# - это хеш таблица
class person
{
string name;
person mother;
person father;
}
List<person> storage;
List<person> GetChildren(person)
{
var list = new List<person>();
foreach (var v in storage)
if (v.mother == person || v.father = person)
list.add(v);
return list;
}
void Out(person p, string s)
{
Console.Write(s+ p.name);
foreach (v in GetChildren(p))
Out(v, s + "=");
}
void Out()
{
foreach (var v in storage)
if (v.mother == null || v.father = null)
Out(v, "");
}
-
- Уже с Приветом
- Posts: 3647
- Joined: 23 May 2010 15:10
Re: Вопросы на собеседовании на вакансию C#
ну так банальная рекурсия и будет O(n)OtherSide wrote: Есть связанный список
class person
{
string name;
person mother;
person father;
}
Нужно вывести на экран дерево наследников (в узле может быть и мама и папа) со сложностью O(N)
-
- Уже с Приветом
- Posts: 3647
- Joined: 23 May 2010 15:10
Re: Вопросы на собеседовании на вакансию C#
не, мой поинт был в том, что если на собеседовании протупил, то нужно признать собеседование неудачным, а не то, что работодатель придирается. У каждого были такие неудачные интервью, когда выходишь за порог и сразу все задачки в голове решаешь на раз и все сделанные ошибки сразу видишьOtherSide wrote:Да я вообще-то не жалуюсь. Вы же попросили рассказать, что спрашивают на собеседования, я и написал. Сразу, конечно, в лучших интернет традициях набежали благожелатели с пожеланием убиться об стену и "аффтор не умеет программировать!"Alexandr wrote:ну вообще человеку с опытом негоже делать настолько детские ошибки, даже если просто по запарке. Если по запарке затупил нужно просто признать неудачным собеседование и искать дальше.nightmare2 wrote: Просто придрались к первой же маленькой ошибке.
ИМХО, но вас не хотели брать по какой-то другой причине, возможно к вам лично не имеющей никакого отношения.
-
- Уже с Приветом
- Posts: 15759
- Joined: 01 Mar 2008 15:14
Re: Вопросы на собеседовании на вакансию C#
См. GetChildren()Alexandr wrote:ну так банальная рекурсия и будет O(n)OtherSide wrote: Есть связанный список
class person
{
string name;
person mother;
person father;
}
Нужно вывести на экран дерево наследников (в узле может быть и мама и папа) со сложностью O(N)
-
- Уже с Приветом
- Posts: 15759
- Joined: 01 Mar 2008 15:14
Re: Вопросы на собеседовании на вакансию C#
Если честно, основная причина провала многих собеседований в том, что я на самом деле не хочу эту работу. На прошлой работе я занимался административными делами, и хотел продвигаться по этой линии, а кодированием я наелся по горло. И тем более психологически давит, когда работал в нормальных уважаемых компаниях с доходом значительно выше, а ты собеседываешься в шарашкину контору с инетрвьюером который на 10 лет младше тебя, пытается тыкать носом и т.п.Alexandr wrote: не, мой поинт был в том, что если на собеседовании протупил, то нужно признать собеседование неудачным, а не то, что работодатель придирается. У каждого были такие неудачные интервью, когда выходишь за порог и сразу все задачки в голове решаешь на раз и все сделанные ошибки сразу видишь
-
- Уже с Приветом
- Posts: 3647
- Joined: 23 May 2010 15:10
Re: Вопросы на собеседовании на вакансию C#
так у тебя в GetChildren() цикл и в Out цикл, что суммарно даст n^2, а я говорю о рекурсивном DepthSearch, который каждый node по разу посетит, дав тем самым nOtherSide wrote:См. GetChildren()Alexandr wrote:ну так банальная рекурсия и будет O(n)OtherSide wrote: Есть связанный список
class person
{
string name;
person mother;
person father;
}
Нужно вывести на экран дерево наследников (в узле может быть и мама и папа) со сложностью O(N)
-
- Уже с Приветом
- Posts: 3647
- Joined: 23 May 2010 15:10
Re: Вопросы на собеседовании на вакансию C#
прекрасно понимаю, но сейчас кризис и непонятно куда вообще политические виражи выведутOtherSide wrote:Если честно, основная причина провала многих собеседований в том, что я на самом деле не хочу эту работу. На прошлой работе я занимался административными делами, и хотел продвигаться по этой линии, а кодированием я наелся по горло. И тем более психологически давит, когда работал в нормальных уважаемых компаниях с доходом значительно выше, а ты собеседываешься в шарашкину контору с инетрвьюером который на 10 лет младше тебя, пытается тыкать носом и т.п.Alexandr wrote: не, мой поинт был в том, что если на собеседовании протупил, то нужно признать собеседование неудачным, а не то, что работодатель придирается. У каждого были такие неудачные интервью, когда выходишь за порог и сразу все задачки в голове решаешь на раз и все сделанные ошибки сразу видишь
-
- Posts: 13
- Joined: 19 Mar 2015 21:49
- Location: Las Vegas
Re: Вопросы на собеседовании на вакансию C#
Так вроде изначально вообще задача звучала какOtherSide wrote:Короче, задача звучала так: "Внесите небольшое изменение в код, что бы он заработал со сложностью O(N)"Alexandr wrote: тоже нифига не врубился в задание
но Dictionary в C# - это хеш таблица
"Задача. Создайте базу данных, в которой существует персона и 2 ее родителя..."
потом
"Есть связанный список. Нужно вывести на экран дерево наследников (в узле может быть и мама и папа) со сложностью O(N)"
потом
"Есть список, в котором у каждой персоны известна папа и мама. Нужно на экран вывести дерево, во главе которого самый старый дедушка, ниже его дети, дети его детей и т.д.
"
а сейчас уже оказывается надо было внести изменение в код ???
-
- Уже с Приветом
- Posts: 1218
- Joined: 06 Mar 2015 00:18
- Location: San Jose, CA
Re: Вопросы на собеседовании на вакансию C#
Кто-нибудь решил в такой формулировке? Я пока не смог.OtherSide wrote:Короче, задача звучала так: "Внесите небольшое изменение в код, что бы он заработал со сложностью O(N)"Alexandr wrote: тоже нифига не врубился в задание
но Dictionary в C# - это хеш таблица
class person
{
string name;
person mother;
person father;
}
List<person> storage;
List<person> GetChildren(person)
{
var list = new List<person>();
foreach (var v in storage)
if (v.mother == person || v.father = person)
list.add(v);
return list;
}
void Out(person p, string s)
{
Console.Write(s+ p.name);
foreach (v in GetChildren(p))
Out(v, s + "=");
}
void Out()
{
foreach (var v in storage)
if (v.mother == null || v.father = null)
Out(v, "");
}
Мне кажется я вижу решение, но на "небольшое изменение" оно не тянет. Только на большое.
-
- Уже с Приветом
- Posts: 5538
- Joined: 20 Mar 2001 10:01
- Location: SFBA
Re: Вопросы на собеседовании на вакансию C#
Вроде бы топологическая сортировка O(|V| + |E|).
За десять минут не напишу. И за полчаса тоже.
За десять минут не напишу. И за полчаса тоже.
Увидев друга, Портос вскрикнул от радости...
-
- Уже с Приветом
- Posts: 15759
- Joined: 01 Mar 2008 15:14
Re: Вопросы на собеседовании на вакансию C#
Ну в какой задали в такой и передал. На самом деле предполагалось сохранять значение в структуре Dictionary<parent, list<parent>>assazello wrote: Кто-нибудь решил в такой формулировке? Я пока не смог.
Мне кажется я вижу решение, но на "небольшое изменение" оно не тянет. Только на большое.
var dic = new Dictionary<parent, list<parent>>();
foreach( var l in list)
{
if (!dic.keyexistst(l.mother))
dic[l.mother] = new List<parent>();
if (!dic.keyexistst(l.father))
dic[l.mother] = new List<parent>();
dic[l.mother].Add(l);
dic[l.father].Add(l);
}
-
- Posts: 13
- Joined: 19 Mar 2015 21:49
- Location: Las Vegas
Re: Вопросы на собеседовании на вакансию C#
Да чушь это. Данная формулировка задачи подразумевает однополые браки и кровосмешение.assazello wrote: Кто-нибудь решил в такой формулировке? Я пока не смог.
Мне кажется я вижу решение, но на "небольшое изменение" оно не тянет. Только на большое.
-
- Уже с Приветом
- Posts: 7956
- Joined: 08 Nov 2004 12:24
- Location: GA
Re: Вопросы на собеседовании на вакансию C#
No offence, но после strlen, я бы тоже начал прощаться с кандидатом. Самые мерзкие ошибки, это когда где-то тихонько перетирается память, причем байтик-другой. Соперничать с ними могут разве что дедлоки в мультитрединге.