Pull to refresh
1
0
Сергей @Kotter

User

Send message
Чесно говоря как раз про инженеров с 10+ лет стажа и 2-3 подчиненных я не знаю. Могу прикинуть, что SDE I могут получать 100-130k, SDE II до 5 лет опыта 120-150k. Но не стоит мои прикидки слишком серьезно воспринимать :) Кроме того я больше про свое подразделение говорю чем про Амазон в целом.

Думаю что если инженер работает уже давно на Амазоне (более 5 лет), то у него с акций должен быть неплохой доход, учитывая что акции Амазона выросли где-то в 3 раза по сравнению с докризисным уровнем и где-то в 7-8 раз по сравнению с посткризисным уровнем. Но под «доходом с акций» я имею ввиду если он захочет их продать, потому что дивидендов акции Амазона почти не приносят (почти всю прибыль компания инвестирует в рост).

На налоги у меня уходит около 20-22%. Я женат, холостяку выйдет больше, думаю на 3-5%. Сюдя входят federal tax, social security tax и medicare tax. Налога штата на прибиль в Вашингтоне нету.
Предложения были от Амазона в SFBA?
Да, я работаю на Амазоне. На момент принятия предложения о работе должность была SDE I. Акции были расписаны на несколько лет, выдаются частями раз в пол года. Количество акций я думаю сильно зависит от должности и умения торговаться, но скорее-всего для обычных SDE приблизительно ~20-25% от всей компенсации.
Тут еще надо учесть, что акции сильно выросли в последнее время (за последних 1.5 года около +70%). То есть цена акции на момент предложения о работе и цена на момент выпуска могут сильно отличаться.
Откуда у Вас эта информация? На Амазоне акции именно дают (как часть compensation package), а не предоставляют возможность купить.
Насколько я понимаю, этот хак не для избежания распознавания черт лица, а для избежания обнаружения лица на изображении, если программа использует для этого характеристики Хаара (haar-like features). Такие программы классифицирут изображение (то есть говорят лицо это или не лицо) исходя из разниц яркостей участков изображения.
В ACM — да. Но в KPI-Open свои правила, не похожие на ACM. И если в ACM 3 человека на команду это нормально, то в KPI-Open не очень понятно зачем там 3 человека. Дело в том, что в KPI-Open время сдачи задачи считается не с момента начала соревнований, а с момента открытия условия задачи (тоесть скачивания с сервера). И если сначала открыть все задачи, и решать по одной, то баллы за задачи будут очень низкими, даже если все задачи будут решены. Поэтому выходит, что если команда надеется на более-менее хороший результат, то больше одной задачи в один момент времени не можеть решать. И поэтому непонятно зачем там 3 человека в команде.

Вообще на KPI-Open организация самих соревнований там достаточно низкая (очень глючная система тестирования, про которую уже легенды ходят; на последнем KPI-Open второй тур вообще отменили из-за технических проблем и все результаты по первому взяли), а спонсоры и культурная программа нормальные, поэтому туда больше для развлечения ездят, чем для соревнования :)
Насколько я помню, то карма должна быть >=5. У вас уже 10. Попробуйте :)

А насчет определения, то если вы замените «чем ф-ия g(n)» -> «чем ф-ия c*g(n)», тогда действилетьно будет понятно, а то я долго смотрел, и не понимал откуда там «с = с1», если «c» вообще не используется.
Перенесите в блог «Алгоритмы», там статья будет явно не лишней.

В целом статья неплохая и ее полезно почитать для понимания.

Но при этом есть и замечания. Например ваше формальное определение (1.1). Во-первых оно реально взорвало мне мозг, и это при том, что я уже знал формальное определение. Во-вторых, насколько я понимаю, вместо «g(n) >=f(n)» должно быть «с*g(n) >=f(n)». Но это уже и не так важно, поскольку сомневаюся, что многие, кто не знал определение до прочтения статьи, осилят ваш вариант. Думаю, что лучше поменять это определение на другое, например из этой статьи: algolist.manual.ru/misc/o_n.php, или из книги Кормена.
По-моему Вы и со второго раза не так поняли. Или же сам автор до конца не понял, что он смоделировал, если согласился с Вами. Или же я чего-то не понимаю, и сильно туплю :) Но…

Вся соль «новых правил» состоит в том, что события идут подряд, а не сериями по 3, и мы сравниваем ставки с последними тремя выпавшими монетами в цепочке бросков, таким образом результат появления одной ставки зависит от другой ставки.

Поясню на простом примере: у нас есть две ставки (000 и 100). И если первые три монеты будут не 000, то последовательность 000 никогда не выпадет, потому-что перед ней будет стоят 100, и 100 сыграет. А последовательность 100 рано или поздно, но выпадет. Поэтому там вероятность 0.125.

Для других пар подсчет вероятности далеко не такой очевидный. Сходу могу разве-что сказать, что это можно рассматривать, как марковский процес и смоделировать марковскими цепями. Скорее всего для него можно будет найти матрицу перехода «в бесконечность», хотя на 100% не уверен. Но даже если найти и не получится, то посчитать матрицу с очень большой точностю очень быстро получится без проблем.

P.S. Кстати после прочтения топика я тоже ничего не понял, что хотел сказать автор, а только после копания в исходниках понял, что автор смоделировал. Мне только интересно, или автор именно этот процес хотел смоделировать, или же он просто ошибся в алгоритме.
Спасибо за подсказку :) В моей программе я забыл учесть ситуации, когда bruteforce вызывается с параметрами, что последний елемент больше оставшейся суммы, которые можно отсечь, потому-что к решению они не ведут. Если внести небольшие правки, тогда мой перебор будет только правильные варианты сразу искать.

Но все-равно, из-за тормозов вывода, на практике разницы мы почти не увидим.
Ну перебирать тоже надо правильно, что не отменяет самого факта перебора. Я предлагаю перебирать только правильные решения (см. код ниже). Оценка по времени выполнения — приблизительно O(N), где N — размер вывода, поэтому быстрее уже никак не получится. Собственно и оптимизировать тут уже нечего, поскольку главный тормоз здесь — вывод.

#include <iostream>
#include <vector>
#include <cstdio>

using namespace std;

void output(vector <int> &s)
{
	// Используем printf для большей скорости вывода по сравнению с cout
	for(int i=1; i<s.size(); i++)
		printf(" %d", s[i]);
	printf("\n");
}

void bruteforce (vector <int> &s, int sumLeft)
{
	if (sumLeft == 0) 
		output (s);

	// max(1, s[s.size()-1]) - последний елемент из стека s, 
	//                         или 1, если последний елемент равен 0.
	for (int i=max(1, s[s.size()-1]); i<=sumLeft; i++)
	{
		s.push_back(i);
		bruteforce(s, sumLeft - i);
		s.pop_back();
	}
}

int main()
{
	int N;
	vector <int> s; // Стэк для перебора

	cin >> N;	
	s.push_back(0);
	bruteforce(s, N);

	return 0;
}
Получить то можно. Но как тогда вы предлагаете их выводить?

Если их вывести перечислением наборов чисел, то тогда в динамике вообще не будет смысла, поскольку при выводе вы все-равно будете все решения перебирать.
Слово «динамика» — это первое, что мелькнуло у меня в голове во время прочтения задачи :) Но увы, у нас не количество спрашивают, а все возможные наборы. Сложно вывести все возможные наборы, не перебирая их.

Эта задачка вообще мало похожа на ACM ICPC-задачку, но условие есть условие, так его автор сформулировал.
А как задачу поиска всех возможных наборов можно без перебора решить?
Я имел в виду, что оптимизация этого кода без привязки к конкретной задаче не имеет смысла.
А вообще я с вами согласен — алгоритмическая оптимизация рулит :) Но надо при этом быть осторожным, чтобы не изменился результат.
За счет вашей «банальной эрудиции» изменился ответ :) Происходит переполнение long'а.

А вообще не вижу смысла в оптимизации самого алгоритма — это же только синтетический тест. Если бы надо было оптимизировать этот кусок кода, то можно просто написать:

long r = 39;

:)
В Питоне надо вставить весь код в функцию. В вашем варианте переменные записываются в массив globals(), что сильно влияет на результат. После таких изменений, код начал работать более, чем в полтора раза быстрее. Ну и range надо заменить на xrange, который и следует использовать в таких циклах. С Psyco, как описано выше в комментах, код будет работать еще быстрее.

def main():
    r = 0
    for i in xrange(0, 10000):
        for j in xrange(0, 10000):
            r = (r + (i * j) % 100) % 47

    print("answer: ", r)

main()
Надо без двоеточия:
beslov книга
Не буду отвечать по пунктах, а то размеры постов разрастаются в арифметической прогрессии.

Я с вамы согласен, в том, что язык для начального обучения должен быть простым и человечным. Я не согласен с тем, что именно Питон как раз такой язык и привел вам пример его «нелогичности». Если хотите близкий к идеальному язык обучения — то я не думаю, что вы его найдете среди промышленных языков.

> Но я всё ещё не вижу преимущества в обучении, обусловленного этой строгостью.

Вы внимательно примеры прочли? Или отсутствие ошибки при внешне «кажущейся» одинаковости — это не является преимуществом? Я не говорю, что если мы используем строгий язык мы вообще избавимся от ошибок — но некоторые скрытые ошибки, от которых порой хочется ученику головой об стенку биться, могут ищезнуть. У меня лично были такие ошибки, когда я учил языки типа Python/PHP, что потом оставляло сильное впечетление «коварности» языка.
п. 1-3. Ну совсем не вижу необходимости рассказывать это сразу. Во-первых, если для вас это критично — используйте Pascal, там ничего из этого не надо. Во-вторых — вспомните, что в Python тоже надо будеть пояснять, что такое import, для такой «простой» функции, как, скажем, синус.

п. 4. А на Питоне на той же программе учителю придеться бегать по класу и пробелы расставлять — чем лучше точки с запятой?

п. 5. Во-первых не надо сразу вываливать на ученика все типы данных. Почему просто не сказать, что float — действительное число? Неужели так сложно?
Во-вторых даже вы, судя по тому, что хотя я и спрашивал, но вы нигде так и не ответили, не заметили, что в примере с Python — ошибка! А каково будет ученику? Эта ваша «простота» Питона выливается в состояние ученика «Почему у меня такая простая программа и неправильно работает?». А это состояние куда хуже чем пару строчек, на которые учитель сказал пока-что не обращать внимания.

п. 6-8. Согласен, тут С++ слишком сложен, но я привел С++ просто в качестве языка, который строже чем Питон, и показал в чем преимущество его строгости. Для обучения нужен более строгий, чем Питон язык, с более простым синтаксисом, чем в С++. Тот же Паскаль, например.

Но попробуем вернуться к сути моего поста. Зря я написал пример на С++, надо было выбрать более простой язык со статической типизацией (сообственно С++ действительно сложный язык — и я тоже считаю, что начинать сразу с него не надо), поскольку вы так кинулись мне доказывать что С++ слишком сложен, что забыли ответить на вопрос, ради которого я вообще писал эти примеры — почему ученик на Питоне будет искать ошибку, а у ученика на С++ (подставте сюда любой другой статически типизирований язык) будет все работать?
1

Information

Rating
Does not participate
Location
Львов, Львовская обл., Украина
Date of birth
Registered
Activity