Сначала давайте изменим код, чтобы явно отслеживать количество итераций с другой переменной j
:
for (int i = 2, j=0; i <=n; j+=1, i = pow(i, k))
Также давайте предположим, что на каком-то шаге условие i
точно равно n
. Это будет последняя итерация. Какое значение j
будет на этом шаге?
Мы можем видеть, что на итерациях i
всегда
i = 2^(k^j)
, поэтому на этом шаге
n = 2^(k^j)
[ 1125] Чтобы получить j
из этого, давайте сначала применим log2
к обеим сторонам:
log2(n) = k^j
, а затем применим logk
(то есть log
с основанием k
) к обеим сторонам: [ 1126]
j = logk(log2(n))
Очевидно, точное совпадение i == n
является редким случаем, но его отсутствие влияет только на общее число итераций согласно 1
, что не влияет на big-O. Другими словами, последнее значение i
не становится точно 2^(k^logk(log2(n)))
, т.е. n
. Это становится чем-то вроде 2^(k^logk(floor(log2(n))))
, но асимптотически это то же самое.
Вот некоторые примеры, но быть предупрежденным, что они довольно тривиальны и действительно не показывают Вам, как система сотрудничает. Одни из преимуществ Grails то, что различные части все объединение для сокращения сложности кода и разработки скорости. Я рекомендую делать единственный проект умеренного размера (как ведущее блог программное обеспечение или фотогалерея), который вынуждает Вас коснуться фактически всего. Я в настоящее время работаю над приложением для управления билетом, и я должен был изучить в основном все в платформе. Это - действительно не так много материала на самом деле.
Однако вот мой список, "должен учиться", наряду с некоторыми примерами:
Groovy, особенно закрытия, карты и свойства. Если Вы происходите из Java, закрытия могли бы казаться немного странными сначала. Однако, после того как Вы переносите голову вокруг них, будет трудно вернуться к языку, который не использует их. Карты и свойства используют идеи, которые могли бы быть знакомыми, но синтаксис и использование достаточно отличаются, что стоит изучить их тесно. Grails использует эти три вещи ВСЕ ВРЕМЯ, все всюду по платформе. Для хорошего примера исследуйте "BeanBuilder", который инстанцирует бобов Spring, определенных в resources.groovy. Кроме того, пробегите документацию Groovy по groovy.codehaus.org. Несколько часов там сохранят Вас ДНИ в будущем.
Программирование MVC. Модель "MVC" в Grails достаточно близко соответствует тому, используемому в направляющих, но это существенно отличается, чем модель "MVC", используемая в настольных приложениях Java. В основном все входящие URL-запросы являются сообщением к контроллеру, который возвращает представление. Объекты области являются данными, которые Вы хотите хранить, просмотреть и управлять посредством представлений и контроллеров. Сделайте входную форму, которая проверяет вход пользователя с помощью ограничений и затем управляет им так или иначе использование контроллера. Что-то как страница, которая берет на Ваш день рождения и возвращает Ваш Знак Зодиака и китайское животное Зодиака. Посмотрите, можно ли заставить это возвращать ошибки пользователю, когда плохой вход дан.
GORM. GORM суперважен, но Вы будете вынуждены изучить это с фактически любым проектом, который Вы выбираете. Дайте документации поверхностный осмотр, именно так Вы знаете, каковы возможности it.
Фильтры и Сервисы. Это "чаши Грааля путь", чтобы сделать большое программирование DRY. Аутентификация является каноническим примером, и это идеально подходит для изучения фильтров. Для сервисов запишите что-то, что пошлет электронное письмо. Существует яркий пример простого сервиса подписчика электронной почты на веб-сайт Grails.
Страницы Сервера Groovy. Если Вы работали с механизмом шаблонной обработки прежде, то это должно казаться знакомым. Узнайте библиотеку тегов GSP, это - огромная справка. Практические примеры включают: фактически что-либо. Для каждого приложения нужен фронтенд. Попытайтесь сделать это симпатичным.Примечание: Это проникает в большое количество материала, который не является определенным для Grails, как JavaScript, CSS, и т.д. Если Вы уже не имеете то знание, готовитесь некоторое время кривой обучения.
Ваш "conf" каталог. Узнайте каждый файл там, особенно UrlMappings.groovy. Игра с UrlMappings так, чтобы у Вас было приложение, которое берет значимую информацию от URL. Что-то как /myapp/calculate/36/times/145
, где приложение дает ответ.
Я сказал бы, что это - основы, но существует много других тем как webflows, i18n, тестирование, обработка сессии, и так далее. Лучший способ изучить их путем разрабатывания достойного размерного проекта. При выполнении этого Вы будете, вероятно, думать, "Черт возьми, мне жаль, что Grails не сделал ____". Прочитайте превосходную документацию относительно Grails.org, и Вы, вероятно, найдете встроенную возможность или плагин, который делает то, что Вы хотите. Ссылочный PDF живет на моем рабочем столе, и я нашел это неоценимым во время моего полезного опыта.
О, и взгляд на код лесов тот Grails генерирует. Вы, вероятно, закончите тем, что передали все это, но это даст Вам хорошую идею того, как система работает.
Весело проведите время, и счастливое взламывание!
Я действительно рекомендовал бы читать Определенное Руководство по Grails, Второму Выпуску. Это покрывает все, что необходимо знать о записи приложений в Grails. Это, вероятно, испытывает недостаток, "что происходит под капотом" знание, но необходимо приобрести навык его. Можно купить его как PDF и начать читать его сразу.
У Вас должен также быть список плагинов для использования - Grails имеет некоторые действительно хорошие, которые пригождаются. Я могу сказать Вам некоторых из тех, которых я использую, но это может быть хорошим вопросом здесь, также.:-)
Если аудитория не знакома с программированием в Groovy должно быть введение в это. Java будет работать, но это получает движение соков, когда Вы видите, насколько менее подробный код находится в Groovy. Когда обсуждение GORM включает ограничения и как они влияют на проверку. Леса являются оперативным средством сохранения при запуске нового проекта так убедиться включать его. Одной из функций Grails, который действительно помог мне, являются Плагины. Выберите некоторых и покажите, как они предоставляют решения при сохранении времени разработки. Плагин безопасности вписался бы прямо в тему фильтра, которую Вы упоминаете. Тестирование, может там когда-либо достаточно тестировать?
Шаг 1 - Изучение Groovy
Если вы уже знаете Java, я настоятельно рекомендую Программирование на Groovy . Он намного более лаконичен и актуален, чем превосходный Groovy in Action . Ни одна из этих книг не описывает существенные изменения языка в Groovy 1.6, поэтому вам также следует прочитать эту страницу .
Шаг 2 - Изучение Grails
Окончательное руководство по Grails , вероятно, является стандартом. Ссылка на Grails - убедитесь, что вы получили второе издание. Grails в действии немного новее, но я не читал его, поэтому не могу его комментировать. Я нашел TDGTG немного легковесным в GORM, так что вы можете также рассмотреть возможность проверки Сохраняемость Grails с GORM и GSQL . Это очень короткая книга, но оно того стоит » s вес в золоте.
Шаг 3 - Погрузитесь в
Попробуйте изменить образец приложения в книге Grails или создайте собственное с нуля. Консоль Groovy - отличный способ поэкспериментировать с фрагментами кода Groovy.