2020/03/15 にお茶の水女子大学内でセキュリティ・キャンプ (https://www.security-camp.or.jp/) の宣伝をした際に、それに合わせて小さな講義を提供しました。これはその発表資料です。 --- 誤りを見つけたら、Twitter (https://twitter.com/lmt_swallow) の DM かポートフォリオサイト(https://shift-js.info/) で示されているメールアドレスまでご連絡ください。
B ਖ਼نදݱͱηΩϡϦςΟ!͓ͷਫঁࢠେֶ5BLBTIJ:POFVDIJ!MNU@TXBMMPX !ZOVDIZҰൠࣾஂ๏ਓηΩϡϦςΟɾΩϟϯϓڠٞձߨࢣҭ(ɾاը(?
View Slide
TIJGUKTJOGPਖ਼نදݱͱηΩϡϦςΟ5BLBTIJ:POFVDIJ‣ !MNU@TXBMMPX !ZOVDIZ‣ ॴଐ‣ 'MBUU4FDVSJUZ *OD‣ ౦ژେֶཧֶ෦ใՊֶՊ‣ ଞͷ׆ಈ‣ DUGCMFBEFS‣ TFDDBNQڠٞձߨࢣҭ(اը(‣ XFCTFDKQ‣ 4FFIUUQTTIJGUKTJOGP
TIJGUKTJOGPਖ਼نදݱͱηΩϡϦςΟࠓ͍ͨ͜͠ͱਖ਼نදݱͱηΩϡϦςΟ‣ ʮֶ෦ͰֶΜͰ͍ΔܭࢉػՊֶͷࣝɺͲΜͳͱ͜ΖͰཱͭΜͩΖ͏ʁʯͱ͍͏ૉͳٙʹ͍ͭͯɺηΩϡϦςΟٕज़ͷ؍͔Βߟ͑ͯΈΔɻ‣ ࢀߟ͓͜͜ͷਫঁࢠେֶͰͷؔ࿈Պ ‣ σʔλߏͱΞϧΰϦζϜ ‣ ݴޠཧͱΦʔτϚτϯ ɾબ‣ ܗࣜݴޠ ɾબ‣ ਖ਼نදݱͦΕͦͷͷͱɺਖ਼نදݱʹؔ͢ΔηΩϡϦςΟత؍Λɺ࣮༻ͱཧͷ྆໘͔Βཧֶͯ͠Ϳɻ‣ ηΩϡϦςΟɾΩϟϯϓͷએ ओతɻ
TIJGUKTJOGPਖ਼نදݱͱηΩϡϦςΟࠓ͢͜ͱਖ਼نදݱͱηΩϡϦςΟ‣ ೖɾਖ਼نදݱ‣ ਖ਼نදݱͱԿ͔Λཧ͠·͢ɻ‣ ਖ਼نදݱͷཧͱ࣮‣ ਖ਼نදݱΛࢧ͑Δཧͷ֓؍ΛோΊͯɺ͔ͦ͜Βਖ਼نදݱΤϯδϯͷ۪ͳ࣮ํʹ͍ͭͯٞ͠·͢ɻ‣ ਖ਼نදݱͱ੬ऑੑ‣ ਖ਼نදݱΤϯδϯͷ۪ͳ࣮ํ͔Βࣗવʹ༠ಋ͞ΕΔ߈ܸख๏ʹ͍ͭͯΛઆ໌͠·͢ɻ‣ ҙҰ෦ܗࣜతͳఆٛΛ࣋ͪग़ͯ͠આ໌͢Δ͕ɺޡΓؚ͕·ΕΔՄೳੑेʹ͋ΔͷͰɺదͳڭՊॻΛࢀর͢Δ͜ͱɻ
ೖɾਖ਼نදݱ
TIJGUKTJOGPਖ਼نදݱͱηΩϡϦςΟʮจࣈྻݕࡧͬͯେมʜʯೖɾਖ਼نදݱ‣ ࣍ͷΑ͏ͳೖྗ͔Β࣍ͷΑ͏ͳग़ྗΛಘ͍ͨɻ‣ ೖྗ͍จࣈྻ‣ ग़ྗೖྗதͷBCDͱEFGͰғ·Εͨ෦ ෳ͋Δ߹ෳ‣ ղྫ۪ͳํ‣ จࣈྻΛॱ൪ʹᢞΊ͍ͯ͘ɻͦͯ͠BCDΛΈ͚ͭ࣍ୈɺ͔ͦ͜ΒEFG͕ొ͢Δ·ͰΛه͢Δɻ‣ ۪ͳํͷࠔΓ͝ͱ‣ গ͠Ͱ͕มΘΔͱίʔυΛେ͖͘มߋ͠ͳ͍͚ͯ͘ͳ͍ɻ‣ ͨͩʮΔ͚ͩʯͷ࣮Ͱ͋ͬͯɺ࣮໘ɻ
TIJGUKTJOGPਖ਼نදݱͱηΩϡϦςΟਖ਼نදݱΛར༻͢Δೖɾਖ਼نදݱ‣ ਖ਼نදݱΛར༻͢Δͱɺઌड़ͷΑ͏ͳจࣈྻݕࡧͪʹߦ͑Δɻ‣ ਖ਼نදݱه߸ྻͷू߹ ݴޠΛͭͷจࣈྻͰද͢ํ๏ɻ‣ ར‣ ਖ਼نදݱҎ֎ͷ෦ͷίʔυΛ࠶ར༻͍͢͠ɻ‣ จࣈྻͷݕࡧɾஔͷͨΊʹඞཁͳίʔυྔൺֱతখ͘͞ͳΔɻimport res = 'abchogedef'print(re.match(r'abc(.*?)def', s).groups())1ZUIPOਖ਼نදݱ
TIJGUKTJOGPਖ਼نදݱͱηΩϡϦςΟਖ਼نදݱͷجຊతͳߏจ ུ֓ೖɾਖ਼نදݱ‣ <> ׅ֯ހͦͷଆʹॻ͔Εͨจࣈͷ͏ͪͲΕ͔จࣈ‣ ྫBCDE<>BCDEʹ͔Β·Ͱͷࣈ͕ଓ͍͍ͯΔΑ͏ͳจࣈྻ‣ υοτ΄΅શͯͷจࣈछͷ͏ͪͲΕ͔จࣈ‣ ྫBCEBCͱEͷؒʹͳΜΒ͔ͷจࣈ͕ڬ·Ε͍ͯΔΑ͏ͳจࣈྻ‣ ΞελϦεΫͦͷલͷਖ਼نදݱͷճҎ্ͷ܁Γฦ͠‣ ྫBBͷճҎ্ͷ܁Γฦ͠
TIJGUKTJOGPਖ਼نදݱͱηΩϡϦςΟਖ਼نදݱͷ׆༻ࣄྫ ೖɾਖ਼نදݱ‣ ্هͷ1ZUIPOεΫϦϓτεϖʔεͰ۠ΒΕͨͭͷจࣈྻͷॱংΛೖΕସ͑Δ FH+PIO'PPˠ'PP +PIOɻ‣ ΩϟϓνϟɾࢀরΛۦ͢ΔͱɺඇৗʹศརߴͳςΩετૢ࡞͕͍ίʔυྔͰߦ͑Δɻimport res = """John FooJohn BarJohn Foobar"""print(re.sub(r'^(.*) (.*)$', '\\2, \\1', s,flags=re.MULTILINE))1ZUIPOεΫϦϓτͷྫ
TIJGUKTJOGPਖ਼نදݱͱηΩϡϦςΟਖ਼نදݱͷ׆༻ࣄྫ ೖɾਖ਼نදݱ‣ HSFQͰਖ਼نදݱΛར༻Ͱ͖Δɻ‣ &ΦϓγϣϯΛར༻‣ ্ड़ͷίϚϯυྫɺ͋ΔϑΝΠϧIPHFͷதͰɺ<>ʹϚον͢ΔจࣈྻΛؚΉߦͷΈΛग़ྗ͢Δɻcat hoge | grep -E "03/2[1-9]"HSFQਖ਼نදݱ
TIJGUKTJOGPਖ਼نදݱͱηΩϡϦςΟਖ਼نදݱͷ׆༻ࣄྫ ೖɾਖ਼نදݱ‣ ҰൠతͳΤσΟλ FHFNBDT WJN 7JTVBM4UVEJP$PEFʹਖ਼نදݱʹΑΔςΩετૢ࡞ػೳ͕͍͍ͭͯΔɻ‣ εΫϦʔϯγϣοτͰɺ7JTVBM4UVEJP$PEFͰ੨ۭจݿͰ͞Ε͍ͯΔʰޗഐೣͰ͋ΔʱͷϧϏ෦Λਖ਼نදݱͰϋΠϥΠτ͍ͯ͠Δɻ
TIJGUKTJOGPਖ਼نදݱͱηΩϡϦςΟਖ਼نදݱͷߏจೖɾਖ਼نදݱ‣ ͍͔ͭ͘ͷߏจ͕͋Δɻ‣ ྫ104*9Ͱఆٛ͞Ε͍ͯΔͷ‣ 43& 4JNQMF3FHVMBS&YQSFTTJPO‣ #3& #BTJD3FHVMBS&YQSFTTJPO‣ &3& &YUFOEFE3FHVMBS&YQSFTTJPO‣ ྫ1FSM͕࠾༻͍ͯ͠Δͷ‣ ΄΅+BWB 1ZUIPO 3VCZʹΈࠐ·Ε͍ͯΔΤϯδϯ1$3&1FSM$PNQBUJCMF3FHVMBS&YQSFTTJPOTͱಉ‣ Ұ෦ܗࣜతͳਖ਼نදݱͷఆٛ ޙड़͔Βҳͨ͠ه๏Λ࣋ͭɻ
ਖ਼نදݱͷཧͱ࣮
TIJGUKTJOGPਖ਼نදݱͱηΩϡϦςΟجຊతͳޠ۟ͱه๏ͷఆٛਖ਼نදݱͷཧͱ࣮‣ ޠ ͋Δ͍ه߸ྻۭͰͳ͍จࣈू߹ ͷཁૉΛॏෳΛڐͯ͠༗ݶݸ ݸҎ্ฒͨྻͷ͜ͱɻ‣ ۭޠ͞ͷه߸ྻͷ͜ͱͰ͋Γɺ͜ΕΛ ͱॻ͖ද͢ɻ‣ ݴޠ ্ͷه߸ྻશମ͔ΒͳΔू߹ͷ෦ू߹ɻ‣ ࿈ه߸ྻ ʹ͍ͭͯɺ ͷ͋ͱʹ Λଓ͚ͯฒͨه߸ྻΛ ͱ ͷ࿈ͱݺͼɺ͜ΕΛ ͱॻ͖ද͢ɻΣϵΣ* Σx, y x y xy xy
TIJGUKTJOGPਖ਼نදݱͱηΩϡϦςΟਖ਼نݴޠͷఆٛਖ਼نදݱͷཧͱ࣮‣ ه߸ू߹ ্ͷਖ਼نݴޠ ਖ਼ଇݴޠͷू߹ͷ࠶ؼతఆٛ‣ ۭͷݴޠ ਖ਼نݴޠͰ͋Δɻ‣ ۭޠͷΈ͔ΒͳΔݴޠ\ ^ਖ਼نݴޠͰ͋Δɻ‣ தͷҙͷݩ ʹ͍ͭͯɺ୯߲ू߹\ ^ਖ਼نݴޠͰ͋Δɻ‣ ͱ ͕ਖ਼نݴޠͰ͋Δ࣌ɺ ਖ਼نݴޠͰ͋Δɻ‣ ʜ ͱ ͷू߹‣ ʜ ͳ͓ ‣ ʜ ‣ ͦΕҎ֎ͷ ্ͷݴޠਖ਼نݴޠͰͳ͍ɻΣ∅ϵΣ c cA B A ∪ B AB A*A ∪ B A BAB {ab|a ∈ A, b ∈ B} An = AAAA . . . . A A0 = {ϵ}A* ∪n{An |0 ≤ n}Σ
TIJGUKTJOGPਖ਼نදݱͱηΩϡϦςΟਖ਼نදݱͷܗࣜతఆٛਖ਼نදݱͷཧͱ࣮‣ ه߸ू߹ ্ͷਖ਼نදݱ ͱͦΕ͕ද͢ू߹ ͷ࠶ؼతఆٛ‣ ਖ਼نදݱͰ͋Γɺ͔ͭ Ͱ͋Δɻ‣ தͷҙͷݩ ਖ਼نදݱͰ͋Γɺ͔ͭ Ͱ͋Δɻ‣ ͕ਖ਼نදݱͰ͋Δͱ͖ɺҎԼ͕Γཱͭɻ‣ ਖ਼نදݱͰɺ Ͱ͋Δɻ‣ ਖ਼نදݱͰɺ Ͱ͋Δɻ‣ ਖ਼نදݱͰɺ Ͱ͋Δɻ‣ਖ਼نදݱͰɺ Ͱ͋Δɻ‣ ͜ΕΒͷنଇʹΑΓಋग़͞ΕΔه߸ྻͷΈ͕ਖ਼نදݱͰ͋ΔɻΣ e L(e)∅ ϵ L(∅) = ∅, L(ϵ) = {ϵ}Σ c L(c) = {c}e1, e2(e1) L((e1)) = L(e1)e1|e2L(e1|e2) = L(e1) ∪ L(e2)e1e2L(e1e2) = L(e1)L(e2)e*1L(e*1) = (L(e1))*
TIJGUKTJOGPਖ਼نදݱͱηΩϡϦςΟ༗ݶΦʔτϚτϯ ུ֓ਖ਼نදݱͷཧͱ࣮‣ ඇܾఆੑ༗ݶΦʔτϚτϯ /POEFUFSNJOJTUJD'JOJUF"VUPNBUPO/'"‣ ঢ়ଶू߹ จࣈू߹ ભҠؔ ։࢝ঢ়ଶ डཧঢ়ଶू߹ ͷͭͷɻ‣ ભҠؔͷఆٛͷ Λ ͱͨ͠ͷΛ /'"ͱݺͿɻ‣ ܾఆੑ༗ݶΦʔτϚτϯ %FUFSNJOJTUJD'JOJUF"VUPNBUPO%'"‣ ͕Γཱͭ/'"ͷ͜ͱɻ͜ͷͱ͖ભҠؔભҠؔͱݺΕΔɻQ Σ δ ⊆ Q × Σ × Qq0∈ Q F ⊆ QΣ Σ ∪ {ϵ} ϵ∀q ∈ Q . ∀c ∈ Σ . |{q′ |(q, c, q′ ) ∈ δ}| = 1
TIJGUKTJOGPਖ਼نදݱͱηΩϡϦςΟભҠͱडཧਖ਼نදݱͷཧͱ࣮‣ ඇܾఆੑ༗ݶΦʔτϚτϯ ʹ͍ͭͯͷఆٛ‣ ભҠͭ ΛભҠͱݺͿɻ‣ डཧ͢Δͭͷ༻๏‣ ه߸ྻ ʹ͍ͭͯɺ ͕ଘࡏ͠ɺ͔ͭ ͕Γཱͭͱ͖ɺ ه߸ྻ Λडཧ͢Δͱ͍͏ɻ‣ ͱఆٛͨ࣌͠ʹɺ Λ ͷडཧݴޠͱݺͼɺ͋Δݴޠ ʹ͍ͭͯ Ͱ͋Δ͜ͱΛ ͕ Λडཧ͢Δɺͱ͍͏ɻM = (Q, Σ, δ, q0, F)(p, a, q) ∈ δw = c1c2. . . cnq1, q2, . . . , qn∈ Q(q0, c1, q1), (q1, c2, q2), . . . , (qn−1, cn, qn) ∈ δ qn∈ F MwL(M) = {w ∈ Σ*|MwΛडཧ͢Δ} L(M) ML L = L(M) M L
TIJGUKTJOGPਖ਼نදݱͱηΩϡϦςΟਖ਼نදݱͱ༗ݶΦʔτϚτϯਖ਼نදݱͷཧͱ࣮‣ ࣮ਖ਼نදݱͱ༗ݶΦʔτϚτϯʹਂ͍ؔΘΓ͕͋Δɻ‣ ਖ਼نݴޠ㲗 /'"͍͔ͳΔਖ਼نݴޠʹ͍ͭͯɺͦΕΛडཧ͢Δ/'"͕ଘࡏ͢Δɻٯʹ͍͔ͳΔ /'"ʹ͍ͭͯɺͦͷडཧݴޠਖ਼نݴޠͰ͋Δɻ‣ /'"㲗%'"͍͔ͳΔ/'"ʹ͍ͭͯɺͦΕͱडཧݴޠ͕Ұக͢Δ%'"͕ଘࡏ͢Δ ώϯτঢ়ଶू߹Λͦͷ͖ू߹ʹஔɻٯʹ͍͔ͳΔ%'"ʹ͍ͭͯɺͦΕͱडཧݴޠ͕͍͠/'"͕ଘࡏ͢Δɻ‣ /'"㲗 /'"͜ΕΒ/'"㲗%'"ಉ༷ʹมՄೳɻ‣ ͭ·Γɺ͔ͳΓࡶʹදݱ͢ΔͱɺҎԼཱ͕͢Δɻ‣ ਖ਼نදݱͷදݱೳྗ /'"ͷදݱೳྗ %'"ͷදݱೳྗϵϵ ϵϵ
TIJGUKTJOGPਖ਼نදݱͱηΩϡϦςΟਖ਼نදݱͱ /'"ͷରԠͷྫਖ਼نදݱͷཧͱ࣮ϵa.*bB͔Β࢝·ΓCͰऴΘΔจࣈྻ
TIJGUKTJOGPਖ਼نදݱͱηΩϡϦςΟਖ਼نදݱΤϯδϯͷԠ༻ਖ਼نදݱͷཧͱ࣮‣ ઌͷࣄ࣮͔Βɺਖ਼نදݱΤϯδϯͷ۪ͳ࣮ํ͕ಘΒΕΔɻ‣ ೖྗਖ਼نදݱͱݕࡧରͷจࣈྻͷͭɻ‣ ग़ྗਖ਼نදݱʹจࣈྻ͕Ϛον͔ͨ͠Ͳ͏͔ɻ‣ ΞϧΰϦζϜ‣ ਖ਼نදݱΛҰ/'"ʹม͢Δɻ‣ ݕࡧରͷจࣈྻΛೖྗͱͯ͠/'"্ͷঢ়ଶભҠΛߦ͏ɻ‣ ભҠޠͷ࠷ऴঢ়ଶ͕डཧঢ়ଶͰ͋ΕʮϚονͨ͠ʯͱग़ྗ͠ɺ͞ͳ͘ʮϚον͠ͳ͔ͬͨʯΛग़ྗ͢Δɻ‣ ࣮ࡍ/'"ܕɾ%'"ܕɾ7.ܕͳͲͱݺΕΔ࣮ํ͕ଘࡏ͓ͯ͠ΓɺͦΕͧΕҟͳΔརɾܽΛ࣋ͭɻ
TIJGUKTJOGPਖ਼نදݱͱηΩϡϦςΟ/'"ϕʔεͷਖ਼نදݱΤϯδϯਖ਼نදݱͷཧͱ࣮‣ /'"ϕʔεͷΞϧΰϦζϜͷརͱܽ‣ ར࣮͕༰қ‣ ܽඇܾఆੑ OPOEFUFSNJOJTNͷ‣ ೖྗ͔Β࣍ͷભҠઌঢ়ଶ͕Ұҙʹఆ·Βͳ͍ɻ‣ ભҠઌঢ়ଶ͕Ұҙʹఆ·Βͳ͍࣌ͷํͷྫ‣ #BDLUSBDLJOH‣ ભҠީิͷ͏ͪͲΕ͔ʹભҠ͠ɺͩΊͳΒผͷީิΛࢼ͢ɺΛ܁Γฦ͢ɻ‣ ,FO5IPNQTPOT"MHPSJUIN‣ ಉ࣌ʹෳީิΛࢼ͍ͯ͘͠ JFPOUIFqZͷႈू߹ߏɻ
TIJGUKTJOGPਖ਼نදݱͱηΩϡϦςΟόοΫτϥοΫͷྫ ਖ਼نදݱͷཧͱ࣮‣ ҎԼͷ /'" ਖ਼نදݱBCͱՁʹೖྗBDCΛ༩͑Δɻ‣ ೖྗதͷࠓ͍ͯ͠ΔจࣈBDC‣ ࣍ͷঢ়ଶભҠ࢝ঢ়ଶˠঢ়ଶϵ
TIJGUKTJOGPਖ਼نදݱͱηΩϡϦςΟόοΫτϥοΫͷྫ ਖ਼نදݱͷཧͱ࣮‣ ҎԼͷ /'" ਖ਼نදݱBCͱՁʹೖྗBDCΛ༩͑Δɻ‣ ೖྗதͷࠓ͍ͯ͠ΔจࣈBDC‣ ࣍ͷঢ়ଶભҠෳީิ͕͋Δ ˠ ˠͷͭͷ ભҠೖྗΛফඅ͠ͳ͍ભҠɻ͜͜Ͱࢼ͠ʹ͔ΒʹਐΜͰΈΔɻϵϵ
TIJGUKTJOGPਖ਼نදݱͱηΩϡϦςΟόοΫτϥοΫͷྫ ਖ਼نදݱͷཧͱ࣮‣ ҎԼͷ /'" ਖ਼نදݱBCͱՁʹೖྗBDCΛ༩͑Δɻ‣ ೖྗதͷࠓ͍ͯ͠ΔจࣈBDC‣ ࣍ͷঢ়ଶભҠࠓண͍ͯ͠ΔจࣈDͳͷͰ͔ΒભҠͰ͖ͳ͍ɻͳͷͰઌఔࢼ͠ʹʹਐΜͩͷΛऔΓΊͯɺʹભҠ͢Δɻϵ
TIJGUKTJOGPਖ਼نදݱͱηΩϡϦςΟόοΫτϥοΫͷྫ ਖ਼نදݱͷཧͱ࣮‣ ҎԼͷ /'" ਖ਼نදݱBCͱՁʹೖྗBDCΛ༩͑Δɻ‣ ೖྗதͷࠓ͍ͯ͠ΔจࣈBDC‣ ࣍ͷঢ়ଶભҠˠ ʹΑΔભҠϵ
TIJGUKTJOGPਖ਼نදݱͱηΩϡϦςΟόοΫτϥοΫͷྫ ਖ਼نදݱͷཧͱ࣮‣ ҎԼͷ /'" ਖ਼نදݱBCͱՁʹೖྗBDCΛ༩͑Δɻ‣ ೖྗதͷࠓ͍ͯ͠ΔจࣈBDC‣ ࣍ͷঢ়ଶભҠˠ ભҠϵϵ
TIJGUKTJOGPਖ਼نදݱͱηΩϡϦςΟόοΫτϥοΫͷྫ ਖ਼نදݱͷཧͱ࣮‣ ҎԼͷ /'" ਖ਼نදݱBCͱՁʹೖྗBDCΛ༩͑Δɻ‣ ೖྗதͷࠓ͍ͯ͠ΔจࣈBDC‣ ࣍ͷঢ়ଶભҠˠ CʹΑΔભҠϵ
TIJGUKTJOGPਖ਼نදݱͱηΩϡϦςΟόοΫτϥοΫͷྫ ਖ਼نදݱͷཧͱ࣮‣ ҎԼͷ /'" ਖ਼نදݱBCͱՁʹೖྗBDCΛ༩͑Δɻ‣ ೖྗதͷࠓ͍ͯ͠ΔจࣈBDC‣ ೖྗΛશͯಡΈ͖͓ͬͯΓɺ͔ͭऴঢ়ଶ͕डཧঢ়ଶͳͷͰɺจࣈྻϚονʹޭͨ͜͠ͱ͕Θ͔Δɻϵ
ਖ਼نදݱͱ੬ऑੑ
TIJGUKTJOGPਖ਼نදݱͱηΩϡϦςΟηΩϡϦςΟత؍ਖ਼نදݱͱ੬ऑੑ‣ ਖ਼نදݱͷ؍ਖ਼֬͞ͱύϑΥʔϚϯε‣ ਖ਼֬ͦ͞ͷਖ਼نදݱॴͷݕࡧΛ࣮ݱ͢ΔͷʹΔͷ͔ɻ‣ จࣈྻT͕KQHͰऴΘΔจࣈྻ͔Ͳ͏͔Λௐ͍ͨͱ͖ʹɺSFNBUDI SaKQH Tͷ݁ՌΛར༻͢Δͷద͔Ͳ͏͔ߟ͑Αɻ‣ ͜ΕͰTͱͯ͠IPHFKQHIUNMͷจࣈྻڐ༰͞Εͯ͠·͏ɻ‣ ਖ਼نදݱʹͨ͘͞Μͷམͱ͕݀͠ʜࢀߟBUUBDLFSDBOSFHFYQTFDVSJUZDIFBUTIFFUIUUQTHJUIVCDPNBUUBDLFSDBOSFHFYQTFDVSJUZDIFBUTIFFU‣ ύϑΥʔϚϯεͦͷਖ਼نදݱʹ͔͔ΔϦιʔεݱ࣮త͔ɻ‣ ਖ਼نදݱͷධՁʹ͔͔ΔϦιʔε͕ലେʹͳΔ͜ͱ͋Δ͔ɻ
TIJGUKTJOGPਖ਼نදݱͱηΩϡϦςΟʮ͋Εɺݕࡧ͕ऴΘΒͳ͍ʜʯਖ਼نදݱͱ੬ऑੑ‣ ؍্ड़ͷ1ZUIPOεΫϦϓτͷධՁݱ࣮తͳ࣌ؒͰऴΘΒͳ͍ɻ‣ ཧ༝େྔͷόοΫτϥοΫ͕ൃੜ͢Δ͜ͱɻ‣ 1ZUIPOͷSF/'"ϕʔεͷΤϯδϯͰ͋ΓɺભҠઌͷঢ়ଶ͕Ұҙʹఆ·Βͳ͍߹ʹόοΫτϥοΫΛߦ͏ɻ‣ ͷΑ͏ͳωετͨ͠ྔԽࢠ͕ਖ਼نදݱதʹؚ·Ε͍ͯΔ͜ͱʹΑΓɺBBBBBBதͷBͷݸΛ ͱͨ࣌͠ʹɺ ճఔͷόοΫτϥοΫ͕ىͬͯ͜͠·͏ɻn O(2n)import re; re.match(r'^(.*)*a$','aaaaaaaaaaaaaaaaaaaaaaaaaaaaa!')
TIJGUKTJOGPਖ਼نදݱͱηΩϡϦςΟ? BʹରԠ͢Δ /'"ਖ਼نදݱͱ੬ऑੑϵ‣ ঢ়ଶͱ ঢ়ଶͱͰͦΕͧΕϧʔϓ͕Ͱ͖͍ͯΔɻ‣ ਖ਼نදݱதͰ ʹ͋ͨΔ෦ɻ‣ ଆͷঢ়ଶ ͷϧʔϓͰೖྗΛԿจࣈফඅ͢Δ͔͕ࣗ༝Ͱ͋Γɺ͔ͭ ͷϧʔϓࣗମ ͷϧʔϓͰ܁Γฦ͞ΕΔʜ
TIJGUKTJOGPਖ਼نදݱͱηΩϡϦςΟ3F%P4 3FHVMBSFYQSFTTJPO%FOJBMPG4FSWJDFਖ਼نදݱͱ੬ऑੑ‣ 3F%P4 3FHVMBSFYQSFTTJPO%FOJBMPG4FSWJDF‣ ੬ऑͳਖ਼نදݱʹΑΔจࣈྻૢ࡞͕ඇৗʹ͍࣌ؒɾେ͖͍ۭؒΛར༻͢Δ͜ͱΛ༻͍ͨ%P4 %FOJBMPG4FSWJDF߈ܸͷ͜ͱɻ‣ ੬ऑͳਖ਼نදݱʜ όοΫτϥοΩϯάࣜΤϯδϯ্Ͱ͋ΔจࣈྻΛ༩͑ͨ࣌ʹɺͦͷ͞ʹؔ͠ඇઢܗ࣌ؒΛཁ͢Δਖ਼نදݱͷ͜ͱɻ‣ ੬ऑͳਖ਼نදݱͱͯ͠ҎԼͷύλʔϯ͕ఆͰ͖Δɻ‣ ։ൃऀ͕༻ҙͨ͠ਖ਼نදݱ‣ ഽײ֮ͱͯ͠ใࠂ͞Ε͍ͯΔ3F%P4੬ऑੑͷେͪ͜ΒͷλΠϓ‣ Ϣʔβʔೖྗ͔Βߏ͞Εͨਖ਼نදݱ‣ JF3FHVMBS&YQSFTTJPO*OKFDUJPO 3FHFYQ*OKFDUJPOʹΑΔͷ
TIJGUKTJOGPਖ਼نදݱͱηΩϡϦςΟ3F%P4߈ܸͷݱ࣮ਖ਼نදݱͱ੬ऑੑ‣ ੈͷதʹग़ճ͍ͬͯΔϥΠϒϥϦɾιϑτΣΞதͷ3F%P4੬ऑੑ͠͠ใࠂ͞Ε͍ͯΔɻ‣ ࢀߟ$"4UBJDVBOE.1SBEFM l'SFF[JOHUIF8FC"4UVEZPG3F%P47VMOFSBCJMJUJFTJO+BWB4DSJQUCBTFE8FC4FSWFST zJOUI64&/*94FDVSJUZ4ZNQPTJVN 64&/*94FDVSJUZ QQr‣ ࢀߟ+$%BWJT $"$PHIMBO '4FSWBOU BOE%-FF l5IF*NQBDUPG3FHVMBS&YQSFTTJPO%FOJBMPG4FSWJDF3F%P4JO1SBDUJDF"O&NQJSJDBM4UVEZBUUIF&DPTZTUFN4DBMF zJO1SPDFFEJOHTPGUIFUI"$.+PJOU.FFUJOHPO&VSPQFBO4PGUXBSF&OHJOFFSJOH$POGFSFODFBOE4ZNQPTJVNPOUIF'PVOEBUJPOTPG4PGUXBSF&OHJOFFSJOH QQr‣ /PEFKTͷϥΠϒϥϦʹ͓͚Δ3F%P4੬ऑੑΑ͘ใࠂ͞Ε͍ͯΔ͕ɺͦͷTJOHMFUISFBEੑΛؑΈΔͱɺ͜Εେɻ‣ ࢀߟ3F%P4WVMOFSBCJMJUJFTJOOQNTQJLFTCZBOE944DPOUJOVFTUPHSPXCZTOZLIUUQTTOZLJPCMPHSFEPTWVMOFSBCJMJUJFTJOOQNTQJLFTCZBOEYTTDPOUJOVFTUPHSPX
TIJGUKTJOGPਖ਼نදݱͱηΩϡϦςΟରࡦਖ਼نදݱͱ੬ऑੑ‣ ਖ਼نදݱͷධՁʹ͔͚ͯΑ͍ϦιʔεΛ੍ݶ͢Δɻ‣ /&5Ͱඪ४ͰλΠϜΞτػೳ͕ఏڙ͞Ε͍ͯΔɻIUUQTEPDTNJDSPTPGUDPNFOVTEPUOFUBQJTZTUFNUFYUSFHVMBSFYQSFTTJPOTSFHFYNBUDIUJNFPVU WJFXOFUGSBNFXPSL‣ 1ZUIPOλΠϜΞτػೳ͖ͷϞδϡʔϧଘࡏ͍ͯ͠ΔɻIUUQTQZQJPSHQSPKFDUSFHFY‣ όοΫτϥοΫΛ͠ͳ͍λΠϓͷΤϯδϯΛར༻͢Δɻ‣ ྫ3&IUUQTHJUIVCDPNHPPHMFSF‣ ΞϯνύλϯΛආ͚Δɻ‣ ྫྔԽࢠͷωετ
TIJGUKTJOGPਖ਼نදݱͱηΩϡϦςΟ#MJOE3FHFY*OKFDUJPOਖ਼نදݱͱ੬ऑੑ‣ ҎԼͷ݅ԼͰɺจࣈྻTΛϦʔΫ͢Δख๏͋Δ͔ɻ‣ ߈ܸऀҙͷਖ਼نදݱͰ͋ΔจࣈྻT্ΛݕࡧͰ͖Δɻ‣ ͜ͷਖ਼نදݱͷධՁʹλΠϜΞτ Uඵ͕՝͞Ε͓ͯΓɺ͔ͭόοΫτϥοΩϯάࣜͷΤϯδϯ͕ར༻͞Ε͍ͯΔɻ‣ ߈ܸྫ#MJOE3FHFY*OKFDUJPO"UUBDL‣ ԾఆU͕ेʹେ͖͍ɻ‣ ख๏ʮจࣈྻT͕͋ΔจࣈྻY͔Β࢝·Δͱ͖ʹͦͷධՁʹUඵΛϑϧʹফඅ͠ 3F%P4߈ܸΛߦ͍ɺͦΕҎ֎ͷ࣌ʹͪʹධՁ͕ऴྃ͢ΔʯΑ͏ͳਖ਼نදݱΛߏ͠ɺݕࡧΛ܁Γฦ͢ɻ‣ ࢀߟ"3PVHI*EFBPG#MJOE3FHVMBS&YQSFTTJPO*OKFDUJPO"UUBDLIUUQTEJBSZTIJGUKTJOGPCMJOESFHVMBSFYQSFTTJPOJOKFDUJPO
࠷ޙʹ
TIJGUKTJOGPਖ਼نදݱͱηΩϡϦςΟ࠷ޙʹਖ਼نදݱͱηΩϡϦςΟ‣ ࠓҎԼͷʹ͍ͭͯͨ͠ɻ‣ ֶ෦Ͱ͠͠औΓѻΘΕΔਖ਼نදݱʹ·ͭΘΔ‣ ͔ͦ͜Βࣗવʹ༠ಋ͞ΕΔηΩϡϦςΟ্ͷ‣ ϝοηʔδ‣ ֶ෦ͰऔΓѻΘΕΔجૅࣝͨͪ FH04 άϥϑཧ ܗࣜݴޠཧ ҉߸ ɺҊ֎ વ ࠓͷใࣾձΛࢧ͍͑ͯΔɻ‣ ·ͨͦͷΑ͏ͳجૅࣝͨͪΛਖ਼࣋ͭ͘͜͠ͱɺ҆৺ɾ҆શͳϓϩάϥϜΛॻ͘͜ͱηΩϡϦςΟϦεΫͷධՁʹ׆͖ͯ͘Δɻ‣ ͦͯ͠ηΩϡϦςΟɾΩϟϯϓجૅࣝΛಘΔ׆͔͢ͷʹ࠷దͳɻͥͻηΩϡϦςΟɾΩϟϯϓʹ͝ԠืΛ