All streams
Search
Write a publication
Pull to refresh
447
124.2
Send message
Что ж поделать, торговля — наука не дворянская. Там свои законы.
Косяк в цене бумажной и электронной версии исправили :-)
Есть такое понятие «талантливые авторы» Вот это как раз тот самый случай.
1771 pages…
На русском она вряд ли появится
Мы сделали довольно большой тираж книги и его остаток будет продаваться в следующем году.
К сожалению, российские книготорговцы очень падки на год издания и прошлогодние книги не берут, а книги из будущего берут :-)
Вот оригинальный текст задачи
Write a method to randomly generate a set of m integers from an array of size n.
Each element must have equal probability of being chosen.
Вот оригинальный текст задачи
Write a method to randomly generate a set of m integers from an array of size n.
Each element must have equal probability of being chosen.
А вот и ответ на опубликованное вчера задание, предлагаемый автором книги:

Задание
Напишите метод, генерирующий случайную последовательность m целых чисел из массива размером n. Все элементы выбираются с одинаковой вероятностью.
Решение
Первое, что приходит в голову — выбрать случайные элементы из массива и поместить в новый массив. Но, что если мы выберем один и тот же элемент дважды? В идеале, нам нужно «сократить» массив так, чтобы выкинуть выбранный элемент. Но уменьшение массива достаточно трудоемкая операция, поскольку требует смещения элементов.

Вместо того чтобы сокращать (сдвигать) массив, можно поставить элемент (поменять элементы местами) в начало массива, и «запомнить», что теперь массив начинается с элемента j. Если элемент subset[0] становится элементом array[k], то мы должны заменить элемент array[k] первым элементом в массиве. Когда мы переходим к элементу subset[1], то подразумеваем, что элемент array[0] «мертв», и выбираем случайный элемент y из интервала от 1 до array.size(). Теперь subset[1] = array[y] и array[y] = array[1]. Элементы 0 и 1 «мертвы», а subset[2] выбирается в диапазоне от array[2] до array[array.size()] и т. д.

1 /* Случайное число между lower и higher, включительно */
2 public static int rand(int lower, int higher) {
3 return lower + (int)(Math.random() * (higher — lower + 1));
4 }
5
6 /* Выбрать M элементов из исходного массива. Клонируем исходный
7 * массив так, чтобы не уничтожить ввод */
8 public static int[] pickMRandomly(int[] original, int m) {
9 int[] subset = new int[m];
10 int[] array = original.clone();
11 for (int j = 0; j < m; j++) {
12 int index = rand(j, array.length — 1);
13 subset[j] = array[index];
14 array[index] = array[j]; // array[j] теперь «мертв»
15 }
16 return subset;
17 }
Да, эта книга сейчас в переводе и должна быть издана к концу года.
Спасибо и Вам, что помните.
Код, приведенный в данном посте, полностью идентичен тому, что опубликован в оригинальной книге. Нет исправлений по нему и в списке опечаток на авторском сайте. Возможно, стоит вступить в дискуссию с автором книги на том же сайте или сообщить о баге там же.
Безусловно, но, как и было сказано выше, книга не только и не столько о том, как устроиться на работу. Думаю, что сам факт издания ее на русском позволит большему числу отечественных программистов в принципе узнать о том, что есть такая интересная книга.
Знаете, у всех бывают ошибки, и в издательском деле они также случаются. Мы свои ошибки признаем и делаем из них выводы, в частности, по дальнейшему сотрудничеству с тем или иным исполнителем. В случае с книгой Рихтера, действительно, были допущены некоторые терминологические ошибки, но между тем эти ошибки присутствовали только в первом тираже, который давно продан. В экземплярах, которые находятся в продаже сейчас, терминология исправлена.

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

Кстати, в случае с книгой Эспозито ошибку свою мы не совсем признаем, т.к. ее официальным издателем в России была компания «Русская Редакция», мы лишь помогали с распространением. А только что вышло новое издание этой книги и тут за перевод мы ручаемся, т.к. делали его самостоятельно.
Эта книга по плану должна поступить из типографии 8 сентября, в течение недели после этого будет доступна в магазинах.
Часть наших книг в электронном формате можно приобрести, например, на Литресе. К сожалению, не весь ассортимент еще представлен в формате е-книг, поскольку западные издатели пока неохотно отдают в Россию права на распространение книг в электронном виде. Но мы работаем над этим.
А если уважаемое сообщество поделится информацией, какие именно переводные книги (из изданных нами) в электронном виде необходимы в первую очередь, мы постараемся получить электронные права на них в первую очередь.
12 ...
69

Information

Rating
Does not participate
Works in
Registered
Activity