Хороший способ научиться решать вопросы на InterviewStreet [закрыто]

10

Возможный дубликат:
Как мне адаптироваться к контрольным вопросам перед собеседованием?

InterviewStreet - это новая компания, которая, по сути, выступает в качестве фильтра для компаний, которые ищут программистов, способных писать код. Моя проблема в том, что моя математика довольно слабая, и я хотел бы изучить ее, даже если она с нуля, чтобы иметь возможность решать такие вопросы, как этот, который можно найти на их сайте:

Find the no of positive integral solutions for the equations (1/x) + (1/y) = 1/N! (read 1 by n factorial) Print a single integer which is the no of positive integral solutions modulo 1000007

Теперь, пожалуйста, НЕ публикуйте ответ на этот вопрос, он взят непосредственно из InterviewStreet и не должен быть размещен здесь. Это не тот ответ, который я ищу в этой теме. Я задаю более фундаментальный вопрос, на который, вероятно, могут ответить некоторые хакеры из SO-сообщества.

Как подготовиться к такому вопросу? Какие ресурсы доступны для меня, чтобы изучить / узнать, как решить этот тип проблемы? Охвачено ли это в открытой учебной программе MIT? Ханская академия? Какие-то конкретные книги? Я даже не уверен, с чего начать решение вышеуказанной проблемы, и я хотел бы узнать, какие шаги я могу предпринять для этого.

образный
источник
не поймите меня неправильно - мне очень нравятся подобные вопросы (маленькие загадки на выходные) - но я действительно не думаю, что вы найдете хорошие программы с ними - вы найдете математиков (которые могут быть хорошими в programmig) - и мы все знаем, что эти люди делают код, но человек рядом с ними никогда не сможет прочитать их код :) ... хотите знать, если кто-то хорош? Сядьте на 2 часа парного программирования с этим человеком, и вы узнаете намного больше, чем если бы ему нравились пазлы Гарднера
Carsten

Ответы:

9

Часто вопросы интервью предназначены для проверки ваших навыков решения проблем без каких-либо специальных знаний. Но по твоему вопросу некоторые математические знания определенно помогут. По крайней мере, вам нужно понять определения «положительный интеграл» и «по модулю». Может быть полезен вводный курс по теории чисел, возможно, от OCW .

Я бы также порекомендовал Project Euler для типовых задач - это отличный способ развить свои знания в области математики и программирования. Выберите язык и начните работать с упражнениями.


источник
6

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

Я помню, как несколько лет назад я провел целое лето (5+ часов в день), занимаясь решением этих проблем просто для удовольствия.

Есть ряд мест, где вы можете сделать это. Проект Эйлера - хорошая отправная точка. У UVa Online Judge также есть куча проблем.

tskuzzy
источник
Это какое-то обязательство. Считаете ли вы, что это помогло вам в ваших общих навыках программирования?
Даррен Янг
3
Абсолютно. Я участвовал в олимпиаде по вычислительной технике в США в средней школе и прошел путь от 20 до 20 человек в США. Что касается программирования в "реальном мире", я могу с полной уверенностью сказать, что мои навыки значительно отточены. Сейчас я не говорю, что все должны выходить и делать то, что я сделал, но я думаю, что стоит потратить некоторое время на оттачивание ваших навыков решения проблем. Вы действительно можете многому научиться, и это определенно применимо к разработке программного обеспечения.
tskuzzy
0

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

Другие проблемы на сайте требуют понимания больших O-нотаций, простых структур данных, базовых алгоритмов, таких как сортировка и комбинаторика. Я прошел 3 из 5 задач, и я почти закончил с 4-м, и я не использовал никаких специальных знаний после первого года занятий по CS в колледже. Тем не менее, это сложные проблемы. Некоторые из них требуют удивительного количества математической интуиции.

Чтобы подготовиться к такого рода вещам, вы должны уметь решать математические задачи. Посмотрите на олимпиаду (если вы учитесь в старшей школе) или экзамен Putnam (если вы учитесь в колледже) и решите проблемы с практикой, которые вы найдете. Они тяжелые, но ты в конце концов становишься лучше.

Кроме того, не делайте вопрос из 30 пунктов - Quadrant Queries - сначала. Это самый сложный на сегодняшний день.

Лайонел Б
источник