Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2013_1 / ОТС / Основы оценок сложности алгоритмов

.htm
Скачиваний:
33
Добавлен:
23.02.2015
Размер:
21.27 Кб
Скачать

пУОПЧЩ ПГЕОПЛ УМПЦОПУФЙ БМЗПТЙФНПЧ

чРЕТЕД: нБУУЙЧЩ Ч СЪЩЛЕ Java оБЧЕТИ: .7 оБЪБД: Java Й ГЙЛМЙЮЕУЛЙЕ ЛПОУФТХЛГЙЙ   рТЕДНЕФОЩК ХЛБЪБФЕМШ

пУОПЧЩ ПГЕОПЛ УМПЦОПУФЙ БМЗПТЙФНПЧ оБН ХЦЕ ЙЪЧЕУФОП, ЮФП РТБЧЙМШОПУФШ -- ДБМЕЛП ОЕ ЕДЙОУФЧЕООПЕ ЛБЮЕУФЧП, ЛПФПТЩН ДПМЦОБ ПВМБДБФШ ИПТПЫБС РТПЗТБННБ. пДОЙН ЙЪ ЧБЦОЕКЫЙИ СЧМСЕФУС ЬЖЖЕЛФЙЧОПУФШ, ИБТБЛФЕТЙЪХАЭБС РТЕЦДЕ ЧУЕЗП ЧТЕНС ЧЩРПМОЕОЙС РТПЗТБННЩ ДМС ТБЪМЙЮОЩИ ЧИПДОЩИ ДБООЩИ (РБТБНЕФТБ ). оБИПЦДЕОЙЕ ФПЮОПК ЪБЧЙУЙНПУФЙ ДМС ЛПОЛТЕФОПК РТПЗТБННЩ -- ЪБДБЮБ ДПУФБФПЮОП УМПЦОБС. рП ЬФПК РТЙЮЙОЕ ПВЩЮОП ПЗТБОЙЮЙЧБАФУС БУЙНРФПФЙЮЕУЛЙНЙ ПГЕОЛБНЙ ЬФПК ЖХОЛГЙЙ, ФП ЕУФШ ПРЙУБОЙЕН ЕЕ РТЙНЕТОПЗП РПЧЕДЕОЙС РТЙ ВПМШЫЙИ ЪОБЮЕОЙСИ РБТБНЕФТБ . йОПЗДБ ДМС БУЙНРФПФЙЮЕУЛЙИ ПГЕОПЛ ЙУРПМШЪХАФ ФТБДЙГЙПООПЕ ПФОПЫЕОЙЕ (ЮЙФБЕФУС <<п ВПМШЫПЕ>>) НЕЦДХ ДЧХНС ЖХОЛГЙСНЙ , ПРТЕДЕМЕОЙЕ ЛПФПТПЗП НПЦОП ОБКФЙ Ч МАВПН ХЮЕВОЙЛЕ РП НБФЕНБФЙЮЕУЛПНХ БОБМЙЪХ, ИПФС ЮБЭЕ РТЙНЕОСАФ ПФОПЫЕОЙЕ ЬЛЧЙЧБМЕОФОПУФЙ (ЮЙФБЕФУС <<ФЬФБ ВПМШЫПЕ>>). еЗП ЖПТНБМШОПЕ ПРТЕДЕМЕОЙЕ ЕУФШ, ОБРТЙНЕТ, Ч ЛОЙЗЕ [#!korman!#], ИПФС ОБН РПЛБ ДПУФБФПЮОП ВХДЕФ РПОЙНБОЙС ДБООПЗП ЧПРТПУБ Ч ПВЭЙИ ЮЕТФБИ. ч ЛБЮЕУФЧЕ РЕТЧПЗП РТЙНЕТБ ЧЕТОЕНУС Л ФПМШЛП ЮФП ТБУУНПФТЕООЩН РТПЗТБННБН ОБИПЦДЕОЙС ЖБЛФПТЙБМБ ЮЙУМБ. мЕЗЛП ЧЙДЕФШ, ЮФП ЛПМЙЮЕУФЧП ПРЕТБГЙК, ЛПФПТЩЕ ДПМЦОЩ ВЩФШ ЧЩРПМОЕОЩ ДМС ОБИПЦДЕОЙС ЖБЛФПТЙБМБ ЮЙУМБ Ч РЕТЧПН РТЙВМЙЦЕОЙЙ РТСНП РТПРПТГЙПОБМШОП ЬФПНХ ЮЙУМХ, ЙВП ЛПМЙЮЕУФЧП РПЧФПТЕОЙК ГЙЛМБ (ЙФЕТБГЙК) Ч ДБООПК РТПЗТБННЕ ТБЧОП . ч РПДПВОПК УЙФХБГЙЙ РТЙОСФП ЗПЧПТЙФШ, ЮФП РТПЗТБННБ (ЙМЙ БМЗПТЙФН) ЙНЕЕФ МЙОЕКОХА УМПЦОПУФШ (УМПЦОПУФШ ЙМЙ ). нПЦОП МЙ ЧЩЮЙУМЙФШ ЖБЛФПТЙБМ ВЩУФТЕЕ? пЛБЪЩЧБЕФУС, ДБ. нПЦОП ОБРЙУБФШ ФБЛХА РТПЗТБННХ, ЛПФПТБС ВХДЕФ ДБЧБФШ РТБЧЙМШОЩК ТЕЪХМШФБФ ДМС ФЕИ ЦЕ ЪОБЮЕОЙК , ДМС ЛПФПТЩИ ЬФП ДЕМБАФ ЧУЕ РТЙЧЕДЕООЩЕ ЧЩЫЕ РТПЗТБННЩ, ОЕ ЙУРПМШЪХС РТЙ ЬФПН ОЙ ЙФЕТБГЙЙ, ОЙ ТЕЛХТУЙЙ. еЕ УМПЦОПУФШ ВХДЕФ , ЮФП ЖБЛФЙЮЕУЛЙ ПЪОБЮБЕФ ПТЗБОЙЪБГЙА ЧЩЮЙУМЕОЙК РП ОЕЛПФПТПК ЖПТНХМЕ ВЕЪ РТЙНЕОЕОЙС ГЙЛМПЧ Й ТЕЛХТУЙЧОЩИ ЧЩЪПЧПЧ! оЕ НЕОЕЕ ЙОФЕТЕУЕО Й РТЙНЕТ ЧЩЮЙУМЕОЙС -ЗП ЮЙУМБ жЙВПОБЮЮЙ. ч РТПГЕУУЕ ЕЕ ЙУУМЕДПЧБОЙС ЖБЛФЙЮЕУЛЙ ХЦЕ ВЩМП ЧЩСУОЕОП, ЮФП ЕЕ УМПЦОПУФШ СЧМСЕФУС ЬЛУРПОЕОГЙБМШОПК Й ТБЧОБ . рПДПВОЩЕ РТПЗТБННЩ РТБЛФЙЮЕУЛЙ ОЕ РТЙНЕОЙНЩ ОБ РТБЛФЙЛЕ. ч ЬФПН ПЮЕОШ МЕЗЛП ХВЕДЙФШУС, РПРТПВПЧБЧ ЧЩЮЙУМЙФШ У ЕЕ РПНПЭША 40-Е ЮЙУМП жЙВПОБЮЮЙ. рП ЬФПК РТЙЮЙОЕ ЧРПМОЕ БЛФХБМШОБ УМЕДХАЭБС ЪБДБЮБ.

чПФ ТЕЫЕОЙЕ ЬФПК ЪБДБЮЙ, Ч ЛПФПТПН РЕТЕНЕООЩЕ j Й k УПДЕТЦБФ ЪОБЮЕОЙС ДЧХИ РПУМЕДПЧБФЕМШОЩИ ЮЙУЕМ жЙВПОБЮЮЙ.

фЕЛУФ РТПЗТБННЩ.

public class FibIv1 { public static void main(String[] args) throws Exception { int n = Xterm.inputInt("чЧЕДЙФЕ n -> "); Xterm.print("f(" + n + ")"); if (n < 0) { Xterm.print(" ОЕ ПРТЕДЕМЕОП\n"); } else if (n < 2) { Xterm.println(" = " + n); } else { long i = 0; long j = 1; long k; int m = n; while (--m > 0) { k = j; j += i; i = k; } Xterm.println(" = " + j); } } } уМЕДХАЭЙК ЧПРТПУ ЧРПМОЕ ЕУФЕУФЧЕОЕО -- Б НПЦОП МЙ ОБИПДЙФШ ЮЙУМБ жЙВПОБЮЮЙ ЕЭЕ ВЩУФТЕЕ? рПУМЕ ЙЪХЮЕОЙС ПРТЕДЕМЕООЩИ ТБЪДЕМПЧ НБФЕНБФЙЛЙ УПЧУЕН РТПУФП ЧЩЧЕУФЙ УМЕДХАЭХА ЖПТНХМХ ДМС -ПЗП ЮЙУМБ жЙВПОБЮЮЙ , ЛПФПТХА МЕЗЛП РТПЧЕТЙФШ ДМС ОЕВПМШЫЙИ ЪОБЮЕОЙК :

нПЦЕФ РПЛБЪБФШУС, ЮФП ПУОПЧЩЧБСУШ ОБ ОЕК, МЕЗЛП ОБРЙУБФШ РТПЗТБННХ УП УМПЦОПУФША , ОЕ ЙУРПМШЪХАЭХА ЙФЕТБГЙЙ ЙМЙ ТЕЛХТУЙЙ.

фЕЛУФ РТПЗТБННЩ.

public class FibIv2 { public static void main(String[] args) throws Exception { int n = Xterm.inputInt("чЧЕДЙФЕ n -> "); double f = ( 1.0 + Math.sqrt(5.) ) / 2.0; int j = (int)( Math.pow(f,n) / Math.sqrt(5.) + 0.5 ); Xterm.println("f(" + n + ") = " + j); } } оБ УБНПН ДЕМЕ ЬФБ РТПЗТБННБ ЙУРПМШЪХЕФ ЧЩЪПЧ ЖХОЛГЙЙ ЧПЪЧЕДЕОЙС Ч УФЕРЕОШ Math.pow(f,n), ЛПФПТБС ОЕ НПЦЕФ ВЩФШ ТЕБМЙЪПЧБОБ ВЩУФТЕЕ, ЮЕН ЪБ МПЗБТЙЖНЙЮЕУЛПЕ ЧТЕНС (). рТП БМЗПТЙФНЩ, Ч ЛПФПТЩИ ЛПМЙЮЕУФЧП ПРЕТБГЙК РТЙНЕТОП РТПРПТГЙПОБМШОП (Ч ЙОЖПТНБФЙЛЕ РТЙОСФП ОЕ ХЛБЪЩЧБФШ ПУОПЧБОЙЕ ДЧПЙЮОПЗП МПЗБТЙЖНБ) ЗПЧПТСФ, ЮФП ПОЙ ЙНЕЕФ МПЗБТЙЖНЙЮЕУЛХА УМПЦОПУФШ ( ). дМС ЧЩЮЙУМЕОЙС -ЗП ЮЙУМБ жЙВПОБЮЮЙ УХЭЕУФЧХЕФ ФБЛПК БМЗПТЙФН, РТПЗТБННОХА ТЕБМЙЪБГЙА ЛПФПТПЗП НЩ РТЙЧЕДЕН ВЕЪ ДПРПМОЙФЕМШОЩИ ЛПННЕОФБТЙЕЧ, -- ЙОБЮЕ ОХЦОП ПВЯСУОСФШ УМЙЫЛПН НОПЗП (УЧСЪШ ЮЙУЕМ жЙВПОБЮЮЙ УП УФЕРЕОСНЙ НБФТЙГЩ РПТСДЛБ ДЧБ, ЙУРПМШЪПЧБОЙЕ ЛМБУУПЧ ДМС ТБВПФЩ У НБФТЙГБНЙ, БМЗПТЙФН ВЩУФТПЗП ЧПЪЧЕДЕОЙС НБФТЙГЩ Ч УФЕРЕОШ).

фЕЛУФ РТПЗТБННЩ.

public class FibIv3 { public static void main(String[] args) throws Exception { int n = Xterm.inputInt("чЧЕДЙФЕ n -> "); Xterm.print("f(" + n + ")"); if (n < 0) { Xterm.println(" ОЕ ПРТЕДЕМЕОП"); } else if (n < 2) { Xterm.println(" = " + n); } else { Matrix b = new Matrix(1, 0, 0, 1); Matrix c = new Matrix(1, 1, 1, 0); while (n>0) { if ((n&1) == 0) { n >>>= 1; c.square(); } else { n -= 1; b.mul(c); } } Xterm.println(" = " + b.fib()); } } } class Matrix { private long a, b, c, d; public Matrix(long a, long b, long c, long d) { this.a = a; this.b = b; this.c = c; this.d = d; } public void mul(Matrix m) { long a1 = a*m.a+b*m.c; long b1 = a*m.b+b*m.d; long c1 = c*m.a+d*m.c; long d1 = c*m.b+d*m.d; a = a1; b = b1; c = c1; d = d1; } public void square() { mul(this); } public long fib() { return b; } } еУМЙ РПРТПВПЧБФШ РПУЮЙФБФШ ДЕУСФЙНЙММЙПООПЕ ЮЙУМП жЙВПОБЮЮЙ У РПНПЭША ЬФПК Й РТЕДЩДХЭЕК РТПЗТБНН, ФП ТБЪОЙГБ ЧП ЧТЕНЕОЙ УЮЕФБ ВХДЕФ ЧРПМОЕ ПЮЕЧЙДОПК. л УПЦБМЕОЙА, ТЕЪХМШФБФ ВХДЕФ ОЕЧЕТОЩН (Ч ПВПЙИ УМХЮБСИ) Ч УЙМХ ПЗТБОЙЮЕООПУФЙ ДЙБРБЪПОБ ЮЙУЕМ ФЙРБ long. ч ЪБЛМАЮЕОЙЕ РТЙЧЕДЕН УТБЧОЙФЕМШОХА ФБВМЙГХ ЧТЕНЕО ЧЩРПМОЕОЙС БМЗПТЙФНПЧ У ТБЪМЙЮОПК УМПЦОПУФША Й ПВЯСУОЙН, РПЮЕНХ У ХЧЕМЙЮЕОЙЕН ВЩУФТПДЕКУФЧЙС ЛПНРШАФЕТПЧ ЧБЦОПУФШ ЙУРПМШЪПЧБОЙС ВЩУФТЩИ БМЗПТЙФНПЧ ЪОБЮЙФЕМШОП ЧПЪТБУФБЕФ. тБУУНПФТЙН ЮЕФЩТЕ БМЗПТЙФНБ ТЕЫЕОЙС ПДОПК Й ФПК ЦЕ ЪБДБЮЙ, ЙНЕАЭЙЕ УМПЦОПУФЙ , , Й УППФЧЕФУФЧЕООП. рТЕДРПМПЦЙН, ЮФП ЧФПТПК ЙЪ ЬФЙИ БМЗПТЙФНПЧ ФТЕВХЕФ ДМС УЧПЕЗП ЧЩРПМОЕОЙС ОБ ОЕЛПФПТПН ЛПНРШАФЕТЕ РТЙ ЪОБЮЕОЙЙ РБТБНЕФТБ ТПЧОП ПДОХ НЙОХФХ ЧТЕНЕОЙ. фПЗДБ ЧТЕНЕОБ ЧЩРПМОЕОЙС ЧУЕИ ЬФЙИ ЮЕФЩТЕИ БМЗПТЙФНПЧ ОБ ФПН ЦЕ ЛПНРШАФЕТЕ РТЙ ТБЪМЙЮОЩИ ЪОБЮЕОЙСИ РБТБНЕФТБ ВХДХФ РТЙНЕТОП ФБЛЙНЙ, ЛБЛ Ч ФБВМЙГЕ 7.

фБВМЙГБ 7: уТБЧОЙФЕМШОБС ФБВМЙГБ ЧТЕНЕО ЧЩРПМОЕОЙС БМЗПТЙФНПЧ уМПЦОПУФШ БМЗПТЙФНБ УЕЛ. УЕЛ. УЕЛ. УЕЛ. НЙО. ЮБУ. УЕЛ. ЮБУ. ЗПДБ НЙО. МЕФ МЕФ

лПЗДБ ОБЮЙОБАЭЙЕ РТПЗТБННЙУФЩ ФЕУФЙТХАФ УЧПЙ РТПЗТБННЩ, ФП ЪОБЮЕОЙС РБТБНЕФТПЧ, ПФ ЛПФПТЩИ ПОЙ ЪБЧЙУСФ, ПВЩЮОП ОЕЧЕМЙЛЙ. рПЬФПНХ ДБЦЕ ЕУМЙ РТЙ ОБРЙУБОЙЙ РТПЗТБННЩ ВЩМ РТЙНЕОЕО ОЕЬЖЖЕЛФЙЧОЩК БМЗПТЙФН, ЬФП НПЦЕФ ПУФБФШУС ОЕЪБНЕЮЕООЩН. пДОБЛП, ЕУМЙ РПДПВОХА РТПЗТБННХ РПРЩФБФШУС РТЙНЕОЙФШ Ч ТЕБМШОЩИ ХУМПЧЙСИ, ФП ЕЕ РТБЛФЙЮЕУЛБС ОЕРТЙЗПДОПУФШ РТПСЧЙФУС ОЕЪБНЕДМЙФЕМШОП. у ХЧЕМЙЮЕОЙЕН ВЩУФТПДЕКУФЧЙС ЛПНРШАФЕТПЧ ЧПЪТБУФБАФ Й ЪОБЮЕОЙС РБТБНЕФТПЧ, ДМС ЛПФПТЩИ ТБВПФБ ФПЗП ЙМЙ ЙОПЗП БМЗПТЙФНБ ЪБЧЕТЫБЕФУС ЪБ РТЙЕНМЙНПЕ ЧТЕНС. фБЛЙН ПВТБЪПН, ХЧЕМЙЮЙЧБЕФУС УТЕДОЕЕ ЪОБЮЕОЙЕ ЧЕМЙЮЙОЩ , Й, УМЕДПЧБФЕМШОП, ЧПЪТБУФБЕФ ЧЕМЙЮЙОБ ПФОПЫЕОЙС ЧТЕНЕО ЧЩРПМОЕОЙС ВЩУФТПЗП Й НЕДМЕООПЗП БМЗПТЙФНПЧ. юЕН ВЩУФТЕЕ ЛПНРШАФЕТ, ФЕН ВПМШЫЕ ПФОПУЙФЕМШОЩК РТПЙЗТЩЫ РТЙ ЙУРПМШЪПЧБОЙЙ РМПИПЗП БМЗПТЙФНБ!

чРЕТЕД: нБУУЙЧЩ Ч СЪЩЛЕ Java оБЧЕТИ: .7 оБЪБД: Java Й ГЙЛМЙЮЕУЛЙЕ ЛПОУФТХЛГЙЙ   рТЕДНЕФОЩК ХЛБЪБФЕМШ

Соседние файлы в папке ОТС