No history yet

Introduction to Theoretical Computer Science

What Can Computers Do?

Before we write a single line of code, a deeper question exists: what problems are even possible for computers to solve? And for the solvable ones, what does it cost in time and memory?

This is the world of theoretical computer science. It's less about building specific apps and more about understanding the fundamental rules and limits of computation itself. Think of it as the physics that governs the digital universe. It explores the 'what' and 'why' before programmers tackle the 'how'.

Theoretical computer science is the study of what can be computed, how efficiently it can be done, and what the ultimate limits of computation are.

It provides the mathematical backbone for all of computer science, from designing efficient algorithms to securing data on the internet. It helps us answer big questions, like whether a problem is solvable at all or if there's a fundamentally better way to approach it.

Pioneers of Computation

The roots of modern computing stretch back to the 1930s, a time before physical computers existed. Mathematicians and logicians were grappling with the very definition of 'computation'.

Alan Turing, a brilliant British mathematician, was a central figure. He imagined an abstract machine that could perform any conceivable calculation, provided it could be broken down into simple steps. This concept, now known as a Turing machine, became the bedrock of computational theory. It's a simple model: a tape, a head that reads and writes symbols, and a set of rules.

Lesson image

Turing's work wasn't just a thought experiment. He proved that there are problems his machine could never solve, a groundbreaking idea known as uncomputability. The most famous example is the Halting Problem: determining whether an arbitrary computer program will finish running or continue forever.

At the same time, Alonzo Church, an American logician, developed a different formal system called the lambda calculus. It turned out that Church's system and Turing's machines were equivalent in power—they could solve the exact same set of problems. This powerful idea, that different models of computation can be equivalent, is known as the Church-Turing thesis.

Models of Computation

A Turing machine is the most powerful model of computation we know, but it's not the only one. Simpler models exist that are useful for specific, limited tasks. These models form a hierarchy, each with different capabilities.

Imagine you need to verify if an email address has a valid format (like name@example.com). You don't need a supercomputer for that. A much simpler model can do the job.

\n\x3C!-- This file was generated by dvisvgm 2.11.1 -->\n\x3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='547.254276pt' height='388.978393pt' viewBox='330.036587 261.231021 547.254276 388.978393'>\n\x3Cdefs>\n\x3Cpath id='g0-67' d='M12.894365-11.568776C12.894365-11.964731 12.894365-12.016378 12.515626-12.016378L11.224467-10.776866C10.260403-11.603207 9.106968-12.016378 7.833026-12.016378C3.718535-12.016378 1.067357-9.520139 1.067357-5.904896C1.067357-2.358515 3.632458 .206585 7.850241 .206585C10.91459 .206585 12.894365-1.893698 12.894365-3.925121C12.894365-4.217783 12.791073-4.234998 12.532841-4.234998C12.360687-4.234998 12.188532-4.234998 12.171317-4.045629C12.016378-1.428882 9.795586-.533679 8.246196-.533679C7.127193-.533679 5.612234-.843557 4.648169-1.928129C4.045629-2.582316 3.494734-3.529165 3.494734-5.904896C3.494734-7.592009 3.752966-8.848737 4.562092-9.812801C5.66388-11.103959 7.385424-11.276114 8.211765-11.276114C9.502923-11.276114 11.585992-10.553065 12.102455-7.523148C12.136886-7.368209 12.291825-7.368209 12.49841-7.368209C12.894365-7.368209 12.894365-7.40264 12.894365-7.81581V-11.568776Z'/>\n\x3Cpath id='g0-72' d='M12.653349-11.069528H14.478186V-11.809792C13.978938-11.775362 12.136886-11.775362 11.51713-11.775362S9.055322-11.775362 8.556074-11.809792V-11.069528H10.380911V-6.507437H4.751462V-11.069528H6.576298V-11.809792C6.077051-11.775362 4.234998-11.775362 3.615243-11.775362S1.153435-11.775362 .654187-11.809792V-11.069528H2.479023V-.740264H.654187V0C1.153435-.034431 2.995487-.034431 3.615243-.034431S6.077051-.034431 6.576298 0V-.740264H4.751462V-5.767173H10.380911V-.740264H8.556074V0C9.055322-.034431 10.897374-.034431 11.51713-.034431S13.978938-.034431 14.478186 0V-.740264H12.653349V-11.069528Z'/>\n\x3Cpath id='g0-77' d='M9.17583-2.186361L5.044124-11.448268C4.889185-11.809792 4.734246-11.809792 4.372722-11.809792H.705833V-11.069528H2.53067V-1.256727C2.53067-.877987 2.513454-.860772 2.065853-.79191C1.755975-.757479 1.411666-.740264 1.101788-.740264H.705833V0C1.101788-.034431 2.444593-.034431 2.926625-.034431S4.768677-.034431 5.164632 0V-.740264H4.768677C4.30386-.740264 4.269429-.740264 3.856259-.79191C3.357011-.860772 3.339796-.877987 3.339796-1.256727V-10.862943H3.357011L8.039611-.361524C8.125688-.172154 8.228981 0 8.521643 0S8.917598-.172154 9.003676-.361524L13.772353-11.069528H13.789568V-.740264H11.964731V0C12.429548-.034431 14.219954-.034431 14.805279-.034431S17.18101-.034431 17.645827 0V-.740264H15.82099V-11.069528H17.645827V-11.809792H13.978938C13.617414-11.809792 13.462475-11.809792 13.307536-11.448268L9.17583-2.186361Z'/>\n\x3Cpath id='g0-97' d='M7.919103-5.147417C7.919103-6.731237 6.662376-7.798595 4.234998-7.798595C3.270934-7.798595 1.239512-7.712518 1.239512-6.26642C1.239512-5.543372 1.790406-5.233494 2.255223-5.233494C2.771686-5.233494 3.270934-5.595018 3.270934-6.249205C3.270934-6.576298 3.150426-6.886176 2.857763-7.075546C3.425873-7.230485 3.839043-7.230485 4.166137-7.230485C5.336787-7.230485 6.04262-6.576298 6.04262-5.164632V-4.476015C3.32258-4.476015 .585325-3.718535 .585325-1.807621C.585325-.241016 2.582316 .103293 3.770182 .103293C5.09577 .103293 5.939327-.619756 6.283636-1.377235C6.283636-.740264 6.283636 0 8.022395 0H8.900383C9.261907 0 9.399631 0 9.399631-.37874C9.399631-.740264 9.244692-.740264 9.003676-.740264C7.919103-.757479 7.919103-1.032926 7.919103-1.428882V-5.147417ZM6.04262-2.392946C6.04262-.774695 4.596523-.464817 4.045629-.464817C3.202072-.464817 2.496239-1.032926 2.496239-1.824837C2.496239-3.391442 4.355507-3.925121 6.04262-4.011198V-2.392946Z'/>\n\x3Cpath id='g0-99' d='M8.056826-2.014207C8.056826-2.220792 7.867456-2.220792 7.695302-2.220792C7.419855-2.220792 7.40264-2.203576 7.316562-1.996991C7.196054-1.669898 6.731237-.516463 5.147417-.516463C2.72004-.516463 2.72004-3.13321 2.72004-3.907905C2.72004-4.923616 2.737255-7.178839 4.992478-7.178839C5.112986-7.178839 6.128697-7.144408 6.128697-7.058331C6.128697-7.041115 6.111482-7.0239 6.077051-7.006684C6.025404-6.955038 5.801604-6.696807 5.801604-6.26642C5.801604-5.543372 6.386929-5.250709 6.817315-5.250709C7.178839-5.250709 7.833026-5.47451 7.833026-6.283636C7.833026-7.695302 5.85325-7.798595 4.923616-7.798595C1.859268-7.798595 .654187-5.801604 .654187-3.821828C.654187-1.480528 2.289654 .103293 4.820323 .103293C7.523148 .103293 8.056826-1.893698 8.056826-2.014207Z'/>\n\x3Cpath id='g0-100' d='M5.973758-11.809792V-11.069528C7.041115-11.069528 7.161623-11.069528 7.161623-10.398126V-6.920607C6.782884-7.247701 6.025404-7.746948 4.837539-7.746948C2.392946-7.746948 .654187-6.23199 .654187-3.821828C.654187-1.36002 2.358515 .103293 4.648169 .103293C5.595018 .103293 6.404144-.223801 7.075546-.79191V.103293L10.139895 0V-.740264C9.072537-.740264 8.952029-.740264 8.952029-1.411666V-11.947516L5.973758-11.809792ZM7.075546-1.73876C6.352498-.688618 5.47451-.464817 4.854754-.464817C2.72004-.464817 2.72004-2.651178 2.72004-3.787397C2.72004-4.596523 2.72004-5.457295 3.098779-6.111482C3.632458-7.075546 4.648169-7.178839 5.044124-7.178839C5.749957-7.178839 6.507437-6.868961 7.075546-6.111482V-1.73876Z'/>\n\x3Cpath id='g0-101' d='M7.781379-3.804612C8.177334-3.804612 8.280627-3.804612 8.280627-4.234998C8.280627-4.751462 8.160119-6.04262 7.368209-6.851745C6.64516-7.574794 5.681095-7.798595 4.6826-7.798595C1.996991-7.798595 .533679-6.04262 .533679-3.873474C.533679-1.463312 2.306869 .103293 4.906401 .103293S8.280627-1.721544 8.280627-2.014207C8.280627-2.272438 8.022395-2.272438 7.919103-2.272438C7.643656-2.272438 7.62644-2.220792 7.523148-1.996991C7.075546-.877987 5.939327-.516463 5.112986-.516463C2.616747-.516463 2.599532-2.840548 2.599532-3.804612H7.781379ZM2.599532-4.30386C2.633962-5.009693 2.651178-5.681095 3.012702-6.300851C3.339796-6.851745 3.942336-7.230485 4.6826-7.230485C6.524652-7.230485 6.679591-5.164632 6.696807-4.30386H2.599532Z'/>\n\x3Cpath id='g0-102' d='M3.735751-6.903392H5.698311V-7.643656H3.649673V-9.416846C3.649673-11.207252 4.785893-11.482699 5.354002-11.482699C5.543372-11.482699 5.577803-11.465484 5.681095-11.431053C5.422864-11.258898 5.267925-10.966236 5.267925-10.604712C5.267925-9.916094 5.818819-9.606216 6.26642-9.606216C6.64516-9.606216 7.264916-9.864448 7.264916-10.621927C7.264916-11.32776 6.64516-12.050809 5.422864-12.050809C3.856259-12.050809 1.945345-11.396622 1.945345-9.399631V-7.643656H.671402V-6.903392H1.945345V-.740264H.757479V0C1.153435-.034431 2.444593-.034431 2.926625-.034431C3.425873-.034431 4.820323-.034431 5.233494 0V-.740264H3.735751V-6.903392Z'/>\n\x3Cpath id='g0-104' d='M9.141399-5.267925C9.141399-6.903392 8.435566-7.746948 6.541868-7.746948C4.803108-7.746948 3.959551-6.524652 3.718535-6.008189H3.70132V-11.947516L.723049-11.809792V-11.069528C1.790406-11.069528 1.910914-11.069528 1.910914-10.398126V-.740264H.723049V0C1.119004-.034431 2.358515-.034431 2.840548-.034431S4.579307-.034431 4.975262 0V-.740264H3.787397V-4.407153C3.787397-6.26642 5.164632-7.178839 6.26642-7.178839C6.903392-7.178839 7.264916-6.765668 7.264916-5.457295V-.740264H6.077051V0C6.473006-.034431 7.712518-.034431 8.19455-.034431S9.933309-.034431 10.329265 0V-.740264H9.141399V-5.267925Z'/>\n\x3Cpath id='g0-105' d='M3.839043-10.72522C3.839043-11.431053 3.270934-11.964731 2.599532-11.964731C1.893698-11.964731 1.36002-11.379406 1.36002-10.72522S1.893698-9.485708 2.599532-9.485708C3.270934-9.485708 3.839043-10.019387 3.839043-10.72522ZM.809126-7.609225V-6.868961C1.824837-6.868961 1.945345-6.868961 1.945345-6.197559V-.740264H.757479V0C1.153435-.034431 2.3413-.034431 2.806117-.034431C3.288149-.034431 4.389937-.034431 4.803108 0V-.740264H3.735751V-7.746948L.809126-7.609225Z'/>\n\x3Cpath id='g0-108' d='M3.735751-11.947516L.757479-11.809792V-11.069528C1.824837-11.069528 1.945345-11.069528 1.945345-10.398126V-.740264H.757479V0C1.153435-.034431 2.375731-.034431 2.840548-.034431S4.527661-.034431 4.923616 0V-.740264H3.735751V-11.947516Z'/>\n\x3Cpath id='g0-109' d='M14.529832-5.267925C14.529832-6.851745 13.85843-7.746948 11.930301-7.746948C10.191541-7.746948 9.382415-6.576298 9.106968-6.025404C8.831521-7.488717 7.660871-7.746948 6.559083-7.746948C4.906401-7.746948 4.011198-6.679591 3.649673-5.85325H3.632458V-7.746948L.723049-7.609225V-6.868961C1.790406-6.868961 1.910914-6.868961 1.910914-6.197559V-.740264H.723049V0C1.119004-.034431 2.358515-.034431 2.840548-.034431S4.579307-.034431 4.975262 0V-.740264H3.787397V-4.407153C3.787397-6.283636 5.181848-7.178839 6.26642-7.178839C6.903392-7.178839 7.282131-6.800099 7.282131-5.457295V-.740264H6.094266V0C6.490221-.034431 7.729733-.034431 8.211765-.034431S9.950525-.034431 10.34648 0V-.740264H9.158615V-4.407153C9.158615-6.283636 10.553065-7.178839 11.637638-7.178839C12.274609-7.178839 12.653349-6.800099 12.653349-5.457295V-.740264H11.465484V0C11.861439-.034431 13.100951-.034431 13.582983-.034431S15.321742-.034431 15.717698 0V-.740264H14.529832V-5.267925Z'/>\n\x3Cpath id='g0-110' d='M9.141399-5.267925C9.141399-6.903392 8.435566-7.746948 6.541868-7.746948C5.302356-7.746948 4.234998-7.144408 3.649673-5.85325H3.632458V-7.746948L.723049-7.609225V-6.868961C1.790406-6.868961 1.910914-6.868961 1.910914-6.197559V-.740264H.723049V0C1.119004-.034431 2.358515-.034431 2.840548-.034431S4.579307-.034431 4.975262 0V-.740264H3.787397V-4.407153C3.787397-6.26642 5.164632-7.178839 6.26642-7.178839C6.903392-7.178839 7.264916-6.765668 7.264916-5.457295V-.740264H6.077051V0C6.473006-.034431 7.712518-.034431 8.19455-.034431S9.933309-.034431 10.329265 0V-.740264H9.141399V-5.267925Z'/>\n\x3Cpath id='g0-111' d='M9.124184-3.770182C9.124184-6.094266 7.540363-7.798595 4.837539-7.798595C2.031422-7.798595 .533679-6.008189 .533679-3.770182C.533679-1.514959 2.117499 .103293 4.820323 .103293C7.62644 .103293 9.124184-1.601036 9.124184-3.770182ZM4.837539-.516463C2.599532-.516463 2.599532-2.53067 2.599532-3.942336C2.599532-4.751462 2.599532-5.612234 2.926625-6.23199C3.305365-6.920607 4.080059-7.230485 4.820323-7.230485C5.801604-7.230485 6.421359-6.765668 6.714022-6.283636C7.058331-5.66388 7.058331-4.768677 7.058331-3.942336C7.058331-2.513454 7.058331-.516463 4.837539-.516463Z'/>\n\x3Cpath id='g0-112' d='M4.854754 2.599532H3.666889V-.705833C4.097275-.327093 4.854754 .103293 5.887681 .103293C8.246196 .103293 10.088248-1.325589 10.088248-3.839043C10.088248-6.214774 8.487212-7.746948 6.163128-7.746948C5.147417-7.746948 4.269429-7.40264 3.580812-6.851745V-7.746948L.60254-7.609225V-6.868961C1.669898-6.868961 1.790406-6.868961 1.790406-6.197559V2.599532H.60254V3.339796C.998496 3.305365 2.238007 3.305365 2.72004 3.305365S4.458799 3.305365 4.854754 3.339796V2.599532ZM3.666889-6.025404C4.30386-6.851745 5.216279-7.127193 5.887681-7.127193C7.006684-7.127193 8.022395-6.111482 8.022395-3.839043C8.022395-1.342804 6.782884-.464817 5.681095-.464817C4.940832-.464817 4.200568-.843557 3.666889-1.652682V-6.025404Z'/>\n\x3Cpath id='g0-114' d='M3.580812-3.873474C3.580812-4.441584 3.70132-7.178839 5.715526-7.178839C5.47451-6.989469 5.354002-6.696807 5.354002-6.386929C5.354002-5.681095 5.922112-5.388433 6.352498-5.388433S7.350993-5.681095 7.350993-6.386929C7.350993-7.264916 6.45579-7.746948 5.629449-7.746948C4.269429-7.746948 3.684104-6.559083 3.443088-5.836034H3.425873V-7.746948L.60254-7.609225V-6.868961C1.669898-6.868961 1.790406-6.868961 1.790406-6.197559V-.740264H.60254V0C.998496-.034431 2.289654-.034431 2.771686-.034431C3.270934-.034431 4.665384-.034431 5.078555 0V-.740264H3.580812V-3.873474Z'/>\n\x3Cpath id='g0-115' d='M6.490221-7.350993C6.490221-7.678087 6.490221-7.798595 6.23199-7.798595C6.128697-7.798595 6.094266-7.798595 5.836034-7.643656C5.767173-7.592009 5.577803-7.471501 5.491726-7.419855C5.009693-7.695302 4.372722-7.798595 3.752966-7.798595C3.236503-7.798595 .654187-7.798595 .654187-5.560587C.654187-3.752966 2.788901-3.374226 3.32258-3.288149C3.787397-3.202072 4.355507-3.098779 4.424368-3.098779C5.112986-2.94384 5.801604-2.513454 5.801604-1.790406C5.801604-.464817 4.234998-.464817 3.873474-.464817C2.995487-.464817 1.910914-.740264 1.428882-2.410162C1.325589-2.754471 1.308374-2.771686 1.015711-2.771686C.654187-2.771686 .654187-2.72004 .654187-2.324085V-.344309C.654187-.017215 .654187 .103293 .912418 .103293C1.032926 .103293 1.067357 .103293 1.411666-.172154L1.859268-.499248C2.633962 .103293 3.563596 .103293 3.873474 .103293C4.820323 .103293 6.972254-.103293 6.972254-2.392946C6.972254-3.219287 6.524652-3.787397 6.180343-4.097275C5.47451-4.6826 4.889185-4.785893 3.959551-4.958047C2.857763-5.147417 1.824837-5.336787 1.824837-6.163128C1.824837-7.282131 3.357011-7.282131 3.718535-7.282131C5.629449-7.282131 5.732742-6.077051 5.767173-5.646665C5.784388-5.422864 5.922112-5.422864 6.128697-5.422864C6.490221-5.422864 6.490221-5.47451 6.490221-5.870465V-7.350993Z'/>\n\x3Cpath id='g0-116' d='M3.632458-6.903392H6.111482V-7.643656H3.632458V-10.931805H2.90941C2.892194-9.227476 2.065853-7.523148 .361524-7.471501V-6.903392H1.755975V-2.117499C1.755975-.292662 3.167641 .103293 4.407153 .103293C5.681095 .103293 6.438575-.860772 6.438575-2.134715V-3.047133H5.715526V-2.15193C5.715526-1.015711 5.199063-.516463 4.665384-.516463C3.632458-.516463 3.632458-1.669898 3.632458-2.065853V-6.903392Z'/>\n\x3Cpath id='g0-117' d='M6.077051-7.609225V-6.868961C7.144408-6.868961 7.264916-6.868961 7.264916-6.197559V-2.823332C7.264916-1.514959 6.490221-.464817 5.147417-.464817C3.856259-.464817 3.787397-.895203 3.787397-1.842052V-7.746948L.723049-7.609225V-6.868961C1.790406-6.868961 1.910914-6.868961 1.910914-6.197559V-2.117499C1.910914-.395955 3.064348 .103293 4.906401 .103293C5.319571 .103293 6.593514 .103293 7.333778-1.291158H7.350993V.103293L10.329265 0V-.740264C9.261907-.740264 9.141399-.740264 9.141399-1.411666V-7.746948L6.077051-7.609225Z'/>\n\x3Cpath id='g0-121' d='M8.521643-6.524652C8.624936-6.765668 8.693798-6.903392 9.795586-6.903392V-7.643656C9.210261-7.609225 9.141399-7.609225 8.435566-7.609225C7.970749-7.609225 7.936318-7.609225 6.955038-7.643656V-6.903392C6.972254-6.903392 7.781379-6.903392 7.781379-6.679591C7.781379-6.627945 7.729733-6.524652 7.712518-6.473006L5.698311-2.134715L3.494734-6.903392H4.441584V-7.643656C4.028413-7.609225 2.857763-7.609225 2.375731-7.609225C1.876483-7.609225 .860772-7.609225 .413171-7.643656V-6.903392H1.514959L4.699815 0C4.613738 .206585 4.372722 .705833 4.286645 .912418C3.925121 1.687113 3.374226 2.874979 2.169146 2.874979C2.100284 2.874979 1.893698 2.874979 1.704329 2.771686C1.73876 2.754471 2.255223 2.547885 2.255223 1.893698C2.255223 1.325589 1.842052 .964065 1.325589 .964065C.79191 .964065 .37874 1.325589 .37874 1.910914C.37874 2.72004 1.136219 3.443088 2.169146 3.443088C3.580812 3.443088 4.510446 2.169146 4.854754 1.411666L8.521643-6.524652Z'/>\n\x3Cpath id='g1-40' d='M2.699875 2.391034C2.699875 2.371108 2.699875 2.351183 2.630137 2.251557C2.092154 1.43462 2.012453 .587796 2.012453-.109589C2.012453-1.464508 2.600249-5.160648 4.991283-7.193026C5.13076-7.332503 5.140722-7.342466 5.140722-7.372354C5.140722-7.442092 5.100872-7.47198 5.041096-7.47198C4.931507-7.47198 3.785803-6.665006 2.919054-5.250311C1.823163-3.447073 1.514321-1.534247 1.514321-.468244C1.514321 .119552 1.603985 .747198 1.783313 1.24533C2.032379 1.912827 2.460772 2.49066 2.600249 2.49066C2.660025 2.49066 2.699875 2.450809 2.699875 2.391034Z'/>\n\x3Cpath id='g1-41' d='M3.805729-4.513076C3.805729-5.100872 3.716065-5.728518 3.536737-6.22665C3.287671-6.894147 2.859278-7.47198 2.719801-7.47198C2.660025-7.47198 2.620174-7.43213 2.620174-7.372354C2.620174-7.352428 2.620174-7.332503 2.689913-7.232877C3.227895-6.41594 3.307597-5.569116 3.307597-4.871731C3.307597-3.516812 2.719801 .179328 .328767 2.211706C.18929 2.351183 .179328 2.361146 .179328 2.391034C.179328 2.460772 .219178 2.49066 .278954 2.49066C.388543 2.49066 1.534247 1.683686 2.400996 .268991C3.496887-1.534247 3.805729-3.447073 3.805729-4.513076Z'/>\n\x3Cpath id='g1-44' d='M1.972603-.14944C1.823163 .617684 1.325031 1.255293 .856787 1.653798C.737235 1.77335 .727273 1.783313 .727273 1.823163C.727273 1.853051 .757161 1.92279 .826899 1.92279C1.006227 1.92279 2.231631 .71731 2.231631-.468244C2.231631-.797011 2.092154-1.05604 1.77335-1.05604C1.374844-1.05604 1.125778-.707347 1.125778-.418431C1.125778-.099626 1.354919 0 1.564134 0C1.763387 0 1.92279-.109589 1.972603-.14944Z'/>\n\x3Cpath id='g1-46' d='M2.211706-.627646C2.211706-.846824 2.052304-1.05604 1.77335-1.05604C1.454545-1.05604 1.125778-.757161 1.125778-.428394C1.125778-.169365 1.305106 0 1.564134 0C1.902864 0 2.211706-.328767 2.211706-.627646Z'/>\n\x3Cpath id='g1-97' d='M3.476961-.587796C3.58655-.099626 3.955168 .109589 4.303861 .109589C4.672478 .109589 4.881694-.139477 5.031133-.448319C5.210461-.826899 5.330012-1.404732 5.330012-1.424658C5.330012-1.524284 5.250311-1.524284 5.180573-1.524284C5.061021-1.524284 5.051059-1.514321 4.991283-1.295143C4.851806-.737235 4.662516-.109589 4.323786-.109589C4.064757-.109589 4.064757-.37858 4.064757-.518057C4.064757-.587796 4.064757-.747198 4.134496-1.026152L4.811955-3.73599C4.851806-3.875467 4.851806-3.895392 4.851806-3.945205C4.851806-4.154421 4.682441-4.204234 4.582814-4.204234C4.26401-4.204234 4.194271-3.865504 4.184309-3.815691C3.995019-4.244085 3.676214-4.403487 3.35741-4.403487C2.251557-4.403487 1.075965-2.889166 1.075965-1.43462C1.075965-.587796 1.534247 .109589 2.281445 .109589C2.6401 .109589 3.078456-.099626 3.476961-.587796ZM4.014944-3.118306L3.5467-1.235367C3.466999-.916563 2.849315-.109589 2.30137-.109589C1.833126-.109589 1.753425-.697385 1.753425-.996264C1.753425-1.494396 2.062267-2.660025 2.241594-3.078456C2.49066-3.686177 2.948941-4.184309 3.35741-4.184309C3.795766-4.184309 4.044832-3.666252 4.044832-3.247821C4.044832-3.227895 4.034869-3.178082 4.014944-3.118306Z'/>\n\x3Cpath id='g1-99' d='M4.333748-3.755915C3.835616-3.696139 3.835616-3.287671 3.835616-3.267746C3.835616-3.108344 3.945205-2.948941 4.174346-2.948941C4.443337-2.948941 4.682441-3.16812 4.682441-3.5467C4.682441-4.034869 4.254047-4.403487 3.616438-4.403487C2.381071-4.403487 1.09589-2.988792 1.09589-1.534247C1.09589-.547945 1.683686 .109589 2.560399 .109589C3.835616 .109589 4.662516-.886675 4.662516-1.036115C4.662516-1.085928 4.582814-1.195517 4.503113-1.195517C4.463263-1.195517 4.4533-1.185554 4.373599-1.085928C3.636364-.14944 2.749689-.109589 2.580324-.109589C2.042341-.109589 1.793275-.557908 1.793275-1.135741C1.793275-1.663761 2.062267-2.709838 2.321295-3.188045C2.67995-3.835616 3.178082-4.184309 3.626401-4.184309C3.73599-4.184309 4.184309-4.164384 4.333748-3.755915Z'/>\n\x3Cpath id='g1-100' d='M5.549191-6.665006C5.559153-6.694894 5.579078-6.774595 5.579078-6.794521C5.579078-6.884184 5.519303-6.914072 5.439601-6.914072C5.409714-6.914072 5.310087-6.90411 5.280199-6.894147L4.293898-6.814446C4.174346-6.804483 4.064757-6.794521 4.064757-6.60523C4.064757-6.495641 4.164384-6.495641 4.303861-6.495641C4.782067-6.495641 4.801993-6.425903 4.801993-6.326276C4.801993-6.296389 4.772105-6.166874 4.772105-6.156912L4.194271-3.825654C4.044832-4.134496 3.775841-4.403487 3.35741-4.403487C2.251557-4.403487 1.075965-2.889166 1.075965-1.43462C1.075965-.587796 1.534247 .109589 2.281445 .109589C2.6401 .109589 3.078456-.099626 3.476961-.587796C3.58655-.099626 3.955168 .109589 4.303861 .109589C4.672478 .109589 4.881694-.139477 5.031133-.448319C5.210461-.826899 5.330012-1.404732 5.330012-1.424658C5.330012-1.524284 5.250311-1.524284 5.180573-1.524284C5.061021-1.524284 5.051059-1.514321 4.991283-1.295143C4.851806-.737235 4.662516-.109589 4.323786-.109589C4.064757-.109589 4.064757-.37858 4.064757-.518057C4.064757-.587796 4.064757-.737235 4.124533-.976339L5.549191-6.665006ZM3.536737-1.215442C3.457036-.9066 2.849315-.109589 2.30137-.109589C1.833126-.109589 1.753425-.697385 1.753425-.996264C1.753425-1.494396 2.062267-2.660025 2.241594-3.078456C2.49066-3.686177 2.948941-4.184309 3.35741-4.184309C3.437111-4.184309 3.666252-4.174346 3.845579-3.895392C3.945205-3.73599 4.044832-3.447073 4.044832-3.257783C4.044832-3.227895 4.034869-3.188045 4.014944-3.128269L3.536737-1.215442Z'/>\n\x3Cpath id='g1-101' d='M2.381071-2.30137C2.67995-2.30137 3.347447-2.331258 3.825654-2.520548C4.612702-2.839352 4.612702-3.486924 4.612702-3.556663C4.612702-4.014944 4.244085-4.403487 3.606476-4.403487C2.560399-4.403487 1.135741-3.39726 1.135741-1.633873C1.135741-.737235 1.613948 .109589 2.560399 .109589C3.835616 .109589 4.662516-.886675 4.662516-1.036115C4.662516-1.085928 4.582814-1.195517 4.503113-1.195517C4.463263-1.195517 4.4533-1.185554 4.373599-1.085928C3.636364-.14944 2.749689-.109589 2.580324-.109589C1.932752-.109589 1.823163-.816936 1.823163-1.205479C1.823163-1.58406 1.92279-2.032379 1.992528-2.30137H2.381071ZM2.052304-2.520548C2.480697-4.154421 3.506849-4.184309 3.606476-4.184309C4.004981-4.184309 4.234122-3.915318 4.234122-3.576588C4.234122-2.520548 2.590286-2.520548 2.261519-2.520548H2.052304Z'/>\n\x3Cpath id='g1-102' d='M2.759651-3.985056H3.576588C3.745953-3.985056 3.845579-3.985056 3.845579-4.164384C3.845579-4.293898 3.765878-4.293898 3.596513-4.293898H2.819427C2.958904-5.031133 2.988792-5.210461 3.138232-5.907846C3.217933-6.276463 3.327522-6.804483 3.686177-6.804483C3.765878-6.804483 3.975093-6.784558 4.104608-6.625156C3.805729-6.575342 3.666252-6.336239 3.666252-6.136986C3.666252-5.917808 3.845579-5.818182 4.004981-5.818182C4.254047-5.818182 4.503113-6.017435 4.503113-6.366127C4.503113-6.794521 4.094645-7.023661 3.686177-7.023661C2.709838-7.023661 2.460772-5.728518 2.391034-5.389788L2.181818-4.293898H1.524284C1.364882-4.293898 1.255293-4.293898 1.255293-4.094645C1.255293-3.985056 1.354919-3.985056 1.504359-3.985056H2.122042L1.39477-.268991C1.275218 .348692 1.175592 .757161 1.115816 .966376C1.036115 1.305106 .9066 1.823163 .547945 1.823163C.448319 1.823163 .259029 1.793275 .14944 1.643836C.448319 1.594022 .587796 1.354919 .587796 1.155666C.587796 .936488 .408468 .836862 .249066 .836862C0 .836862-.249066 1.036115-.249066 1.384807C-.249066 1.833126 .179328 2.042341 .547945 2.042341C1.58406 2.042341 1.992528-.049813 2.062267-.408468L2.759651-3.985056Z'/>\n\x3Cpath id='g1-103' d='M3.367372-.52802L3.158157 .308842C3.038605 .806974 2.978829 1.016189 2.699875 1.354919C2.30137 1.823163 1.902864 1.823163 1.753425 1.823163C1.62391 1.823163 1.315068 1.823163 1.046077 1.713574C1.24533 1.633873 1.364882 1.424658 1.364882 1.255293C1.364882 1.125778 1.275218 .936488 1.016189 .936488C.836862 .936488 .52802 1.075965 .52802 1.464508C.52802 1.863014 .896638 2.042341 1.733499 2.042341C2.779577 2.042341 3.536737 1.384807 3.726027 .627646L4.811955-3.73599C4.851806-3.88543 4.851806-3.905355 4.851806-3.945205C4.851806-4.154421 4.682441-4.204234 4.582814-4.204234C4.463263-4.204234 4.234122-4.124533 4.194271-3.835616C4.054795-4.124533 3.785803-4.403487 3.35741-4.403487C2.241594-4.403487 1.09589-2.929016 1.09589-1.524284C1.09589-.67746 1.564134 0 2.311333 0C2.819427 0 3.247821-.408468 3.367372-.52802ZM4.014944-3.128269L3.566625-1.315068C3.486924-.996264 2.879203-.219178 2.331258-.219178C1.793275-.219178 1.77335-.976339 1.77335-1.085928C1.77335-1.564134 2.072229-2.729763 2.281445-3.198007C2.530511-3.73599 2.968867-4.184309 3.35741-4.184309C3.955168-4.184309 4.044832-3.347447 4.044832-3.267746L4.014944-3.128269Z'/>\n\x3Cpath id='g1-105' d='M3.297634-1.424658C3.297634-1.524284 3.217933-1.524284 3.148194-1.524284C3.01868-1.524284 3.01868-1.504359 2.978829-1.354919C2.899128-1.066002 2.630137-.109589 2.052304-.109589C1.972603-.109589 1.833126-.119552 1.833126-.388543C1.833126-.647572 1.96264-.976339 2.092154-1.344956L2.729763-3.048568C2.82939-3.337484 2.849315-3.417186 2.849315-3.606476C2.849315-4.154421 2.470735-4.403487 2.102117-4.403487C1.165629-4.403487 .826899-2.919054 .826899-2.86924C.826899-2.769614 .926526-2.769614 .976339-2.769614C1.105853-2.769614 1.115816-2.789539 1.155666-2.929016C1.24533-3.257783 1.504359-4.184309 2.082192-4.184309C2.191781-4.184309 2.30137-4.134496 2.30137-3.905355C2.30137-3.666252 2.191781-3.377335 2.122042-3.188045L1.823163-2.361146C1.693649-2.032379 1.574097-1.703611 1.454545-1.374844C1.315068-.996264 1.275218-.886675 1.275218-.687422C1.275218-.298879 1.514321 .109589 2.032379 .109589C2.968867 .109589 3.297634-1.384807 3.297634-1.424658ZM3.247821-6.206725C3.247821-6.455791 3.048568-6.535492 2.909091-6.535492C2.699875-6.535492 2.430884-6.336239 2.430884-6.057285C2.430884-5.808219 2.630137-5.728518 2.769614-5.728518C2.968867-5.728518 3.247821-5.917808 3.247821-6.206725Z'/>\n\x3Cpath id='g1-108' d='M3.01868-6.665006C3.028643-6.694894 3.048568-6.774595 3.048568-6.794521C3.048568-6.884184 2.988792-6.914072 2.909091-6.914072C2.879203-6.914072 2.779577-6.90411 2.749689-6.894147L1.763387-6.814446C1.643836-6.804483 1.534247-6.794521 1.534247-6.60523C1.534247-6.495641 1.633873-6.495641 1.77335-6.495641C2.251557-6.495641 2.271482-6.425903 2.271482-6.326276C2.271482-6.296389 2.241594-6.166874 2.241594-6.156912L.996264-1.175592C.986301-1.135741 .936488-.936488 .936488-.787049C.936488-.259029 1.295143 .109589 1.77335 .109589C2.15193 .109589 2.351183-.159402 2.480697-.408468C2.650062-.757161 2.789539-1.39477 2.789539-1.424658C2.789539-1.524284 2.709838-1.524284 2.6401-1.524284C2.590286-1.524284 2.530511-1.524284 2.500623-1.474471L2.430884-1.225405C2.261519-.52802 2.072229-.109589 1.793275-.109589C1.534247-.109589 1.534247-.37858 1.534247-.518057C1.534247-.587796 1.534247-.737235 1.594022-.976339L3.01868-6.665006Z'/>\n\x3Cpath id='g1-109' d='M2.291407-1.743462C2.34122-1.96264 2.400996-2.171856 2.450809-2.391034C2.580324-2.879203 2.580324-2.899128 2.699875-3.108344C2.988792-3.606476 3.417186-4.184309 4.104608-4.184309C4.562889-4.184309 4.562889-3.676214 4.562889-3.526775C4.562889-3.257783 4.493151-2.968867 4.473225-2.879203L3.825654-.288917C3.805729-.229141 3.795766-.179328 3.795766-.14944C3.795766-.039851 3.875467 .109589 4.07472 .109589C4.194271 .109589 4.363636 .039851 4.433375-.14944L4.83188-1.743462C4.881694-1.96264 4.941469-2.171856 4.991283-2.391034C5.120797-2.879203 5.120797-2.899128 5.240349-3.108344C5.529265-3.606476 5.957659-4.184309 6.645081-4.184309C7.103362-4.184309 7.103362-3.676214 7.103362-3.526775C7.103362-2.909091 6.665006-1.723537 6.525529-1.325031C6.396015-.986301 6.366127-.896638 6.366127-.687422C6.366127-.249066 6.645081 .109589 7.123288 .109589C8.049813 .109589 8.388543-1.374844 8.388543-1.424658C8.388543-1.524284 8.308842-1.524284 8.239103-1.524284C8.109589-1.524284 8.109589-1.504359 8.069738-1.354919C7.990037-1.085928 7.721046-.109589 7.143213-.109589C6.933998-.109589 6.924035-.259029 6.924035-.398506C6.924035-.647572 7.023661-.9066 7.103362-1.145704C7.302615-1.673724 7.711083-2.789539 7.711083-3.367372C7.711083-4.204234 7.13325-4.403487 6.665006-4.403487C5.967621-4.403487 5.469489-3.965131 5.17061-3.526775C5.090909-4.214197 4.572852-4.403487 4.124533-4.403487C3.526775-4.403487 3.038605-4.07472 2.699875-3.616438C2.630137-4.104608 2.291407-4.403487 1.863014-4.403487C1.504359-4.403487 1.305106-4.174346 1.145704-3.875467C.956413-3.476961 .826899-2.889166 .826899-2.86924C.826899-2.769614 .926526-2.769614 .976339-2.769614C1.105853-2.769614 1.115816-2.779577 1.165629-2.998755C1.344956-3.696139 1.534247-4.184309 1.843088-4.184309C2.102117-4.184309 2.102117-3.895392 2.102117-3.785803C2.102117-3.626401 2.072229-3.437111 2.032379-3.277709L1.285181-.288917C1.265255-.229141 1.255293-.179328 1.255293-.14944C1.255293-.039851 1.334994 .109589 1.534247 .109589C1.653798 .109589 1.823163 .039851 1.892902-.14944L2.291407-1.743462Z'/>\n\x3Cpath id='g1-110' d='M2.291407-1.743462C2.34122-1.96264 2.400996-2.171856 2.450809-2.391034C2.580324-2.899128 2.580324-2.909091 2.749689-3.198007C2.889166-3.437111 3.337484-4.184309 4.094645-4.184309C4.533001-4.184309 4.552927-3.73599 4.552927-3.526775C4.552927-2.909091 4.11457-1.723537 3.975093-1.325031C3.845579-.986301 3.815691-.896638 3.815691-.687422C3.815691-.249066 4.094645 .109589 4.572852 .109589C5.499377 .109589 5.838107-1.374844 5.838107-1.424658C5.838107-1.524284 5.758406-1.524284 5.688667-1.524284C5.559153-1.524284 5.559153-1.504359 5.519303-1.354919C5.439601-1.085928 5.17061-.109589 4.592777-.109589C4.383562-.109589 4.373599-.259029 4.373599-.398506C4.373599-.647572 4.473225-.9066 4.552927-1.145704C4.752179-1.673724 5.160648-2.789539 5.160648-3.367372C5.160648-4.184309 4.612702-4.403487 4.124533-4.403487C3.307597-4.403487 2.82939-3.805729 2.699875-3.616438C2.630137-4.104608 2.291407-4.403487 1.863014-4.403487C1.504359-4.403487 1.305106-4.174346 1.145704-3.875467C.956413-3.476961 .826899-2.889166 .826899-2.86924C.826899-2.769614 .926526-2.769614 .976339-2.769614C1.105853-2.769614 1.115816-2.779577 1.165629-2.998755C1.344956-3.696139 1.534247-4.184309 1.843088-4.184309C2.102117-4.184309 2.102117-3.895392 2.102117-3.785803C2.102117-3.626401 2.072229-3.437111 2.032379-3.277709L1.285181-.288917C1.265255-.229141 1.255293-.179328 1.255293-.14944C1.255293-.039851 1.334994 .109589 1.534247 .109589C1.653798 .109589 1.823163 .039851 1.892902-.14944L2.291407-1.743462Z'/>\n\x3Cpath id='g1-111' d='M5.070984-2.769614C5.070984-3.716065 4.483188-4.403487 3.616438-4.403487C2.381071-4.403487 1.09589-2.988792 1.09589-1.534247C1.09589-.508095 1.723537 .109589 2.550436 .109589C3.785803 .109589 5.070984-1.305106 5.070984-2.769614ZM2.550436-.109589C2.161893-.109589 1.793275-.418431 1.793275-1.135741C1.793275-1.633873 2.052304-2.739726 2.371108-3.277709C2.739726-3.88543 3.217933-4.184309 3.606476-4.184309C4.094645-4.184309 4.373599-3.745953 4.373599-3.158157C4.373599-2.729763 4.154421-1.703611 3.835616-1.105853C3.5467-.557908 3.038605-.109589 2.550436-.109589Z'/>\n\x3Cpath id='g1-112' d='M.896638 1.275218C.816936 1.58406 .737235 1.613948 .348692 1.62391C.259029 1.62391 .139477 1.62391 .139477 1.8132C.139477 1.882939 .18929 1.932752 .259029 1.932752C.52802 1.932752 .816936 1.902864 1.09589 1.902864C1.414695 1.902864 1.753425 1.932752 2.062267 1.932752C2.122042 1.932752 2.251557 1.932752 2.251557 1.743462C2.251557 1.62391 2.15193 1.62391 2.012453 1.62391C1.504359 1.62391 1.504359 1.564134 1.504359 1.464508C1.504359 1.404732 1.574097 1.145704 1.613948 .986301L1.972603-.468244C2.042341-.298879 2.291407 .109589 2.809465 .109589C3.895392 .109589 5.080946-1.364882 5.080946-2.849315C5.080946-3.915318 4.483188-4.403487 3.88543-4.403487C3.39726-4.403487 2.968867-4.044832 2.67995-3.706102C2.560399-4.283935 2.11208-4.403487 1.863014-4.403487C1.504359-4.403487 1.305106-4.174346 1.145704-3.875467C.956413-3.476961 .826899-2.889166 .826899-2.86924C.826899-2.769614 .926526-2.769614 .976339-2.769614C1.105853-2.769614 1.115816-2.779577 1.165629-2.998755C1.344956-3.696139 1.534247-4.184309 1.843088-4.184309C2.102117-4.184309 2.102117-3.895392 2.102117-3.785803C2.102117-3.726027 2.102117-3.566625 2.032379-3.287671L.896638 1.275218ZM2.620174-3.058531C2.699875-3.39726 3.317559-4.184309 3.865504-4.184309C4.313823-4.184309 4.41345-3.616438 4.41345-3.297634C4.41345-2.879203 4.144458-1.693649 3.855542-1.05604C3.73599-.806974 3.307597-.109589 2.799502-.109589C2.221669-.109589 2.122042-.956413 2.122042-1.036115C2.122042-1.066002 2.132005-1.09589 2.15193-1.175592L2.620174-3.058531Z'/>\n\x3Cpath id='g1-114' d='M2.570361-2.86924C2.580324-2.899128 3.028643-4.184309 3.88543-4.184309C3.935243-4.184309 4.214197-4.184309 4.41345-4.044832C4.064757-3.935243 4.034869-3.616438 4.034869-3.566625C4.034869-3.437111 4.124533-3.247821 4.383562-3.247821C4.562889-3.247821 4.871731-3.387298 4.871731-3.775841C4.871731-4.293898 4.224159-4.403487 3.895392-4.403487C3.20797-4.403487 2.849315-3.905355 2.689913-3.686177C2.580324-4.214197 2.191781-4.403487 1.863014-4.403487C1.504359-4.403487 1.305106-4.174346 1.145704-3.875467C.956413-3.476961 .826899-2.889166 .826899-2.86924C.826899-2.769614 .926526-2.769614 .976339-2.769614C1.105853-2.769614 1.115816-2.779577 1.165629-2.998755C1.344956-3.696139 1.534247-4.184309 1.843088-4.184309C2.102117-4.184309 2.102117-3.895392 2.102117-3.785803C2.102117-3.626401 2.072229-3.437111 2.032379-3.277709L1.285181-.288917C1.265255-.229141 1.255293-.179328 1.255293-.14944C1.255293-.039851 1.334994 .109589 1.534247 .109589C1.833126 .109589 1.902864-.179328 1.92279-.259029L2.570361-2.86924Z'/>\n\x3Cpath id='g1-115' d='M2.460772-1.96264C2.899128-1.863014 3.347447-1.763387 3.347447-1.225405C3.347447-.9066 3.078456-.109589 2.052304-.109589C1.833126-.109589 1.255293-.159402 1.09589-.667497C1.603985-.71731 1.603985-1.135741 1.603985-1.155666C1.603985-1.344956 1.474471-1.474471 1.265255-1.474471C1.036115-1.474471 .757161-1.305106 .757161-.856787C.757161-.249066 1.334994 .109589 2.042341 .109589C3.536737 .109589 3.915318-1.105853 3.915318-1.564134C3.915318-2.430884 3.138232-2.610212 2.729763-2.699875C2.450809-2.759651 2.092154-2.839352 2.092154-3.267746C2.092154-3.506849 2.30137-4.184309 3.098381-4.184309C3.367372-4.184309 3.73599-4.084682 3.845579-3.696139C3.526775-3.656289 3.447073-3.387298 3.447073-3.287671C3.447073-3.178082 3.506849-3.008717 3.745953-3.008717C3.915318-3.008717 4.174346-3.128269 4.174346-3.556663C4.174346-4.014944 3.765878-4.403487 3.108344-4.403487C1.942715-4.403487 1.534247-3.447073 1.534247-2.929016C1.534247-2.161893 2.181818-2.022416 2.460772-1.96264Z'/>\n\x3Cpath id='g1-116' d='M2.590286-3.985056H3.437111C3.606476-3.985056 3.716065-3.985056 3.716065-4.174346C3.716065-4.293898 3.626401-4.293898 3.466999-4.293898H2.669988L3.038605-5.768369C3.078456-5.907846 3.078456-5.927771 3.078456-5.977584C3.078456-6.1868 2.909091-6.236613 2.809465-6.236613C2.560399-6.236613 2.460772-6.027397 2.420922-5.877958L2.032379-4.293898H1.185554C1.016189-4.293898 .9066-4.293898 .9066-4.104608C.9066-3.985056 .996264-3.985056 1.155666-3.985056H1.952677L1.235367-1.125778C1.225405-1.085928 1.185554-.926526 1.185554-.787049C1.185554-.288917 1.514321 .109589 2.032379 .109589C3.038605 .109589 3.5467-1.374844 3.5467-1.424658C3.5467-1.524284 3.466999-1.524284 3.39726-1.524284C3.277709-1.524284 3.277709-1.514321 3.198007-1.334994C3.01868-.856787 2.620174-.109589 2.052304-.109589C1.783313-.109589 1.783313-.358655 1.783313-.518057C1.783313-.587796 1.783313-.747198 1.853051-1.026152L2.590286-3.985056Z'/>\n\x3Cpath id='g1-117' d='M5.110834-3.895392C5.13076-3.955168 5.140722-4.004981 5.140722-4.034869C5.140722-4.144458 5.061021-4.293898 4.861768-4.293898C4.562889-4.293898 4.493151-4.004981 4.473225-3.92528L3.745953-1.016189C3.696139-.836862 3.696139-.816936 3.606476-.687422C3.417186-.408468 3.128269-.109589 2.689913-.109589C2.241594-.109589 2.15193-.547945 2.15193-.876712C2.15193-1.484433 2.480697-2.381071 2.729763-3.058531C2.809465-3.267746 2.859278-3.407223 2.859278-3.596513C2.859278-4.094645 2.530511-4.403487 2.102117-4.403487C1.175592-4.403487 .826899-2.929016 .826899-2.86924C.826899-2.769614 .926526-2.769614 .976339-2.769614C1.105853-2.769614 1.115816-2.789539 1.155666-2.929016C1.235367-3.237858 1.504359-4.184309 2.082192-4.184309C2.191781-4.184309 2.30137-4.154421 2.30137-3.895392C2.30137-3.656289 2.201743-3.387298 2.062267-2.998755C1.803238-2.30137 1.544209-1.564134 1.544209-1.046077C1.544209-.179328 2.122042 .109589 2.660025 .109589C3.188045 .109589 3.526775-.18929 3.765878-.488169C3.945205 .049813 4.373599 .109589 4.562889 .109589C4.931507 .109589 5.140722-.139477 5.290162-.448319C5.469489-.826899 5.589041-1.404732 5.589041-1.424658C5.589041-1.524284 5.50934-1.524284 5.439601-1.524284C5.32005-1.524284 5.310087-1.514321 5.250311-1.295143C5.110834-.737235 4.921544-.109589 4.582814-.109589C4.323786-.109589 4.323786-.37858 4.323786-.518057C4.323786-.587796 4.323786-.747198 4.393524-1.026152L5.110834-3.895392Z'/>\n\x3Cpath id='g1-118' d='M4.911582-3.745953C4.911582-4.094645 4.79203-4.403487 4.503113-4.403487C4.273973-4.403487 4.024907-4.174346 4.024907-3.945205C4.024907-3.815691 4.094645-3.745953 4.154421-3.676214C4.393524-3.417186 4.423412-3.098381 4.423412-2.889166C4.423412-2.610212 3.955168-.109589 2.809465-.109589C2.271482-.109589 2.161893-.607721 2.161893-.936488C2.161893-1.514321 2.480697-2.381071 2.749689-3.098381C2.799502-3.257783 2.859278-3.407223 2.859278-3.596513C2.859278-4.094645 2.530511-4.403487 2.102117-4.403487C1.175592-4.403487 .826899-2.929016 .826899-2.86924C.826899-2.769614 .926526-2.769614 .976339-2.769614C1.105853-2.769614 1.115816-2.789539 1.155666-2.929016C1.235367-3.237858 1.504359-4.184309 2.082192-4.184309C2.191781-4.184309 2.30137-4.154421 2.30137-3.895392C2.30137-3.656289 2.201743-3.387298 2.062267-2.998755C1.753425-2.15193 1.554172-1.554172 1.554172-1.085928C1.554172-.179328 2.191781 .109589 2.779577 .109589C4.4533 .109589 4.911582-3.486924 4.911582-3.745953Z'/>\n\x3Cpath id='g1-119' d='M3.785803-1.673724C3.716065-1.39477 3.706102-1.185554 3.706102-1.046077C3.706102-.936488 3.39726-.109589 2.86924-.109589C2.171856-.109589 2.171856-.846824 2.171856-.976339C2.171856-1.514321 2.430884-2.251557 2.739726-3.068493C2.809465-3.257783 2.859278-3.407223 2.859278-3.596513C2.859278-4.094645 2.530511-4.403487 2.102117-4.403487C1.175592-4.403487 .826899-2.929016 .826899-2.86924C.826899-2.769614 .926526-2.769614 .976339-2.769614C1.105853-2.769614 1.115816-2.789539 1.155666-2.929016C1.235367-3.237858 1.504359-4.184309 2.082192-4.184309C2.191781-4.184309 2.30137-4.154421 2.30137-3.895392C2.30137-3.656289 2.201743-3.387298 2.062267-2.998755C1.564134-1.643836 1.564134-1.384807 1.564134-1.115816C1.564134-.777086 1.643836-.438356 1.902864-.199253C2.221669 .079701 2.669988 .109589 2.839352 .109589C3.158157 .109589 3.506849-.019925 3.805729-.52802C3.955168-.159402 4.353674 .109589 4.941469 .109589C5.539228 .109589 5.957659-.298879 6.256538-1.006227C6.555417-1.683686 6.94396-3.217933 6.94396-3.745953C6.94396-4.094645 6.824408-4.403487 6.535492-4.403487C6.306351-4.403487 6.057285-4.174346 6.057285-3.945205C6.057285-3.815691 6.127024-3.745953 6.1868-3.676214C6.425903-3.417186 6.455791-3.098381 6.455791-2.889166C6.455791-2.49066 6.136986-1.444583 5.967621-1.036115C5.748443-.518057 5.429639-.109589 4.971357-.109589C4.473225-.109589 4.313823-.518057 4.313823-.936488C4.313823-1.026152 4.323786-1.265255 4.433375-1.703611L4.851806-3.377335C4.911582-3.596513 5.011208-3.995019 5.011208-4.034869C5.011208-4.144458 4.931507-4.293898 4.732254-4.293898C4.443337-4.293898 4.373599-4.024907 4.353674-3.945205L3.785803-1.673724Z'/>\n\x3Cpath id='g1-120' d='M4.722291-4.044832C4.323786-3.945205 4.323786-3.576588 4.323786-3.566625C4.323786-3.437111 4.41345-3.247821 4.672478-3.247821C4.851806-3.247821 5.160648-3.387298 5.160648-3.775841C5.160648-4.283935 4.582814-4.403487 4.293898-4.403487C3.745953-4.403487 3.417186-3.915318 3.317559-3.726027C3.098381-4.323786 2.610212-4.403487 2.361146-4.403487C1.364882-4.403487 .826899-3.098381 .826899-2.86924C.826899-2.769614 .926526-2.769614 .976339-2.769614C1.105853-2.769614 1.105853-2.779577 1.155666-2.938979C1.424658-3.795766 1.942715-4.184309 2.34122-4.184309C2.630137-4.184309 2.819427-3.955168 2.819427-3.556663C2.819427-3.317559 2.699875-2.82939 2.610212-2.460772C2.500623-2.052304 2.49066-2.012453 2.381071-1.554172C2.221669-.9066 2.012453-.109589 1.414695-.109589C1.384807-.109589 1.145704-.109589 .976339-.249066C1.275218-.328767 1.364882-.577833 1.364882-.727273C1.364882-.986301 1.155666-1.046077 1.026152-1.046077C.777086-1.046077 .52802-.836862 .52802-.508095C.52802-.119552 .946451 .109589 1.404732 .109589C1.882939 .109589 2.211706-.268991 2.381071-.56787C2.580324 0 3.068493 .109589 3.327522 .109589C4.353674 .109589 4.861768-1.225405 4.861768-1.424658C4.861768-1.524284 4.782067-1.524284 4.712329-1.524284C4.592777-1.524284 4.582814-1.514321 4.533001-1.354919C4.26401-.498132 3.765878-.109589 3.347447-.109589C3.148194-.109589 2.879203-.229141 2.879203-.747198C2.879203-.986301 2.988792-1.414695 3.068493-1.753425C3.178082-2.171856 3.327522-2.789539 3.407223-3.118306C3.5467-3.636364 3.815691-4.184309 4.283935-4.184309C4.313823-4.184309 4.562889-4.184309 4.722291-4.044832Z'/>\n\x3Cpath id='g1-121' d='M3.556663-.259029C3.178082 1.384807 2.440847 1.823163 1.942715 1.823163C1.464508 1.823163 1.325031 1.444583 1.325031 1.39477C1.325031 1.384807 1.334994 1.374844 1.404732 1.364882C1.713574 1.315068 1.833126 1.046077 1.833126 .886675C1.833126 .67746 1.673724 .56787 1.494396 .56787C1.374844 .56787 .986301 .627646 .986301 1.185554C.986301 1.703611 1.39477 2.042341 1.942715 2.042341C2.978829 2.042341 3.88543 1.016189 4.134496 .029888L5.110834-3.895392C5.120797-3.955168 5.140722-4.004981 5.140722-4.034869C5.140722-4.144458 5.061021-4.293898 4.861768-4.293898C4.562889-4.293898 4.493151-4.004981 4.473225-3.92528L3.745953-.996264C3.676214-.707347 3.277709-.109589 2.689913-.109589C2.241594-.109589 2.15193-.547945 2.15193-.876712C2.15193-1.484433 2.480697-2.381071 2.729763-3.058531C2.809465-3.267746 2.859278-3.407223 2.859278-3.596513C2.859278-4.094645 2.530511-4.403487 2.102117-4.403487C1.175592-4.403487 .826899-2.929016 .826899-2.86924C.826899-2.769614 .926526-2.769614 .976339-2.769614C1.105853-2.769614 1.115816-2.789539 1.155666-2.929016C1.235367-3.237858 1.504359-4.184309 2.082192-4.184309C2.191781-4.184309 2.30137-4.154421 2.30137-3.895392C2.30137-3.656289 2.201743-3.387298 2.062267-2.998755C1.803238-2.30137 1.544209-1.564134 1.544209-1.046077C1.544209-.179328 2.122042 .109589 2.660025 .109589C3.118306 .109589 3.427148-.129514 3.556663-.259029Z'/>\n\x3Cpath id='g3-72' d='M6.107098-6.027397C6.107098-6.386052 6.127024-6.495641 6.894147-6.495641H7.13325V-6.804483C6.784558-6.774595 6.047323-6.774595 5.668742-6.774595S4.542964-6.774595 4.194271-6.804483V-6.495641H4.433375C5.200498-6.495641 5.220423-6.386052 5.220423-6.027397V-3.696139H2.241594V-6.027397C2.241594-6.386052 2.261519-6.495641 3.028643-6.495641H3.267746V-6.804483C2.919054-6.774595 2.181818-6.774595 1.803238-6.774595S.67746-6.774595 .328767-6.804483V-6.495641H.56787C1.334994-6.495641 1.354919-6.386052 1.354919-6.027397V-.777086C1.354919-.418431 1.334994-.308842 .56787-.308842H.328767V0C.67746-.029888 1.414695-.029888 1.793275-.029888S2.919054-.029888 3.267746 0V-.308842H3.028643C2.261519-.308842 2.241594-.418431 2.241594-.777086V-3.387298H5.220423V-.777086C5.220423-.418431 5.200498-.308842 4.433375-.308842H4.194271V0C4.542964-.029888 5.280199-.029888 5.65878-.029888S6.784558-.029888 7.13325 0V-.308842H6.894147C6.127024-.308842 6.107098-.418431 6.107098-.777086V-6.027397Z'/>\n\x3Cpath id='g3-82' d='M2.231631-3.516812V-6.097136C2.231631-6.326276 2.231631-6.445828 2.450809-6.475716C2.550436-6.495641 2.839352-6.495641 3.038605-6.495641C3.935243-6.495641 5.051059-6.455791 5.051059-5.011208C5.051059-4.323786 4.811955-3.516812 3.337484-3.516812H2.231631ZM4.333748-3.387298C5.300125-3.626401 6.07721-4.234122 6.07721-5.011208C6.07721-5.967621 4.941469-6.804483 3.476961-6.804483H.348692V-6.495641H.587796C1.354919-6.495641 1.374844-6.386052 1.374844-6.027397V-.777086C1.374844-.418431 1.354919-.308842 .587796-.308842H.348692V0C.707347-.029888 1.414695-.029888 1.803238-.029888S2.899128-.029888 3.257783 0V-.308842H3.01868C2.251557-.308842 2.231631-.418431 2.231631-.777086V-3.297634H3.377335C3.536737-3.297634 3.955168-3.297634 4.303861-2.958904C4.682441-2.600249 4.682441-2.291407 4.682441-1.62391C4.682441-.976339 4.682441-.577833 5.090909-.199253C5.499377 .159402 6.047323 .219178 6.346202 .219178C7.123288 .219178 7.292653-.597758 7.292653-.876712C7.292653-.936488 7.292653-1.046077 7.163138-1.046077C7.053549-1.046077 7.053549-.956413 7.043587-.886675C6.983811-.179328 6.635118 0 6.386052 0C5.897883 0 5.818182-.508095 5.678705-1.43462L5.549191-2.231631C5.369863-2.86924 4.881694-3.198007 4.333748-3.387298Z'/>\n\x3Cpath id='g3-83' d='M3.476961-3.865504L2.201743-4.174346C1.58406-4.323786 1.195517-4.861768 1.195517-5.439601C1.195517-6.136986 1.733499-6.744707 2.510585-6.744707C4.174346-6.744707 4.393524-5.110834 4.4533-4.662516C4.463263-4.60274 4.463263-4.542964 4.572852-4.542964C4.702366-4.542964 4.702366-4.592777 4.702366-4.782067V-6.784558C4.702366-6.953923 4.702366-7.023661 4.592777-7.023661C4.523039-7.023661 4.513076-7.013699 4.443337-6.894147L4.094645-6.326276C3.795766-6.615193 3.387298-7.023661 2.500623-7.023661C1.39477-7.023661 .557908-6.146949 .557908-5.090909C.557908-4.26401 1.085928-3.536737 1.863014-3.267746C1.972603-3.227895 2.480697-3.108344 3.178082-2.938979C3.447073-2.86924 3.745953-2.799502 4.024907-2.430884C4.234122-2.171856 4.333748-1.843088 4.333748-1.514321C4.333748-.806974 3.835616-.089664 2.998755-.089664C2.709838-.089664 1.952677-.139477 1.424658-.627646C.846824-1.165629 .816936-1.803238 .806974-2.161893C.797011-2.261519 .71731-2.261519 .687422-2.261519C.557908-2.261519 .557908-2.191781 .557908-2.012453V-.019925C.557908 .14944 .557908 .219178 .667497 .219178C.737235 .219178 .747198 .199253 .816936 .089664C.816936 .079701 .846824 .049813 1.175592-.478207C1.484433-.139477 2.122042 .219178 3.008717 .219178C4.174346 .219178 4.971357-.757161 4.971357-1.853051C4.971357-2.849315 4.313823-3.666252 3.476961-3.865504Z'/>\n\x3Cpath id='g3-97' d='M3.317559-.757161C3.35741-.358655 3.626401 .059776 4.094645 .059776C4.303861 .059776 4.911582-.079701 4.911582-.886675V-1.444583H4.662516V-.886675C4.662516-.308842 4.41345-.249066 4.303861-.249066C3.975093-.249066 3.935243-.697385 3.935243-.747198V-2.739726C3.935243-3.158157 3.935243-3.5467 3.576588-3.915318C3.188045-4.303861 2.689913-4.463263 2.211706-4.463263C1.39477-4.463263 .707347-3.995019 .707347-3.337484C.707347-3.038605 .9066-2.86924 1.165629-2.86924C1.444583-2.86924 1.62391-3.068493 1.62391-3.327522C1.62391-3.447073 1.574097-3.775841 1.115816-3.785803C1.384807-4.134496 1.872976-4.244085 2.191781-4.244085C2.67995-4.244085 3.247821-3.855542 3.247821-2.968867V-2.600249C2.739726-2.570361 2.042341-2.540473 1.414695-2.241594C.667497-1.902864 .418431-1.384807 .418431-.946451C.418431-.139477 1.384807 .109589 2.012453 .109589C2.669988 .109589 3.128269-.288917 3.317559-.757161ZM3.247821-2.391034V-1.39477C3.247821-.448319 2.530511-.109589 2.082192-.109589C1.594022-.109589 1.185554-.458281 1.185554-.956413C1.185554-1.504359 1.603985-2.331258 3.247821-2.391034Z'/>\n\x3Cpath id='g3-98' d='M1.713574-3.755915V-6.914072L.278954-6.804483V-6.495641C.976339-6.495641 1.05604-6.425903 1.05604-5.937733V0H1.305106C1.315068-.009963 1.39477-.14944 1.663761-.617684C1.8132-.388543 2.231631 .109589 2.968867 .109589C4.154421 .109589 5.190535-.86675 5.190535-2.15193C5.190535-3.417186 4.214197-4.403487 3.078456-4.403487C2.30137-4.403487 1.872976-3.935243 1.713574-3.755915ZM1.743462-1.135741V-3.188045C1.743462-3.377335 1.743462-3.387298 1.853051-3.5467C2.241594-4.104608 2.789539-4.184309 3.028643-4.184309C3.476961-4.184309 3.835616-3.92528 4.07472-3.5467C4.333748-3.138232 4.363636-2.570361 4.363636-2.161893C4.363636-1.793275 4.343711-1.195517 4.054795-.747198C3.845579-.438356 3.466999-.109589 2.929016-.109589C2.480697-.109589 2.122042-.348692 1.882939-.71731C1.743462-.926526 1.743462-.956413 1.743462-1.135741Z'/>\n\x3Cpath id='g3-99' d='M1.165629-2.171856C1.165629-3.795766 1.982565-4.214197 2.510585-4.214197C2.600249-4.214197 3.227895-4.204234 3.576588-3.845579C3.16812-3.815691 3.108344-3.516812 3.108344-3.387298C3.108344-3.128269 3.287671-2.929016 3.566625-2.929016C3.825654-2.929016 4.024907-3.098381 4.024907-3.39726C4.024907-4.07472 3.267746-4.463263 2.500623-4.463263C1.255293-4.463263 .33873-3.387298 .33873-2.15193C.33873-.876712 1.325031 .109589 2.480697 .109589C3.815691 .109589 4.134496-1.085928 4.134496-1.185554S4.034869-1.285181 4.004981-1.285181C3.915318-1.285181 3.895392-1.24533 3.875467-1.185554C3.58655-.259029 2.938979-.139477 2.570361-.139477C2.042341-.139477 1.165629-.56787 1.165629-2.171856Z'/>\n\x3Cpath id='g3-100' d='M3.785803-.547945V.109589L5.250311 0V-.308842C4.552927-.308842 4.473225-.37858 4.473225-.86675V-6.914072L3.038605-6.804483V-6.495641C3.73599-6.495641 3.815691-6.425903 3.815691-5.937733V-3.785803C3.526775-4.144458 3.098381-4.403487 2.560399-4.403487C1.384807-4.403487 .33873-3.427148 .33873-2.141968C.33873-.876712 1.315068 .109589 2.450809 .109589C3.088418 .109589 3.536737-.229141 3.785803-.547945ZM3.785803-3.217933V-1.175592C3.785803-.996264 3.785803-.976339 3.676214-.806974C3.377335-.328767 2.929016-.109589 2.500623-.109589C2.052304-.109589 1.693649-.368618 1.454545-.747198C1.195517-1.155666 1.165629-1.723537 1.165629-2.132005C1.165629-2.500623 1.185554-3.098381 1.474471-3.5467C1.683686-3.855542 2.062267-4.184309 2.600249-4.184309C2.948941-4.184309 3.367372-4.034869 3.676214-3.58655C3.785803-3.417186 3.785803-3.39726 3.785803-3.217933Z'/>\n\x3Cpath id='g3-101' d='M1.115816-2.510585C1.175592-3.995019 2.012453-4.244085 2.351183-4.244085C3.377335-4.244085 3.476961-2.899128 3.476961-2.510585H1.115816ZM1.105853-2.30137H3.88543C4.104608-2.30137 4.134496-2.30137 4.134496-2.510585C4.134496-3.496887 3.596513-4.463263 2.351183-4.463263C1.195517-4.463263 .278954-3.437111 .278954-2.191781C.278954-.856787 1.325031 .109589 2.470735 .109589C3.686177 .109589 4.134496-.996264 4.134496-1.185554C4.134496-1.285181 4.054795-1.305106 4.004981-1.305106C3.915318-1.305106 3.895392-1.24533 3.875467-1.165629C3.526775-.139477 2.630137-.139477 2.530511-.139477C2.032379-.139477 1.633873-.438356 1.404732-.806974C1.105853-1.285181 1.105853-1.942715 1.105853-2.30137Z'/>\n\x3Cpath id='g3-102' d='M1.743462-4.293898V-5.449564C1.743462-6.326276 2.221669-6.804483 2.660025-6.804483C2.689913-6.804483 2.839352-6.804483 2.988792-6.734745C2.86924-6.694894 2.689913-6.56538 2.689913-6.316314C2.689913-6.087173 2.849315-5.88792 3.118306-5.88792C3.407223-5.88792 3.556663-6.087173 3.556663-6.326276C3.556663-6.694894 3.188045-7.023661 2.660025-7.023661C1.96264-7.023661 1.115816-6.495641 1.115816-5.439601V-4.293898H.328767V-3.985056H1.115816V-.757161C1.115816-.308842 1.006227-.308842 .33873-.308842V0C.727273-.009963 1.195517-.029888 1.474471-.029888C1.872976-.029888 2.34122-.029888 2.739726 0V-.308842H2.530511C1.793275-.308842 1.77335-.418431 1.77335-.777086V-3.985056H2.909091V-4.293898H1.743462Z'/>\n\x3Cpath id='g3-103' d='M2.211706-1.713574C1.344956-1.713574 1.344956-2.709838 1.344956-2.938979C1.344956-3.20797 1.354919-3.526775 1.504359-3.775841C1.58406-3.895392 1.8132-4.174346 2.211706-4.174346C3.078456-4.174346 3.078456-3.178082 3.078456-2.948941C3.078456-2.67995 3.068493-2.361146 2.919054-2.11208C2.839352-1.992528 2.610212-1.713574 2.211706-1.713574ZM1.05604-1.325031C1.05604-1.364882 1.05604-1.594022 1.225405-1.793275C1.613948-1.514321 2.022416-1.484433 2.211706-1.484433C3.138232-1.484433 3.825654-2.171856 3.825654-2.938979C3.825654-3.307597 3.666252-3.676214 3.417186-3.905355C3.775841-4.244085 4.134496-4.293898 4.313823-4.293898C4.333748-4.293898 4.383562-4.293898 4.41345-4.283935C4.303861-4.244085 4.254047-4.134496 4.254047-4.014944C4.254047-3.845579 4.383562-3.726027 4.542964-3.726027C4.64259-3.726027 4.83188-3.795766 4.83188-4.024907C4.83188-4.194271 4.712329-4.513076 4.323786-4.513076C4.124533-4.513076 3.686177-4.4533 3.267746-4.044832C2.849315-4.373599 2.430884-4.403487 2.211706-4.403487C1.285181-4.403487 .597758-3.716065 .597758-2.948941C.597758-2.510585 .816936-2.132005 1.066002-1.92279C.936488-1.77335 .757161-1.444583 .757161-1.09589C.757161-.787049 .886675-.408468 1.195517-.209215C.597758-.039851 .278954 .388543 .278954 .787049C.278954 1.504359 1.265255 2.052304 2.480697 2.052304C3.656289 2.052304 4.692403 1.544209 4.692403 .767123C4.692403 .418431 4.552927-.089664 4.044832-.368618C3.516812-.647572 2.938979-.647572 2.331258-.647572C2.082192-.647572 1.653798-.647572 1.58406-.657534C1.265255-.697385 1.05604-1.006227 1.05604-1.325031ZM2.49066 1.823163C1.484433 1.823163 .797011 1.315068 .797011 .787049C.797011 .328767 1.175592-.039851 1.613948-.069738H2.201743C3.058531-.069738 4.174346-.069738 4.174346 .787049C4.174346 1.325031 3.466999 1.823163 2.49066 1.823163Z'/>\n\x3Cpath id='g3-104' d='M1.09589-.757161C1.09589-.308842 .986301-.308842 .318804-.308842V0C.667497-.009963 1.175592-.029888 1.444583-.029888C1.703611-.029888 2.221669-.009963 2.560399 0V-.308842C1.892902-.308842 1.783313-.308842 1.783313-.757161V-2.590286C1.783313-3.626401 2.49066-4.184309 3.128269-4.184309C3.755915-4.184309 3.865504-3.646326 3.865504-3.078456V-.757161C3.865504-.308842 3.755915-.308842 3.088418-.308842V0C3.437111-.009963 3.945205-.029888 4.214197-.029888C4.473225-.029888 4.991283-.009963 5.330012 0V-.308842C4.811955-.308842 4.562889-.308842 4.552927-.607721V-2.510585C4.552927-3.367372 4.552927-3.676214 4.244085-4.034869C4.104608-4.204234 3.775841-4.403487 3.198007-4.403487C2.361146-4.403487 1.92279-3.805729 1.753425-3.427148V-6.914072L.318804-6.804483V-6.495641C1.016189-6.495641 1.09589-6.425903 1.09589-5.937733V-.757161Z'/>\n\x3Cpath id='g3-105' d='M1.763387-4.403487L.368618-4.293898V-3.985056C1.016189-3.985056 1.105853-3.92528 1.105853-3.437111V-.757161C1.105853-.308842 .996264-.308842 .328767-.308842V0C.647572-.009963 1.185554-.029888 1.424658-.029888C1.77335-.029888 2.122042-.009963 2.460772 0V-.308842C1.803238-.308842 1.763387-.358655 1.763387-.747198V-4.403487ZM1.803238-6.136986C1.803238-6.455791 1.554172-6.665006 1.275218-6.665006C.966376-6.665006 .747198-6.396015 .747198-6.136986C.747198-5.867995 .966376-5.608966 1.275218-5.608966C1.554172-5.608966 1.803238-5.818182 1.803238-6.136986Z'/>\n\x3Cpath id='g3-107' d='M1.05604-.757161C1.05604-.308842 .946451-.308842 .278954-.308842V0C.607721-.009963 1.075965-.029888 1.364882-.029888C1.663761-.029888 2.062267-.019925 2.460772 0V-.308842C1.793275-.308842 1.683686-.308842 1.683686-.757161V-1.783313L2.321295-2.331258C3.088418-1.275218 3.506849-.71731 3.506849-.537983C3.506849-.348692 3.337484-.308842 3.148194-.308842V0C3.427148-.009963 4.014944-.029888 4.224159-.029888C4.513076-.029888 4.801993-.019925 5.090909 0V-.308842C4.722291-.308842 4.503113-.308842 4.124533-.836862L2.859278-2.620174C2.849315-2.6401 2.799502-2.699875 2.799502-2.729763C2.799502-2.769614 3.506849-3.367372 3.606476-3.447073C4.234122-3.955168 4.652553-3.975093 4.861768-3.985056V-4.293898C4.572852-4.26401 4.443337-4.26401 4.164384-4.26401C3.805729-4.26401 3.188045-4.283935 3.048568-4.293898V-3.985056C3.237858-3.975093 3.337484-3.865504 3.337484-3.73599C3.337484-3.536737 3.198007-3.417186 3.118306-3.347447L1.713574-2.132005V-6.914072L.278954-6.804483V-6.495641C.976339-6.495641 1.05604-6.425903 1.05604-5.937733V-.757161Z'/>\n\x3Cpath id='g3-108' d='M1.763387-6.914072L.328767-6.804483V-6.495641C1.026152-6.495641 1.105853-6.425903 1.105853-5.937733V-.757161C1.105853-.308842 .996264-.308842 .328767-.308842V0C.657534-.009963 1.185554-.029888 1.43462-.029888S2.171856-.009963 2.540473 0V-.308842C1.872976-.308842 1.763387-.308842 1.763387-.757161V-6.914072Z'/>\n\x3Cpath id='g3-109' d='M1.09589-3.427148V-.757161C1.09589-.308842 .986301-.308842 .318804-.308842V0C.667497-.009963 1.175592-.029888 1.444583-.029888C1.703611-.029888 2.221669-.009963 2.560399 0V-.308842C1.892902-.308842 1.783313-.308842 1.783313-.757161V-2.590286C1.783313-3.626401 2.49066-4.184309 3.128269-4.184309C3.755915-4.184309 3.865504-3.646326 3.865504-3.078456V-.757161C3.865504-.308842 3.755915-.308842 3.088418-.308842V0C3.437111-.009963 3.945205-.029888 4.214197-.029888C4.473225-.029888 4.991283-.009963 5.330012 0V-.308842C4.662516-.308842 4.552927-.308842 4.552927-.757161V-2.590286C4.552927-3.626401 5.260274-4.184309 5.897883-4.184309C6.525529-4.184309 6.635118-3.646326 6.635118-3.078456V-.757161C6.635118-.308842 6.525529-.308842 5.858032-.308842V0C6.206725-.009963 6.714819-.029888 6.983811-.029888C7.242839-.029888 7.760897-.009963 8.099626 0V-.308842C7.581569-.308842 7.332503-.308842 7.32254-.607721V-2.510585C7.32254-3.367372 7.32254-3.676214 7.013699-4.034869C6.874222-4.204234 6.545455-4.403487 5.967621-4.403487C5.13076-4.403487 4.692403-3.805729 4.523039-3.427148C4.383562-4.293898 3.646326-4.403487 3.198007-4.403487C2.470735-4.403487 2.002491-3.975093 1.723537-3.35741V-4.403487L.318804-4.293898V-3.985056C1.016189-3.985056 1.09589-3.915318 1.09589-3.427148Z'/>\n\x3Cpath id='g3-110' d='M1.09589-3.427148V-.757161C1.09589-.308842 .986301-.308842 .318804-.308842V0C.667497-.009963 1.175592-.029888 1.444583-.029888C1.703611-.029888 2.221669-.009963 2.560399 0V-.308842C1.892902-.308842 1.783313-.308842 1.783313-.757161V-2.590286C1.783313-3.626401 2.49066-4.184309 3.128269-4.184309C3.755915-4.184309 3.865504-3.646326 3.865504-3.078456V-.757161C3.865504-.308842 3.755915-.308842 3.088418-.308842V0C3.437111-.009963 3.945205-.029888 4.214197-.029888C4.473225-.029888 4.991283-.009963 5.330012 0V-.308842C4.811955-.308842 4.562889-.308842 4.552927-.607721V-2.510585C4.552927-3.367372 4.552927-3.676214 4.244085-4.034869C4.104608-4.204234 3.775841-4.403487 3.198007-4.403487C2.470735-4.403487 2.002491-3.975093 1.723537-3.35741V-4.403487L.318804-4.293898V-3.985056C1.016189-3.985056 1.09589-3.915318 1.09589-3.427148Z'/>\n\x3Cpath id='g3-111' d='M4.692403-2.132005C4.692403-3.407223 3.696139-4.463263 2.49066-4.463263C1.24533-4.463263 .278954-3.377335 .278954-2.132005C.278954-.846824 1.315068 .109589 2.480697 .109589C3.686177 .109589 4.692403-.86675 4.692403-2.132005ZM2.49066-.139477C2.062267-.139477 1.62391-.348692 1.354919-.806974C1.105853-1.24533 1.105853-1.853051 1.105853-2.211706C1.105853-2.600249 1.105853-3.138232 1.344956-3.576588C1.613948-4.034869 2.082192-4.244085 2.480697-4.244085C2.919054-4.244085 3.347447-4.024907 3.606476-3.596513S3.865504-2.590286 3.865504-2.211706C3.865504-1.853051 3.865504-1.315068 3.646326-.876712C3.427148-.428394 2.988792-.139477 2.49066-.139477Z'/>\n\x3Cpath id='g3-112' d='M1.713574-3.745953V-4.403487L.278954-4.293898V-3.985056C.986301-3.985056 1.05604-3.92528 1.05604-3.486924V1.175592C1.05604 1.62391 .946451 1.62391 .278954 1.62391V1.932752C.617684 1.92279 1.135741 1.902864 1.39477 1.902864C1.663761 1.902864 2.171856 1.92279 2.520548 1.932752V1.62391C1.853051 1.62391 1.743462 1.62391 1.743462 1.175592V-.498132V-.587796C1.793275-.428394 2.211706 .109589 2.968867 .109589C4.154421 .109589 5.190535-.86675 5.190535-2.15193C5.190535-3.417186 4.224159-4.403487 3.108344-4.403487C2.331258-4.403487 1.912827-3.965131 1.713574-3.745953ZM1.743462-1.135741V-3.35741C2.032379-3.865504 2.520548-4.154421 3.028643-4.154421C3.755915-4.154421 4.363636-3.277709 4.363636-2.15193C4.363636-.946451 3.666252-.109589 2.929016-.109589C2.530511-.109589 2.15193-.308842 1.882939-.71731C1.743462-.926526 1.743462-.936488 1.743462-1.135741Z'/>\n\x3Cpath id='g3-114' d='M1.663761-3.307597V-4.403487L.278954-4.293898V-3.985056C.976339-3.985056 1.05604-3.915318 1.05604-3.427148V-.757161C1.05604-.308842 .946451-.308842 .278954-.308842V0C.667497-.009963 1.135741-.029888 1.414695-.029888C1.8132-.029888 2.281445-.029888 2.67995 0V-.308842H2.470735C1.733499-.308842 1.713574-.418431 1.713574-.777086V-2.311333C1.713574-3.297634 2.132005-4.184309 2.889166-4.184309C2.958904-4.184309 2.978829-4.184309 2.998755-4.174346C2.968867-4.164384 2.769614-4.044832 2.769614-3.785803C2.769614-3.506849 2.978829-3.35741 3.198007-3.35741C3.377335-3.35741 3.626401-3.476961 3.626401-3.795766S3.317559-4.403487 2.889166-4.403487C2.161893-4.403487 1.803238-3.73599 1.663761-3.307597Z'/>\n\x3Cpath id='g3-115' d='M2.072229-1.932752C2.291407-1.892902 3.108344-1.733499 3.108344-1.016189C3.108344-.508095 2.759651-.109589 1.982565-.109589C1.145704-.109589 .787049-.67746 .597758-1.524284C.56787-1.653798 .557908-1.693649 .458281-1.693649C.328767-1.693649 .328767-1.62391 .328767-1.444583V-.129514C.328767 .039851 .328767 .109589 .438356 .109589C.488169 .109589 .498132 .099626 .687422-.089664C.707347-.109589 .707347-.129514 .886675-.318804C1.325031 .099626 1.77335 .109589 1.982565 .109589C3.128269 .109589 3.58655-.557908 3.58655-1.275218C3.58655-1.803238 3.287671-2.102117 3.16812-2.221669C2.839352-2.540473 2.450809-2.620174 2.032379-2.699875C1.474471-2.809465 .806974-2.938979 .806974-3.516812C.806974-3.865504 1.066002-4.273973 1.92279-4.273973C3.01868-4.273973 3.068493-3.377335 3.088418-3.068493C3.098381-2.978829 3.188045-2.978829 3.20797-2.978829C3.337484-2.978829 3.337484-3.028643 3.337484-3.217933V-4.224159C3.337484-4.393524 3.337484-4.463263 3.227895-4.463263C3.178082-4.463263 3.158157-4.463263 3.028643-4.343711C2.998755-4.303861 2.899128-4.214197 2.859278-4.184309C2.480697-4.463263 2.072229-4.463263 1.92279-4.463263C.707347-4.463263 .328767-3.795766 .328767-3.237858C.328767-2.889166 .488169-2.610212 .757161-2.391034C1.075965-2.132005 1.354919-2.072229 2.072229-1.932752Z'/>\n\x3Cpath id='g3-116' d='M1.723537-3.985056H3.148194V-4.293898H1.723537V-6.127024H1.474471C1.464508-5.310087 1.165629-4.244085 .18929-4.204234V-3.985056H1.036115V-1.235367C1.036115-.009963 1.96264 .109589 2.321295 .109589C3.028643 .109589 3.307597-.597758 3.307597-1.235367V-1.803238H3.058531V-1.255293C3.058531-.518057 2.759651-.139477 2.391034-.139477C1.723537-.139477 1.723537-1.046077 1.723537-1.215442V-3.985056Z'/>\n\x3Cpath id='g3-117' d='M3.895392-.787049V.109589L5.330012 0V-.308842C4.632628-.308842 4.552927-.37858 4.552927-.86675V-4.403487L3.088418-4.293898V-3.985056C3.785803-3.985056 3.865504-3.915318 3.865504-3.427148V-1.653798C3.865504-.787049 3.387298-.109589 2.660025-.109589C1.823163-.109589 1.783313-.577833 1.783313-1.09589V-4.403487L.318804-4.293898V-3.985056C1.09589-3.985056 1.09589-3.955168 1.09589-3.068493V-1.574097C1.09589-.797011 1.09589 .109589 2.610212 .109589C3.16812 .109589 3.606476-.169365 3.895392-.787049Z'/>\n\x3Cpath id='g3-118' d='M4.144458-3.317559C4.234122-3.5467 4.403487-3.975093 5.061021-3.985056V-4.293898C4.83188-4.273973 4.542964-4.26401 4.313823-4.26401C4.07472-4.26401 3.616438-4.283935 3.447073-4.293898V-3.985056C3.815691-3.975093 3.92528-3.745953 3.92528-3.556663C3.92528-3.466999 3.905355-3.427148 3.865504-3.317559L2.849315-.777086L1.733499-3.556663C1.673724-3.686177 1.673724-3.706102 1.673724-3.726027C1.673724-3.985056 2.062267-3.985056 2.241594-3.985056V-4.293898C1.942715-4.283935 1.384807-4.26401 1.155666-4.26401C.886675-4.26401 .488169-4.273973 .18929-4.293898V-3.985056C.816936-3.985056 .856787-3.92528 .986301-3.616438L2.420922-.079701C2.480697 .059776 2.500623 .109589 2.630137 .109589S2.799502 .019925 2.839352-.079701L4.144458-3.317559Z'/>\n\x3Cpath id='g3-119' d='M6.166874-3.347447C6.346202-3.845579 6.655044-3.975093 7.003736-3.985056V-4.293898C6.784558-4.273973 6.495641-4.26401 6.276463-4.26401C5.987547-4.26401 5.539228-4.283935 5.349938-4.293898V-3.985056C5.708593-3.975093 5.927771-3.795766 5.927771-3.506849C5.927771-3.447073 5.927771-3.427148 5.877958-3.297634L4.971357-.747198L3.985056-3.526775C3.945205-3.646326 3.935243-3.666252 3.935243-3.716065C3.935243-3.985056 4.323786-3.985056 4.523039-3.985056V-4.293898C4.234122-4.283935 3.726027-4.26401 3.486924-4.26401C3.188045-4.26401 2.899128-4.273973 2.600249-4.293898V-3.985056C2.968867-3.985056 3.128269-3.965131 3.227895-3.835616C3.277709-3.775841 3.387298-3.476961 3.457036-3.287671L2.600249-.876712L1.653798-3.536737C1.603985-3.656289 1.603985-3.676214 1.603985-3.716065C1.603985-3.985056 1.992528-3.985056 2.191781-3.985056V-4.293898C1.892902-4.283935 1.334994-4.26401 1.105853-4.26401C1.066002-4.26401 .537983-4.273973 .179328-4.293898V-3.985056C.67746-3.985056 .797011-3.955168 .916563-3.636364L2.171856-.109589C2.221669 .029888 2.251557 .109589 2.381071 .109589S2.530511 .049813 2.580324-.089664L3.58655-2.909091L4.60274-.079701C4.64259 .029888 4.672478 .109589 4.801993 .109589S4.961395 .019925 5.001245-.079701L6.166874-3.347447Z'/>\n\x3Cpath id='g3-122' d='M3.88543-3.995019C3.975093-4.104608 3.975093-4.124533 3.975093-4.164384C3.975093-4.293898 3.895392-4.293898 3.716065-4.293898H.52802L.418431-2.689913H.667497C.727273-3.706102 .916563-4.07472 2.012453-4.07472H3.148194L.368618-.318804C.278954-.209215 .278954-.18929 .278954-.139477C.278954 0 .348692 0 .537983 0H3.825654L3.995019-1.863014H3.745953C3.656289-.687422 3.447073-.249066 2.291407-.249066H1.115816L3.88543-3.995019Z'/>\n\x3Cpath id='g2-65' d='M4.722291-6.694894C4.612702-6.953923 4.493151-6.953923 4.323786-6.953923C4.044832-6.953923 4.004981-6.874222 3.935243-6.694894L1.464508-.697385C1.404732-.547945 1.374844-.468244 .617684-.468244H.408468V0C.787049-.009963 1.265255-.029888 1.574097-.029888C1.96264-.029888 2.520548-.029888 2.889166 0V-.468244C2.86924-.468244 2.002491-.468244 2.002491-.597758C2.002491-.607721 2.032379-.707347 2.042341-.71731L2.540473-1.92279H5.210461L5.808219-.468244H4.861768V0C5.240349-.029888 6.1868-.029888 6.615193-.029888C7.013699-.029888 7.890411-.029888 8.239103 0V-.468244H7.272727L4.722291-6.694894ZM3.875467-5.160648L5.011208-2.391034H2.739726L3.875467-5.160648Z'/>\n\x3Cpath id='g2-70' d='M6.41594-6.774595H.388543V-6.306351H1.464508V-.468244H.388543V0C.767123-.029888 1.77335-.029888 2.211706-.029888C2.699875-.029888 3.785803-.029888 4.224159 0V-.468244H2.879203V-3.158157H3.377335C4.333748-3.158157 4.423412-2.729763 4.423412-1.992528H4.891656V-4.79203H4.423412C4.423412-4.054795 4.343711-3.626401 3.377335-3.626401H2.879203V-6.306351H4.273973C5.877958-6.306351 6.107098-5.539228 6.256538-4.373599H6.724782L6.41594-6.774595Z'/>\n\x3Cpath id='g2-77' d='M5.439601-1.315068L3.048568-6.585305C2.938979-6.834371 2.82939-6.834371 2.610212-6.834371H.398506V-6.366127H1.474471V-.757161C1.474471-.537983 1.464508-.52802 1.185554-.498132C.946451-.468244 .926526-.468244 .647572-.468244H.398506V0C.777086-.029888 1.344956-.029888 1.733499-.029888C2.15193-.029888 2.669988-.029888 3.078456 0V-.468244H2.82939C2.650062-.468244 2.480697-.478207 2.30137-.498132C2.012453-.52802 2.002491-.537983 2.002491-.757161V-6.236613H2.012453L4.722291-.249066C4.811955-.049813 4.931507 0 5.041096 0C5.240349 0 5.32005-.14944 5.3599-.239103L8.139477-6.366127H8.14944V-.468244H7.073474V0C7.43213-.029888 8.358655-.029888 8.767123-.029888S10.11208-.029888 10.470735 0V-.468244H9.39477V-6.366127H10.470735V-6.834371H8.268991C8.049813-6.834371 7.940224-6.834371 7.830635-6.585305L5.439601-1.315068Z'/>\n\x3Cpath id='g2-80' d='M2.879203-3.008717H4.64259C6.027397-3.008717 7.183064-3.726027 7.183064-4.891656C7.183064-5.987547 6.196762-6.834371 4.542964-6.834371H.388543V-6.366127H1.464508V-.468244H.388543V0C.767123-.029888 1.743462-.029888 2.171856-.029888S3.576588-.029888 3.955168 0V-.468244H2.879203V-3.008717ZM4.154421-3.417186H2.819427V-6.366127H4.164384C5.65878-6.366127 5.65878-5.608966 5.65878-4.891656C5.65878-4.184309 5.65878-3.417186 4.154421-3.417186Z'/>\n\x3Cpath id='g2-8",type:"svgGraphic"},uuid:"0|10"},$R[355]={content:$R[356]={type:"text",text:"This hierarchy is crucial. Using the simplest model that can solve your problem is more efficient. You wouldn't use a sledgehammer to crack a nut. The study of these models helps computer scientists choose the right tools for the job and understand the inherent complexity of the problems they face."},uuid:"0|11"},$R[357]={content:$R[358]={type:"header",text:"Why Theory Matters in Practice"},uuid:"0|12"},$R[359]={content:$R[360]={type:"text",text:"This might all seem abstract, but theoretical computer science has profound practical implications.\n\n* **Algorithm Design:** Understanding computational limits helps us know when to search for a faster algorithm and when the one we have is likely the best we can do.\n* **Cryptography:** Modern security is built on theoretical foundations. The belief that it's computationally hard to factor large numbers is what keeps online transactions secure. If someone found a fast factoring algorithm, much of our digital security would crumble.\n* **Compilers:** When you write code in a language like Python or Java, a compiler (or interpreter) translates it into machine instructions. The design of these compilers relies on the theory of formal languages and automata—the very models we just discussed.\n* **Artificial Intelligence:** As we build more complex AI, questions about the limits of learning, knowledge representation, and reasoning become central. These are, at their core, questions of theoretical computer science."},uuid:"0|13"},$R[361]={content:$R[362]={type:"text",text:"By studying the theory, we gain a deeper, more principled understanding of our tools and their capabilities. It allows us to innovate and solve new problems, confident that we are building on a solid foundation."},uuid:"0|14"},$R[363]={content:$R[364]={type:"text",text:"Time to test what you've learned about these core ideas."},uuid:"0|15"},$R[365]={content:$R[366]={type:"quiz",questions:$R[367]=[$R[368]={text:"What is the primary focus of theoretical computer science?",options:$R[369]=[$R[370]={text:"Writing efficient code for specific applications like web browsers.",followup:"This is the domain of software engineering. While informed by theory, it's about practical application rather than foundational principles.",isRightAnswer:!1},$R[371]={text:"Building the fastest physical computer hardware.",followup:"That is the focus of computer engineering. Theoretical computer science is more concerned with the abstract principles of computation.",isRightAnswer:!1},$R[372]={text:"Designing user-friendly graphical interfaces.",followup:"This is part of human-computer interaction (HCI) and UI/UX design, not theoretical computer science.",isRightAnswer:!1},$R[373]={text:"Understanding the fundamental capabilities and limits of computation.",followup:"Correct. It explores what is possible to compute, regardless of the specific hardware or programming language used.",isRightAnswer:!0}]},$R[374]={text:"The Halting Problem is a famous example of an 'uncomputable' problem. What does this mean?",options:$R[375]=[$R[376]={text:"It refers to a program that halts due to a power failure.",followup:"The Halting Problem is a conceptual, mathematical problem, not one related to physical hardware failures.",isRightAnswer:!1},$R[377]={text:"It means the problem is too difficult for any current computer to solve, but future technology might be able to.",followup:"This describes a computationally hard problem, not an uncomputable one. Uncomputability is a fundamental limit, not a technological one.",isRightAnswer:!1},$R[378]={text:"It means no algorithm can ever be created that can determine, for all possible inputs, whether an arbitrary program will finish running or loop forever.",followup:"Exactly. Alan Turing proved that such a universal 'halt checker' is impossible to build, demonstrating a fundamental limit of computation.",isRightAnswer:!0}]},$R[379]={text:"The Church-Turing thesis makes a powerful claim about the nature of computation. What is the core idea?",options:$R[380]=[$R[381]={text:"That all computational problems are, in theory, solvable.",followup:"This is incorrect. The existence of uncomputable problems like the Halting Problem directly contradicts this idea.",isRightAnswer:!1},$R[382]={text:"That modern computers have surpassed the theoretical limits defined by Turing.",followup:"While much faster and more complex, modern computers are still fundamentally equivalent to Turing machines in terms of what they can compute.",isRightAnswer:!1},$R[383]={text:"That any problem solvable by an algorithm can be solved by a Turing machine.",followup:"Correct. This thesis posits that the Turing machine is a universal model for anything we intuitively think of as 'computable'.",isRightAnswer:!0},$R[384]={text:"That lambda calculus, developed by Alonzo Church, is a more powerful model than Turing's machine.",followup:"The thesis states they are equivalent in computational power, not that one is superior.",isRightAnswer:!1}]},$R[385]={text:"Why is the theory of computational models, like the hierarchy from simple automata to Turing machines, useful in practice?",options:$R[386]=[$R[387]={text:"Its primary use is in building the physical circuits inside a computer's CPU.",followup:"While related, the design of physical circuits is more in the realm of computer engineering. The theory of computation is more abstract.",isRightAnswer:!1},$R[388]={text:"It helps computer scientists choose the right level of computational power for a given task, leading to more efficient solutions.",followup:"Correct. For example, validating an email format doesn't require the full power of a Turing machine; a much simpler model (a finite automaton) is more efficient.",isRightAnswer:!0},$R[389]={text:"It proves that only the most powerful model, the Turing machine, should be used for all programming tasks.",followup:"This is inefficient. The hierarchy is useful precisely because it helps us choose the *simplest* model that can solve the problem, like using a nutcracker instead of a sledgehammer.",isRightAnswer:!1}]},$R[390]={text:"The security of many modern cryptographic systems, like those used for online banking, relies on a principle from theoretical computer science. What is that principle?",options:$R[391]=[$R[392]={text:"That certain mathematical problems, like factoring very large numbers, are believed to be computationally hard to solve quickly.",followup:"That's right. The security rests on the assumption that no efficient algorithm exists to solve these 'hard' problems with current or foreseeable technology.",isRightAnswer:!0},$R[393]={text:"That computer programs can be formally proven to be 100% free of security bugs.",followup:"While formal verification is a field of study, it's extremely difficult to apply to large, complex systems, and it's not the core principle behind most modern cryptography.",isRightAnswer:!1},$R[394]={text:"That all data can be encrypted in a way that is mathematically impossible to break.",followup:"While the goal is strong encryption, very few systems are proven to be 'mathematically impossible' to break. Security often relies on computational difficulty, not impossibility.",isRightAnswer:!1}]}]},uuid:"0|16"},$R[395]={content:$R[396]={type:"text",text:"Theoretical computer science gives us the essential language and framework for reasoning about computation. It's the map that guides us through the landscape of what is possible in the digital world."},uuid:"0|17"}]},$R[397]={uuid:"1",title:"Models of Computation",includesKnowledgeBase:!1,hasDemonstratedMastery:!1,streaming:!1,blocks:$R[398]=[$R[399]={content:$R[400]={type:"header",text:"Models of Computation"},uuid:"1|0"},$R[401]={content:$R[402]={type:"text",text:"In the last section, we talked about theoretical computer science as the study of what can be computed. But to study computation, we need a clear, precise way to talk about what a “computation” actually is. We need a formal model.\n\nA model of computation is an abstract machine, a mathematical idealization that strips away the complexities of real hardware like processors and memory chips. It focuses only on the fundamental steps of a computational process. By using these models, we can reason about the limits of algorithms and computers in a universal way, regardless of the specific technology used to build them."},uuid:"1|1"},$R[403]={content:$R[404]={type:"header",text:"The All-Powerful Turing Machine"},uuid:"1|2"},$R[405]={content:$R[406]={type:"text",text:"Imagine a machine that's incredibly simple but can, in principle, solve any problem that any computer can. That's the idea behind the Turing machine, conceived by Alan Turing in 1936. It’s the bedrock model for understanding computation.\n\nA Turing machine consists of a few basic parts:\n\n1. **An infinite tape:** Think of it as a long strip of paper, divided into cells. Each cell can hold a single symbol (like '1', '0', or a blank space).\n2. **A read/write head:** This device can read the symbol in the cell it's currently on, write a new symbol in its place, and move one cell to the left or right.\n3. **A state register:** This stores the machine's current “state,” which is just a label for its current configuration (e.g., State A, State B). There are a finite number of these states.\n4. **A table of instructions:** This is the machine's program. It tells the head what to do based on its current state and the symbol it just read. An instruction looks something like this: *“If you are in State A and you read a ‘1’, then write a ‘0’, move one step to the right, and change to State B.”*"},uuid:"1|3"},$R[407]={content:$R[408]={type:"text",text:"The machine starts in an initial state with an input written on the tape. It then follows its instructions, step by step, changing the tape's contents until it reaches a special \"halt\" state. The symbols left on the tape are the output.\n\nThis simple setup is profoundly powerful. The Church-Turing thesis, a fundamental principle of computer science, states that any problem that can be solved by an algorithm can be solved by a Turing machine."},uuid:"1|5"},$R[409]={content:$R[410]={type:"blockquote",text:"Essentially, if you can write a computer program to do something, a Turing machine can do it too. It is the universal model of what it means to be 'computable'."},uuid:"1|6"},$R[411]={content:$R[412]={type:"realImage",url:"https://oboe-storage.s3.amazonaws.com/dev/imagesReal/v1/course-4584/9218a442-78de-47a6-9211-ea37bc993323.jpeg",attributionUrl:"https://commons.wikimedia.org/wiki/File:Model_of_a_Turing_machine.jpg",caption:"A physical model of a Turing machine, demonstrating its core components: a tape, reels, and a processing unit."},uuid:"1|7"},$R[413]={content:$R[414]={type:"header",text:"A Simpler Model: Finite Automata"},uuid:"1|8"},$R[415]={content:$R[416]={type:"text",text:"While Turing machines are powerful, they are often more complex than needed for many simple tasks. For problems that don't require memory storage, we can use a much simpler model called a finite automaton (FA), also known as a finite state machine.\n\nUnlike a Turing machine, a finite automaton has no tape to write on. Its only memory is its current state. It simply reads an input string of symbols one at a time, from beginning to end, and changes state based on what it reads."},uuid:"1|9"},$R[417]={content:$R[418]={type:"definition",term:"automaton",definition:"A self-operating machine, or a machine or control mechanism designed to automatically follow a predetermined sequence of operations.",syllables:$R[419]=["au","tom","a","ton"],phonetic:"/ɔːˈtɒmətən/",partOfSpeech:"noun",exampleUsage:"The vending machine is a simple automaton that dispenses a drink after receiving money."},uuid:"1|10"},$R[420]={content:$R[421]={type:"text",text:"A finite automaton has a few key features:\n\n* A finite set of states.\n* A single starting state.\n* One or more accepting (or final) states.\n* A set of transition rules that dictate how to move from one state to another based on the input symbol.\n\nThe machine processes a string of characters. If, after reading the entire string, the machine is in an accepting state, the string is accepted. Otherwise, it is rejected."},uuid:"1|11"},$R[422]={content:$R[423]={type:"text",text:"The diagram above shows a finite automaton that checks if a binary string has an even number of zeros. It starts in state $S_0$. If it reads a '1', it stays in the same state. If it reads a '0', it switches to the other state. Since $S_0$ is the accepting state, any string that leaves the machine in state $S_0$ (like '11', '00', '1010') will be accepted."},uuid:"1|13"},$R[424]={content:$R[425]={type:"header",text:"Models and Their Roles"},uuid:"1|14"},$R[426]={content:$R[427]={type:"text",text:"Turing machines and finite automata represent two ends of a spectrum. The Turing machine is a model of general-purpose computation, defining the absolute limits of what is algorithmically possible. Its role is primarily theoretical, helping us understand the nature of computability.\n\nFinite automata are much less powerful but are incredibly useful in practice. They are the basis for many real-world applications, including:\n\n* **Text parsing:** Compilers use them to check if code follows the correct syntax (a process called lexical analysis).\n* **Network protocols:** Devices use state machines to manage connections.\n* **Simple control systems:** Vending machines, traffic lights, and elevators all operate based on finite state logic."},uuid:"1|15"},$R[428]={content:$R[429]={type:"table",markdown:"| Model | Memory | Power | Key Application |\n|---|---|---|---|\n| **Turing Machine** | Infinite tape | Universal computation | Theoretical foundation of computer science |\n| **Finite Automaton** | Current state only | Regular language recognition | Compilers, network protocols, hardware design |"},uuid:"1|16"},$R[430]={content:$R[431]={type:"text",text:"By studying these different models, we gain a deeper appreciation for the trade-offs in computation. Sometimes, the full power of a Turing machine is necessary. Other times, the elegant simplicity of a finite automaton is the perfect tool for the job. Understanding these models is the first step toward analyzing how efficiently an algorithm can solve a problem."},uuid:"1|17"},$R[432]={content:$R[433]={type:"quiz",questions:$R[434]=[$R[435]={text:"What is the primary purpose of a formal model of computation in theoretical computer science?",options:$R[436]=[$R[437]={text:"To design the physical architecture of modern CPUs and memory chips.",followup:"Models of computation are abstract and mathematical, focusing on the fundamental steps of a process, not the physical hardware implementation.",isRightAnswer:!1},$R[438]={text:"To write faster and more efficient software for specific applications.",followup:"While understanding these models can lead to better algorithm design, their primary purpose is theoretical—to define computability itself, not to optimize specific code.",isRightAnswer:!1},$R[439]={text:"To create a universal programming language that works on all hardware.",followup:"While related to computation, the goal is not to create a specific language but to understand the underlying principles of what any language or machine can do.",isRightAnswer:!1},$R[440]={text:"To provide a precise, abstract framework for defining and studying what 'computation' is.",followup:"Correct. Models like the Turing machine offer a formal, universal way to reason about algorithms and the limits of what can be computed.",isRightAnswer:!0}]},$R[441]={text:"Which of the following components is part of a Turing machine but NOT a finite automaton?",options:$R[442]=[$R[443]={text:"A set of transition rules",followup:"Both models use transition rules to determine how to move from one state to another based on input.",isRightAnswer:!1},$R[444]={text:"A finite set of states",followup:"Both models include a finite set of states to track their current configuration.",isRightAnswer:!1},$R[445]={text:"A starting state",followup:"Both models require a defined starting state to begin their process.",isRightAnswer:!1},$R[446]={text:"A tape for reading and writing data",followup:"Correct. The infinite tape serves as the Turing machine's memory, which a finite automaton lacks.",isRightAnswer:!0}]},$R[447]={text:"A simple vending machine that accepts coins and dispenses a product when a certain amount is reached is best modeled by which computational concept?",options:$R[448]=[$R[449]={text:"A Turing machine",followup:"A Turing machine is far too powerful. The vending machine has limited memory (its current state) and doesn't need to solve general-purpose problems.",isRightAnswer:!1},$R[450]={text:"The Church-Turing thesis",followup:"The Church-Turing thesis is a principle about the limits of computation, not a model for a specific device like a vending machine.",isRightAnswer:!1},$R[451]={text:"A finite automaton (finite state machine)",followup:"Correct. A vending machine operates based on a finite number of states (e.g., '0 cents entered', '25 cents entered') and transitions between them based on input (coins).",isRightAnswer:!0}]},$R[452]={text:"True or False: The Church-Turing thesis states that any problem that can be solved by an algorithm can also be solved by a finite automaton.",options:$R[453]=[$R[454]={text:"True",followup:"Incorrect. The thesis refers to the Turing machine, not the finite automaton. Finite automata are much less powerful and cannot solve all algorithmic problems.",isRightAnswer:!1},$R[455]={text:"False",followup:"Correct. The Church-Turing thesis equates the intuitive notion of an algorithm with the power of a Turing machine, which is a model of general-purpose computation.",isRightAnswer:!0}]},$R[456]={text:"In a Turing machine, the table of instructions determines the next action based on which two pieces of information?",options:$R[457]=[$R[458]={text:"The starting state and the final output on the tape",followup:"The starting state is only used once at the beginning, and the final output is the result, not an input to the instructions.",isRightAnswer:!1},$R[459]={text:"The current state and the symbol on the current tape cell",followup:"Correct. The machine's 'program' is a set of rules that say, 'If in state X and reading symbol Y, then do Z.'",isRightAnswer:!0},$R[460]={text:"The number of accepting states and the number of symbols used",followup:"These are properties of the machine's overall design, not the specific information used for each step-by-step decision.",isRightAnswer:!1},$R[461]={text:"The length of the tape and the position of the read/write head",followup:"The tape is infinitely long, and the head's position is a result of the instructions, not an input to them.",isRightAnswer:!1}]}]},uuid:"1|18"}]},$R[462]={uuid:"2",title:"Computability Theory",includesKnowledgeBase:!1,hasDemonstratedMastery:!1,streaming:!1,blocks:$R[463]=[$R[464]={content:$R[465]={type:"header",text:"The Edge of Computation"},uuid:"2|0"},$R[466]={content:$R[467]={type:"text",text:"We've seen that Turing machines provide a powerful, universal model for what it means to compute. This naturally leads to a big question: can we solve any problem with an algorithm, as long as we're clever enough? The answer, surprisingly, is no. There are fundamental limits to what computation can achieve."},uuid:"2|1"},$R[468]={content:$R[469]={type:"text",text:"To explore these limits, computer scientists classify problems based on whether an algorithm can solve them. A problem is **decidable** if there's an algorithm that can take any input for the problem and is guaranteed to halt with a correct 'yes' or 'no' answer. Think of checking if a number is even. You can write a simple program that always finishes and gives the right answer."},uuid:"2|2"},$R[470]={content:$R[471]={type:"blockquote",text:"A problem is decidable if a Turing machine can be constructed that halts for every input and correctly answers 'yes' or 'no'."},uuid:"2|3"},$R[472]={content:$R[473]={type:"text",text:"An **undecidable** problem, on the other hand, is one for which no such algorithm can possibly exist. It’s not that we haven’t found the algorithm yet. It’s that we can prove one can never be created. This isn't about problems that are just very hard or take a long time to solve; it's about problems that are algorithmically impossible."},uuid:"2|4"},$R[474]={content:$R[475]={type:"header",text:"The Halting Problem"},uuid:"2|5"},$R[476]={content:$R[477]={type:"text",text:"The most famous undecidable problem is the Halting Problem, first proven to be unsolvable by Alan Turing. It asks a seemingly simple question: Can you write a single program that can analyze *any* other program and its input, and tell you if that program will eventually stop (halt) or run forever in an infinite loop?"},uuid:"2|6"},$R[478]={content:$R[479]={type:"text",text:"This would be an incredibly useful tool. A compiler could use it to warn you about infinite loops before you even run your code. But it's impossible. We can prove this with a logical contradiction."},uuid:"2|7"},$R[480]={content:$R[481]={type:"text",text:"Imagine we *do* have a program that solves the Halting Problem. Let's call it `Halts(program, input)`. It returns `true` if `program` halts on `input`, and `false` otherwise."},uuid:"2|8"},$R[482]={content:$R[483]={type:"text",text:"Now, let's create a new, mischievous program called `Paradox` that uses `Halts` as a component. `Paradox` takes one input: the source code of another program, which we'll call `prog`."},uuid:"2|9"},$R[484]={content:$R[485]={type:"code",markdown:"```\nfunction Paradox(prog) {\n // Paradox asks our magical Halts function:\n // \"Will 'prog' halt if given its own source code as input?\"\n if (Halts(prog, prog) == true) {\n // If Halts says 'yes', Paradox enters an infinite loop.\n loop forever;\n } else {\n // If Halts says 'no', Paradox immediately halts.\n return;\n }\n}\n```"},uuid:"2|10"},$R[486]={content:$R[487]={type:"text",text:"Here's the crucial step. What happens if we feed the `Paradox` program its own source code as input? What is the result of `Paradox(Paradox)`?"},uuid:"2|11"},$R[488]={content:$R[489]={type:"text",text:"Let's trace the logic:\n1. Inside `Paradox`, the `if` statement calls `Halts(Paradox, Paradox)`.\n2. If `Halts` returns `true` (meaning `Paradox` will halt on this input), our program's logic dictates that it must `loop forever`. So, it doesn't halt. This is a contradiction.\n3. If `Halts` returns `false` (meaning `Paradox` will run forever on this input), our program's logic dictates that it must `return` immediately. So, it halts. This is also a contradiction."},uuid:"2|12"},$R[490]={content:$R[491]={type:"blockquote",text:"No matter what `Halts` answers, the outcome is the opposite of its prediction. The only logical conclusion is that our initial assumption was wrong. A general-purpose `Halts` program cannot exist."},uuid:"2|13"},$R[492]={content:$R[493]={type:"header",text:"A Universal Agreement"},uuid:"2|14"},$R[494]={content:$R[495]={type:"text",text:"The fact that a Turing machine cannot solve the Halting Problem is a profound statement. But how do we know some other, more powerful type of computing machine couldn't solve it? What if we built a computer based on quantum mechanics or biological processes?"},uuid:"2|15"},$R[496]={content:$R[497]={type:"text",text:"This is where the **Church-Turing thesis** comes in. It’s not a mathematical theorem that can be proven, but rather a fundamental principle of computer science that has held true for decades. The thesis states that any function that can be computed by an algorithm can be computed by a Turing machine."},uuid:"2|16"},$R[498]={content:$R[499]={type:"blockquoteWithCitation",text:"Computational Thinking is a systematic approach to solving problems, involving breaking them down, identifying patterns, abstracting details, and developing algorithms.",assetId:3127270},uuid:"2|17"},$R[500]={content:$R[501]={type:"text",text:"In other words, all known powerful and reasonable models of computation (like lambda calculus, cellular automata, and even quantum computers) are equivalent to or weaker than a Turing machine in terms of what problems they can solve. They might solve problems *faster*, but they can't solve any *new* classes of problems, like the Halting Problem."},uuid:"2|18"},$R[502]={content:$R[503]={type:"text",text:"The Church-Turing thesis gives us confidence that the limits we discover with Turing machines are not just limits of one particular model. They are fundamental limits of computation itself."},uuid:"2|19"},$R[504]={content:$R[505]={type:"header",text:"Beyond Halting"},uuid:"2|20"},$R[506]={content:$R[507]={type:"text",text:"The Halting Problem is just one of many undecidable problems. Once you prove one problem is undecidable, you can prove others are too by showing that a solution to a new problem would imply a solution to the Halting Problem."},uuid:"2|21"},$R[508]={content:$R[509]={type:"text",text:"For example, Post's Correspondence Problem is another famous undecidable problem. It involves collections of dominoes with strings on the top and bottom halves. The question is whether you can arrange the dominoes in a sequence (using as many of each type as you want) so that the string of top halves matches the string of bottom halves."},uuid:"2|22"},$R[510]={content:$R[511]={type:"text",text:"This might seem like a toy problem, but its undecidability has real consequences. For instance, it's related to the impossibility of creating a perfect virus scanner. A clever virus could be constructed in a way that determining its behavior is equivalent to solving an undecidable problem. Any scanner that claims to be perfect would either miss this virus or falsely flag safe programs."},uuid:"2|24"},$R[512]={content:$R[513]={type:"text",text:"Understanding undecidability doesn't stop us from trying to solve problems. It just helps us recognize which problems can't be solved perfectly for all cases. For these, we must rely on heuristics, approximations, or solutions that work for a subset of inputs. It re-frames our goal from finding a universal algorithm to finding practical solutions that work most of the time."},uuid:"2|25"},$R[514]={content:$R[515]={type:"quiz",questions:$R[516]=[$R[517]={text:"What is the defining characteristic of a decidable problem?",options:$R[518]=[$R[519]={text:"An algorithm exists that halts with a correct 'yes' or 'no' answer for every possible input.",followup:"Correct. A decidable problem has an algorithm, called a decider, that is guaranteed to terminate and give the right answer for any instance of the problem.",isRightAnswer:!0},$R[520]={text:"It can be solved efficiently by a computer.",followup:"This describes problems of low computational complexity, but decidability is about whether a problem can be solved at all, regardless of time.",isRightAnswer:!1},$R[521]={text:"It has a finite number of possible solutions.",followup:"The number of solutions isn't what makes a problem decidable. The key is whether an algorithm can always find the correct answer and halt.",isRightAnswer:!1},$R[522]={text:"Humans have already found a working algorithm to solve it.",followup:"A problem is decidable if an algorithm can exist, even if we haven't discovered it yet. Its decidability is an inherent property.",isRightAnswer:!1}]},$R[523]={text:"The Halting Problem asks whether it's possible to create a single program that can analyze ___ and determine if it will eventually stop or loop forever.",options:$R[524]=[$R[525]={text:"programs written in a specific language like Python",followup:"The problem is fundamental to computation itself and is not limited to a single programming language.",isRightAnswer:!1},$R[526]={text:"a Turing machine with a blank tape",followup:"This is a specific instance, but the Halting Problem is more general. It must work for any program with any input.",isRightAnswer:!1},$R[527]={text:"programs known to have infinite loops",followup:"The challenge of the Halting Problem is that it must work for *any* program, not just ones we already know the behavior of.",isRightAnswer:!1},$R[528]={text:"any given program and its input",followup:"Correct. The Halting Problem is about creating a universal analyzer that works for any arbitrary program and any arbitrary input given to it.",isRightAnswer:!0}]},$R[529]={text:"The proof that the Halting Problem is undecidable relies on a logical contradiction. What happens if you run a hypothetical Halting Problem solver on a special 'Paradox' program that does the opposite of what the solver predicts?",options:$R[530]=[$R[531]={text:"If the solver predicts the 'Paradox' program will halt, the program loops forever.",followup:"Correct. And if the solver predicts the 'Paradox' program will loop, the program halts. In either case, the solver is wrong, proving such a perfect solver cannot exist.",isRightAnswer:!0},$R[532]={text:"The solver takes an infinitely long time to analyze the 'Paradox' program.",followup:"The premise of a Halting Problem solver is that it must always halt with an answer. The contradiction shows that this premise is impossible to fulfill.",isRightAnswer:!1},$R[533]={text:"The 'Paradox' program crashes the computer.",followup:"The proof is a logical one, not one about hardware limitations. The contradiction exists in the abstract logic of the program.",isRightAnswer:!1}]},$R[534]={text:"What is the central claim of the Church-Turing thesis?",options:$R[535]=[$R[536]={text:"Any problem that is undecidable for a Turing machine could be solved by a more powerful, yet-to-be-invented computer.",followup:"Incorrect. The thesis suggests the opposite: that any reasonable model of computation will have the same fundamental limits as a Turing machine.",isRightAnswer:!1},$R[537]={text:"Any function that can be computed by an algorithm can also be computed by a Turing machine.",followup:"Correct. The Church-Turing thesis states that the Turing machine is a universal model for everything we consider 'computation'.",isRightAnswer:!0},$R[538]={text:"All problems in computer science can eventually be solved.",followup:"Incorrect. The existence of undecidable problems like the Halting Problem directly refutes this idea.",isRightAnswer:!1},$R[539]={text:"Turing machines are the fastest possible model of computation.",followup:"Incorrect. The thesis is about computability (what can be solved), not complexity (how fast it can be solved). Other models, like quantum computers, may be faster for certain problems.",isRightAnswer:!1}]},$R[540]={text:"The existence of undecidable problems, such as Post's Correspondence Problem, has real-world consequences like making it impossible to create a perfect virus scanner.",options:$R[541]=[$R[542]={text:"True",followup:"Correct. Determining the exact behavior of any arbitrary program is undecidable. A virus could be constructed such that analyzing it is equivalent to solving the Halting Problem, meaning a scanner that is 100% accurate for all possible files cannot exist.",isRightAnswer:!0},$R[543]={text:"False",followup:"This is true. The undecidability of certain problems places fundamental limits on what software, like a virus scanner, can perfectly achieve for all possible inputs.",isRightAnswer:!1}]}]},uuid:"2|26"},$R[544]={content:$R[545]={type:"text",text:"These concepts form the boundary of what is possible with computation. While we constantly push the limits with faster hardware and smarter algorithms, the wall of undecidability remains, a fundamental feature of logic and computation."},uuid:"2|27"}]},$R[546]={uuid:"3",title:"Introduction to Complexity Theory",includesKnowledgeBase:!1,hasDemonstratedMastery:!1,streaming:!1,blocks:$R[547]=[$R[548]={content:$R[549]={type:"header",text:"What Makes a Problem Hard?"},uuid:"3|0"},$R[550]={content:$R[551]={type:"text",text:"We already know that some problems are flat-out impossible for computers to solve. These are the *undecidable* problems. But among the problems that *are* solvable, some are much harder than others.\n\nImagine sorting a deck of 52 playing cards. It's a straightforward task. Now imagine you're a delivery driver with 52 packages to drop off. Finding the absolute shortest route that visits every address is a monumentally harder problem. Both are solvable, but the resources required—time and computational power—are vastly different.\n\nThis is the core idea of **computational complexity theory**: it's not about whether a problem *can* be solved, but about how many resources it takes to solve it. It helps us classify problems based on their difficulty, giving us a framework to understand why some algorithms are fast and others are hopelessly slow."},uuid:"3|1"},$R[552]={content:$R[553]={type:"header",text:"The P Class: Easy Problems"},uuid:"3|2"},$R[554]={content:$R[555]={type:"text",text:"In complexity theory, problems that are considered “easy” or “tractable” belong to a class called **P**. The 'P' stands for **polynomial time**."},uuid:"3|3"},$R[556]={content:$R[557]={type:"blockquote",text:"A problem is in P if it can be solved by an algorithm whose running time increases polynomially with the size of the input."},uuid:"3|4"},$R[558]={content:$R[559]={type:"text",text:"What does that mean? If you have an input of size $n$, the number of steps the algorithm takes is proportional to some power of $n$, like $n^2$, $n^3$, or just $n$. If you double the input size, the time to solve the problem might go up by a factor of four or eight, but it won't explode into an astronomical number.\n\nMany everyday computational tasks are in P:\n\n* Searching for a name in a phone book.\n* Sorting a list of numbers.\n* Finding the shortest path between two points on a map (like GPS navigation)."},uuid:"3|5"},$R[560]={content:$R[561]={type:"header",text:"The NP Class: Easy to Check"},uuid:"3|6"},$R[562]={content:$R[563]={type:"text",text:"Now for a class of problems that are a bit trickier: **NP**. The 'NP' stands for **Nondeterministic Polynomial time**, which is a technical way of describing a simple concept: problems where a proposed solution can be *verified* quickly.\n\nThink about a Sudoku puzzle. Finding the solution from a blank grid can be very difficult and might involve a lot of trial and error. But if someone hands you a completed Sudoku grid and asks, \"Is this a valid solution?\", you can check it very easily. You just go through each row, column, and 3x3 box to make sure the numbers 1 through 9 appear exactly once. This verification process is fast—it's a polynomial-time task."},uuid:"3|7"},$R[564]={content:$R[565]={type:"blockquote",text:"A problem is in NP if a proposed solution can be verified for correctness in polynomial time."},uuid:"3|8"},$R[566]={content:$R[567]={type:"text",text:"This class includes all the problems in P. After all, if you can solve a problem quickly (in P), you can certainly verify a solution for it quickly. You can just solve it yourself and see if your answer matches the proposed one.\n\nBut NP also contains problems, like Sudoku or the Traveling Salesperson Problem, for which we don't know any fast way to find a solution. This leads to one of the biggest open questions in all of computer science."},uuid:"3|9"},$R[568]={content:$R[569]={type:"header",text:"P vs. NP"},uuid:"3|10"},$R[570]={content:$R[571]={type:"text",text:"We know that every problem in P is also in NP ($P \\subseteq NP$). The great unanswered question is whether P and NP are actually the same class. In other words, is it true that for any problem where we can *verify* a solution quickly, we can also *find* a solution quickly?"},uuid:"3|11"},$R[572]={content:$R[573]={type:"latexFormula",formula:"$$\nP = NP?\n$$",explanation:null},uuid:"3|12"},$R[574]={content:$R[575]={type:"text",text:"It feels intuitively like they should be different. Just because you can recognize a great painting doesn't mean you can create one. But no one has been able to prove it. This is the P versus NP problem, and solving it would earn you a \\$1 million prize from the Clay Mathematics Institute.\n\nMost computer scientists believe that P does not equal NP. They believe there are problems in NP that are fundamentally harder to solve than to verify."},uuid:"3|13"},$R[576]={content:$R[577]={type:"header",text:"The Hardest Problems in NP"},uuid:"3|15"},$R[578]={content:$R[579]={type:"text",text:"Within NP, there's a special set of problems known as **NP-complete**. These are, in a sense, the \"hardest\" problems in NP. They have two defining characteristics:\n\n1. The problem is in NP.\n2. Every other problem in NP can be transformed (or \"reduced\") into this problem in polynomial time.\n\nThat second point is crucial. It means if you found a fast, polynomial-time algorithm for just *one* NP-complete problem, you would have found a fast algorithm for *every single problem in NP*. You would have proven that P = NP and changed the world.\n\nThe Traveling Salesperson Problem is a classic example. Another is the Boolean Satisfiability Problem (SAT), which involves finding inputs to make a complex logical statement true. Thousands of problems in logistics, circuit design, game theory, and bioinformatics have been proven to be NP-complete. Finding an efficient solution for one would unlock efficient solutions for all of them."},uuid:"3|16"},$R[580]={content:$R[581]={type:"blockquote",text:"The discovery of NP-completeness was a huge milestone. It tells us that a vast number of important real-world problems are all computationally tied together. Solve one, solve them all."},uuid:"3|17"},$R[582]={content:$R[583]={type:"text",text:"Understanding complexity classes is not just a theoretical exercise. It tells programmers and engineers which problems they can hope to solve perfectly and which ones require clever workarounds, approximations, or heuristics because an exact, efficient solution is likely out of reach. It provides a vital map of the computational landscape."},uuid:"3|18"},$R[584]={content:$R[585]={type:"quiz",questions:$R[586]=[$R[587]={text:"What is the central focus of computational complexity theory?",options:$R[588]=[$R[589]={text:"Developing faster computer hardware to solve problems more quickly.",followup:"While faster hardware helps, complexity theory is about the inherent difficulty of problems and the efficiency of algorithms, independent of the specific hardware used.",isRightAnswer:!1},$R[590]={text:"Classifying solvable problems based on the resources (like time or memory) required to solve them.",followup:"Correct. Complexity theory is about understanding the practical difficulty of solvable problems, not just whether a solution exists in principle.",isRightAnswer:!0},$R[591]={text:"Determining whether a problem is solvable by a computer at all.",followup:"This is the focus of computability theory, which deals with decidable vs. undecidable problems. Complexity theory focuses on the resources required for problems we already know are solvable.",isRightAnswer:!1},$R[592]={text:"Writing code that is free of bugs and errors.",followup:"This is a goal of software engineering. Complexity theory is a more abstract, mathematical field concerned with algorithm efficiency.",isRightAnswer:!1}]},$R[593]={text:"A problem is in the class P if it can be solved in _________ time.",options:$R[594]=[$R[595]={text:"polynomial",followup:"Correct. 'P' stands for polynomial time. This means the time it takes to solve the problem is proportional to a power of the input size (like $$n^2$$), which is considered efficient.",isRightAnswer:!0},$R[596]={text:"exponential",followup:"Exponential time algorithms are generally considered intractable or 'hard' for large inputs, as the runtime grows explosively. These problems are outside of P.",isRightAnswer:!1},$R[597]={text:"constant",followup:"While constant-time algorithms are in P, the class P includes all problems solvable in polynomial time, which is a much broader category.",isRightAnswer:!1}]},$R[598]={text:"True or False: The defining characteristic of a problem in the class NP is that a proposed solution can be *verified* quickly (in polynomial time).",options:$R[599]=[$R[600]={text:"True",followup:"Correct. 'NP' stands for Nondeterministic Polynomial time. The key idea is that if you are given a potential solution, you can check if it's correct in polynomial time, even if finding the solution in the first place is very difficult.",isRightAnswer:!0},$R[601]={text:"False",followup:"This statement is true. The 'verifiability' aspect is the core definition of NP. For example, verifying a solved Sudoku puzzle is easy, but solving it from scratch can be hard.",isRightAnswer:!1}]},$R[602]={text:"Which of the following statements about the relationship between P and NP is known to be true?",options:$R[603]=[$R[604]={text:"Every problem in P is also in NP ( $$P \\subseteq NP$$ ).",followup:"Correct. If a problem can be solved quickly, a proposed solution can certainly be verified quickly (by simply solving it again and comparing the answers). Therefore, P is a subset of NP.",isRightAnswer:!0},$R[605]={text:"Every problem in NP is also in P ( $$NP \\subseteq P$$ ).",followup:"This is equivalent to saying P = NP, which is the great unanswered question in computer science. It has not been proven.",isRightAnswer:!1},$R[606]={text:"It has been proven that P is a proper subset of NP ( $$P \\subset NP$$ ).",followup:"This is what most computer scientists believe, but it has not been proven. Proving or disproving this is the famous P versus NP problem.",isRightAnswer:!1},$R[607]={text:"P and NP are completely separate classes with no overlapping problems.",followup:"This is incorrect. We know for sure that every problem in P is also in NP.",isRightAnswer:!1}]},$R[608]={text:"What makes a problem NP-complete?",options:$R[609]=[$R[610]={text:"It is in NP, and any other NP problem can be reduced to it in polynomial time.",followup:"Correct. This two-part definition is key. It means if you could solve one NP-complete problem efficiently, you could solve all problems in NP efficiently.",isRightAnswer:!0},$R[611]={text:"A solution can be verified, but it takes exponential time to do so.",followup:"The definition of NP requires that a solution can be verified in *polynomial* time.",isRightAnswer:!1},$R[612]={text:"It cannot be solved by any computer.",followup:"This describes an undecidable problem. NP-complete problems are solvable, just not efficiently (as far as we know).",isRightAnswer:!1},$R[613]={text:"It is the easiest problem in NP.",followup:"This is incorrect. NP-complete problems are considered the 'hardest' problems in NP.",isRightAnswer:!1}]}]},uuid:"3|19"}]},$R[614]={uuid:"4",title:"Algorithm Design and Analysis",includesKnowledgeBase:!1,hasDemonstratedMastery:!1,streaming:!1,blocks:$R[615]=[$R[616]={content:$R[617]={type:"header",text:"Crafting Efficient Solutions"},uuid:"4|0"},$R[618]={content:$R[619]={type:"text",text:"Once we understand that a problem is solvable, the next question is, how do we solve it *well*? An algorithm is like a recipe for solving a problem. Just as there are many ways to bake a cake, there are many algorithms to solve a single computational problem. Some are fast and efficient; others are slow and clunky. Algorithm design is the art of creating the fast and efficient ones.\n\nWe don't have to invent a new approach every time. Computer scientists have developed powerful, reusable strategies called paradigms. Let's look at two of the most important ones."},uuid:"4|1"},$R[620]={content:$R[621]={type:"header",text:"Divide and Conquer"},uuid:"4|2"},$R[622]={content:$R[623]={type:"text",text:"The divide and conquer strategy does exactly what its name implies: it breaks a large, complex problem into smaller, more manageable subproblems. These subproblems are usually smaller versions of the original. You solve these little pieces, and then you combine their solutions to get the final answer for the big problem.\n\nImagine you need to find a specific word in a dictionary. You don't start at the first page and read every word. Instead, you open it to the middle. If your word comes alphabetically after the words on that page, you know it's in the second half. You've just thrown away half the dictionary. You repeat the process with the remaining half, dividing the problem again and again until you find the word. This is the core idea of binary search, a classic divide and conquer algorithm.\n\nA great example for sorting data is Merge Sort. It follows three simple steps:\n1. **Divide**: Split the list of items you want to sort into two equal halves.\n2. **Conquer**: Recursively sort each of those halves. If a half only has one item, it's already sorted by definition.\n3. **Combine**: Merge the two sorted halves back into one single, sorted list."},uuid:"4|3"},$R[624]={content:$R[625]={type:"text",text:"This approach is powerful because splitting problems in half repeatedly makes them very small, very quickly."},uuid:"4|5"},$R[626]={content:$R[627]={type:"header",text:"Dynamic Programming"},uuid:"4|6"},$R[628]={content:$R[629]={type:"text",text:"Dynamic programming is another powerful paradigm, perfect for problems that can be broken down into overlapping subproblems. The key idea is to solve each subproblem only once and store its result. If you need to solve the same subproblem again, you just look up the answer instead of re-calculating it.\n\nConsider calculating the Fibonacci sequence, where each number is the sum of the two preceding ones: 1, 1, 2, 3, 5, 8... To find the 6th number ($F_6$), you need $F_5$ and $F_4$. But to find $F_5$, you need $F_4$ and $F_3$. Notice that you'd end up calculating $F_4$ twice. For larger numbers, you'd recalculate the same values many times.\n\nDynamic programming avoids this wasted effort. After calculating $F_4$ the first time, you save the result. When you need it again, you simply retrieve it. This technique of storing results is called memoization."},uuid:"4|7"},$R[630]={content:$R[631]={type:"blockquote",text:"The two key ingredients of a dynamic programming solution are overlapping subproblems and an optimal substructure, meaning the optimal solution to the overall problem can be constructed from the optimal solutions of its subproblems."},uuid:"4|8"},$R[632]={content:$R[633]={type:"header",text:"Measuring Efficiency"},uuid:"4|9"},$R[634]={content:$R[635]={type:"text",text:"How do we know if one algorithm is better than another? We analyze its complexity, which is a measure of the resources it consumes. The two main resources we care about are time (how long it takes to run) and space (how much memory it uses).\n\nTime complexity isn't about measuring seconds or minutes. A program's runtime depends on the computer's speed, the programming language, and other factors. Instead, we measure the number of basic operations the algorithm performs as its input size grows. If you double the input, does the number of operations double? Does it quadruple? Or does it barely change?\n\nThis relationship between the input size ($n$) and the number of operations is what we want to understand. For this, we use a special language called Big O notation."},uuid:"4|10"},$R[636]={content:$R[637]={type:"definition",term:"Big O notation",definition:"A mathematical notation that describes the limiting behavior of a function when the argument tends towards a particular value or infinity. In computer science, it classifies algorithms according to how their run time or space requirements grow as the input size grows.",syllables:$R[638]=["big","oh","no-ta-tion"],phonetic:"/bɪɡ oʊ noʊˈteɪʃən/",partOfSpeech:"noun",exampleUsage:"The time complexity of a linear search is O(n), which is expressed using Big O notation."},uuid:"4|11"},$R[639]={content:$R[640]={type:"text",text:"Big O notation describes the worst-case scenario. It gives us an upper bound on how the algorithm will perform. For example, if an algorithm has a time complexity of $O(n)$, we say its runtime grows linearly with the input size $n$. If the complexity is $O(n^2)$, its runtime grows quadratically. The goal is to find algorithms with the slowest possible growth rate."},uuid:"4|12"},$R[641]={content:$R[642]={type:"table",markdown:"| Notation | Name | Example | \n|---|---|---|\n| $O(1)$ | Constant | Looking up an item in an array by its index. | \n| $O(\\log n)$ | Logarithmic | Binary search in a sorted array. | \n| $O(n)$ | Linear | Finding an item in an unsorted list. | \n| $O(n \\log n)$ | Log-Linear | Efficient sorting algorithms like Merge Sort. | \n| $O(n^2)$ | Quadratic | Simple sorting algorithms like Bubble Sort. | \n| $O(2^n)$ | Exponential | Solving the Traveling Salesman problem by brute force. |"},uuid:"4|13"},$R[643]={content:$R[644]={type:"text",text:"Look at the table. An algorithm that is $O(\\log n)$ is much faster for large inputs than one that is $O(n)$. And an $O(n^2)$ algorithm can become unusably slow as the input size increases. Understanding Big O helps you choose the right tool for the job."},uuid:"4|14"},$R[645]={content:$R[646]={type:"blockquoteWithCitation",text:"Data Structures and Algorithms (DSA) provide techniques to organize data and solve computational problems with minimal time and space complexity.",assetId:2791458},uuid:"4|15"},$R[647]={content:$R[648]={type:"text",text:"Let's review some key terms before testing your knowledge."},uuid:"4|16"},$R[649]={content:$R[650]={type:"text",text:"Now, let's see what you've learned."},uuid:"4|17"},$R[651]={content:$R[652]={type:"quiz",questions:$R[653]=[$R[654]={text:"What is the primary goal of algorithm design?",options:$R[655]=[$R[656]={text:"To ensure an algorithm uses the newest programming language features.",followup:"The principles of good algorithm design are language-agnostic. An efficient algorithm will be efficient in any language.",isRightAnswer:!1},$R[657]={text:"To create fast, efficient, and scalable solutions to problems.",followup:"Correct! The art of algorithm design lies in creating solutions that are not just correct, but also perform well in terms of time and memory, especially as the input size grows.",isRightAnswer:!0},$R[658]={text:"To solve problems that have never been solved before.",followup:"While new algorithms solve new problems, algorithm design is often about finding *better* ways to solve existing, well-known problems.",isRightAnswer:!1},$R[659]={text:"To write code that is easy for other programmers to read.",followup:"While readability is important, the core goal of algorithm design is about performance and resource usage.",isRightAnswer:!1}]},$R[660]={text:"Which scenario best illustrates the 'Divide and Conquer' paradigm?",options:$R[661]=[$R[662]={text:"Sorting a large pile of exam papers by splitting the pile in half, giving each half to an assistant to sort, and then merging the two sorted piles.",followup:"Exactly! This is a perfect real-world analogy for Merge Sort, a classic divide and conquer algorithm. The problem is divided, the smaller problems are conquered (sorted), and the results are combined.",isRightAnswer:!0},$R[663]={text:"Calculating a complex tax return by filling out each form in a specific, required order.",followup:"This describes a sequential process, not one where the problem is broken into smaller, independent pieces.",isRightAnswer:!1},$R[664]={text:"Looking up the results of a previous calculation to avoid doing the same work again.",followup:"This is the core idea of dynamic programming, specifically memoization, not divide and conquer.",isRightAnswer:!1},$R[665]={text:"Trying every possible key on a keychain until one opens a lock.",followup:"This is an example of a brute-force or linear search approach, not divide and conquer.",isRightAnswer:!1}]},$R[666]={text:"The technique of storing the results of expensive function calls and returning the cached result when the same inputs occur again is called _______.",options:$R[667]=[$R[668]={text:"Combination",followup:"The 'combine' step is part of the divide and conquer paradigm, like in Merge Sort, but it's not the term for storing results.",isRightAnswer:!1},$R[669]={text:"Memoization",followup:"Correct! Memoization is the specific term for this optimization technique, which is a hallmark of dynamic programming.",isRightAnswer:!0},$R[670]={text:"Iteration",followup:"Iteration involves repeating a process, often with loops, but doesn't specifically refer to storing results to avoid re-computation.",isRightAnswer:!1},$R[671]={text:"Recursion",followup:"Recursion is a technique where a function calls itself. While it's often used in dynamic programming, it isn't the term for storing results.",isRightAnswer:!1}]},$R[672]={text:"An algorithm has a time complexity of $$O(n^2)$$. If the input size doubles, how does the number of operations roughly change?",options:$R[673]=[$R[674]={text:"It doubles.",followup:"A doubling of operations for a doubling of input size is characteristic of a linear time, $$O(n)$$, algorithm.",isRightAnswer:!1},$R[675]={text:"It stays about the same.",followup:"This would be characteristic of a constant time, $$O(1)$$, algorithm.",isRightAnswer:!1},$R[676]={text:"It increases by a small, fixed amount.",followup:"This doesn't describe the quadratic growth of an $$O(n^2)$$ algorithm.",isRightAnswer:!1},$R[677]={text:"It quadruples.",followup:"Correct! If the number of operations is proportional to $$n^2$$, then doubling the input ($$2n$$) results in $$(2n)^2 = 4n^2$$ operations, which is four times the original.",isRightAnswer:!0}]},$R[678]={text:"Which of the following Big O notations represents the most efficient (fastest growing) algorithm for a very large input?",options:$R[679]=[$R[680]={text:"$$O(n^2)$$",followup:"This represents quadratic growth, which becomes very slow for large inputs.",isRightAnswer:!1},$R[681]={text:"$$O(n)$$",followup:"This is linear growth. It's better than quadratic, but not the best on this list.",isRightAnswer:!1},$R[682]={text:"$$O(\\\\log n)$$",followup:"Correct! Logarithmic time complexity grows very slowly. Algorithms like binary search are extremely efficient for large datasets because of this.",isRightAnswer:!0}]}]},uuid:"4|18"},$R[683]={content:$R[684]={type:"text",text:"By designing algorithms thoughtfully and analyzing their complexity, we can write software that is not just correct, but also fast and scalable."},uuid:"4|19"}]},$R[685]={uuid:"5",title:"Advanced Topics in Complexity",includesKnowledgeBase:!1,hasDemonstratedMastery:!1,streaming:!1,blocks:$R[686]=[$R[687]={content:$R[688]={type:"header",text:"The Frontier of Hardness"},uuid:"5|0"},$R[689]={content:$R[690]={type:"text",text:"We've established that some problems, like those in the NP-complete class, are incredibly difficult to solve exactly. Finding the single best solution often seems to require checking a mind-boggling number of possibilities. In the real world, we rarely have time for that. Instead, we often settle for a \"good enough\" answer—an approximate solution.\n\nBut what if even finding a *good* approximation is just as hard as finding the perfect one? This is where the cutting edge of complexity theory begins. We move beyond simply labeling problems as \"hard\" and start asking, \"how hard is it to even get close?\""},uuid:"5|1"},$R[691]={content:$R[692]={type:"header",text:"Checking Proofs with a Glance"},uuid:"5|2"},$R[693]={content:$R[694]={type:"text",text:"Imagine someone gives you a 1,000-page solution to a colossal math problem. To verify it, you'd have to read the whole thing. But what if there were a way to rewrite that proof, making it much longer but also magically error-correcting? So magical, in fact, that you could verify the entire 1,000-page argument by just opening the new version to three random pages and checking if they're consistent.\n\nThis is the mind-bending idea behind the PCP theorem. PCP stands for Probabilistically Checkable Proofs. It states that for any problem in NP, a proof of a solution (like a filled-in Sudoku grid) can be reformatted into a special, longer proof. This new proof has a powerful property: a verifier can check it by reading only a tiny, constant number of bits from it. With just that small sample, the verifier can determine with very high probability whether the original solution was correct."},uuid:"5|3"},$R[695]={content:$R[696]={type:"blockquote",text:"The PCP theorem transforms the task of verifying a complex proof into a simple spot-check."},uuid:"5|4"},$R[697]={content:$R[698]={type:"text",text:"This might seem like a purely theoretical curiosity, but its implications are profound. The theorem created a powerful bridge between proof verification and the hardness of finding approximate solutions to optimization problems. If you could find a good-enough solution to certain problems, you could use that to build a super-efficient proof checker, one that would violate what we know about the limits of computation.\n\nThis insight allows us to prove that for many NP-hard problems, finding an approximate answer within a certain quality guarantee is itself an NP-hard task. For example, for a problem called MAX-3-SAT, the PCP theorem helps prove it's NP-hard to find a solution that satisfies more than 87.5% of the conditions, even if a perfect solution exists. Getting any closer than that is just as hard as solving the problem perfectly."},uuid:"5|5"},$R[699]={content:$R[700]={type:"header",text:"What Efficient Really Means"},uuid:"5|6"},$R[701]={content:$R[702]={type:"text",text:"When we talk about an algorithm being \"efficient,\" what do we actually mean? Programmers and computer scientists have a strong intuition for this. An algorithm that takes a few seconds or minutes is efficient; one that would take centuries is not. Is there a formal way to capture this idea?\n\nThis is the subject of Cobham's thesis, sometimes called the Cobham-Edmonds thesis. It's not a theorem you can prove, but rather a guiding principle that has shaped computer science. The thesis proposes that the class of problems that are practically solvable, or \"efficiently computable,\" is exactly the class P—problems that can be solved in polynomial time."},uuid:"5|7"},$R[703]={content:$R[704]={type:"blockquote",text:"Cobham's Thesis: An algorithm is considered efficient if and only if it runs in polynomial time."},uuid:"5|8"},$R[705]={content:$R[706]={type:"text",text:"This gives us a concrete mathematical definition for a fuzzy, intuitive concept. Of course, it's a simplification. An algorithm that runs in $O(n^{100})$ time is technically polynomial, but nobody would call it efficient. Likewise, an exponential-time algorithm like $O(1.000001^n)$ might be perfectly fast for the input sizes we encounter in the real world. Despite these edge cases, the thesis holds up remarkably well. The line between polynomial and exponential time has proven to be a robust and reliable indicator of the boundary between practical and impractical computation."},uuid:"5|9"},$R[707]={content:$R[708]={type:"realImage",url:"https://oboe-storage.s3.amazonaws.com/dev/imagesReal/v1/b4f0daa7-6271-410d-95d9-b994eaeb7874.jpeg",attributionUrl:"https://commons.wikimedia.org/wiki/File:CHIP_WAR_%E2%80%94_Book_Review_%26_Summary.jpg",caption:"The design and fabrication of complex computer chips is a field where computational efficiency is paramount."},uuid:"5|10"},$R[709]={content:$R[710]={type:"header",text:"Applications in Security"},uuid:"5|11"},$R[711]={content:$R[712]={type:"text",text:"These advanced ideas aren't just theoretical games. They have direct consequences for cryptography and computer security. The security of many cryptographic systems relies on the presumed hardness of certain mathematical problems. For example, breaking RSA encryption is thought to be as hard as factoring very large numbers.\n\nComplexity theory, especially concepts like hardness of approximation, provides the foundation for these security assumptions. It gives us a framework to reason about not only the difficulty of finding a secret key (an exact solution) but also the difficulty of finding something that is *close* to the key (an approximate solution).\n\nLattice-based cryptography, a promising area for resisting attacks from future quantum computers, is built directly on problems that are proven to be hard to approximate. The security of these systems rests on the strong theoretical evidence that no efficient algorithm, classical or quantum, can even come close to finding the solution. In this way, the abstract boundaries of computation become the digital locks that protect our most sensitive information."},uuid:"5|12"},$R[713]={content:$R[714]={type:"text",text:"Here's a quiz to test your knowledge of these advanced complexity topics."},uuid:"5|13"},$R[715]={content:$R[716]={type:"quiz",questions:$R[717]=[$R[718]={text:"What is the central claim of the PCP (Probabilistically Checkable Proofs) theorem?",options:$R[719]=[$R[720]={text:"It allows a verifier to find the correct solution to an NP problem by checking a few random bits.",followup:"This is a common misunderstanding. The PCP theorem is about *verifying* a given proof, not about *finding* a solution from scratch.",isRightAnswer:!1},$R[721]={text:"All NP problems can be solved quickly using a probabilistic algorithm.",followup:"This is not what the PCP theorem states. It deals with the structure of proofs and verification, not solving the problems themselves in polynomial time.",isRightAnswer:!1},$R[722]={text:"It proves that P is equal to NP.",followup:"This is incorrect. The P vs. NP question is a major unsolved problem in computer science. The PCP theorem provides deep insights into the structure of NP problems but does not solve this question.",isRightAnswer:!1},$R[723]={text:"Any proof for a problem in NP can be reformatted so that a verifier only needs to check a tiny, constant number of bits to be confident of its correctness.",followup:"Correct. This is the core, mind-bending idea of the PCP theorem. It establishes a powerful connection between proof verification and the difficulty of finding approximate solutions.",isRightAnswer:!0}]},$R[724]={text:"Cobham's thesis is a formal mathematical theorem that has been rigorously proven.",options:$R[725]=[$R[726]={text:"True",followup:"Incorrect. Cobham's thesis is a guiding principle or conjecture, not a provable theorem. It formalizes the intuition that 'efficiently solvable' corresponds to polynomial-time algorithms (the class P), but it remains an observation about the nature of practical computation.",isRightAnswer:!1},$R[727]={text:"False",followup:"Correct. Cobham's thesis is a widely accepted guiding principle, but it's not a mathematical theorem that can be proven. It's a proposed definition that links the formal class P with the intuitive notion of 'efficient computation'.",isRightAnswer:!0}]},$R[728]={text:"What is a major implication of the PCP theorem for optimization problems like MAX-3-SAT?",options:$R[729]=[$R[730]={text:"It shows that for many NP-hard problems, finding a solution that is even 'good enough' or approximately correct is also an NP-hard task.",followup:"Correct. The PCP theorem creates a bridge between proof checking and approximation, allowing us to prove that for certain problems, getting within a specific percentage of the optimal answer is just as hard as finding the perfect answer.",isRightAnswer:!0},$R[731]={text:"It proves that no NP-hard problem can ever be approximated.",followup:"This is too strong a statement. Some NP-hard problems have very good approximation algorithms. The PCP theorem helps establish limits on approximation for *specific* problems.",isRightAnswer:!1},$R[732]={text:"It provides a new, efficient algorithm for finding approximate solutions to all NP-hard problems.",followup:"This is incorrect. The PCP theorem is used to prove the *hardness* of finding approximate solutions, not to provide algorithms for finding them.",isRightAnswer:!1}]},$R[733]={text:"How do advanced complexity concepts like hardness of approximation support modern cryptography?",options:$R[734]=[$R[735]={text:"They are used to create simpler mathematical problems for encryption.",followup:"Cryptography relies on the *hardness* of problems, not their simplicity.",isRightAnswer:!1},$R[736]={text:"By proving P = NP, they allow for the creation of unbreakable codes.",followup:"This is incorrect on two counts. First, P=NP has not been proven. Second, if P were equal to NP, most current forms of public-key cryptography would be broken.",isRightAnswer:!1},$R[737]={text:"They provide a theoretical foundation for security by showing that even finding a solution *close* to the secret key is computationally infeasible.",followup:"Correct. For systems like lattice-based cryptography, security relies not just on the difficulty of finding the exact secret key, but on the proven hardness of finding any approximate solution.",isRightAnswer:!0},$R[738]={text:"They guarantee that all encrypted data can be decrypted in polynomial time.",followup:"This is the opposite of the goal. Cryptography relies on problems being *hard* to solve for anyone without the key.",isRightAnswer:!1}]}]},uuid:"5|14"},$R[739]={content:$R[740]={type:"text",text:"These concepts represent the frontier of our understanding of computation. They provide the tools to not only classify problems but also to understand the deep structure of their difficulty, with practical implications for everything from algorithm design to modern cryptography."},uuid:"5|15"}]},$R[741]={uuid:"6",title:"Randomized Algorithms",includesKnowledgeBase:!1,hasDemonstratedMastery:!1,streaming:!1,blocks:$R[742]=[$R[743]={content:$R[744]={type:"header",text:"The Power of Chance"},uuid:"6|0"},$R[745]={content:$R[746]={type:"text",text:"So far, we've treated algorithms as deterministic machines. Given an input, they follow a predictable path to a single, correct output. But what if we introduce a little bit of chaos? What if an algorithm could flip a coin to make a decision?"},uuid:"6|1"},$R[747]={content:$R[748]={type:"text",text:"This is the core idea behind randomized algorithms. They use a source of randomness, like a random number generator, as part of their logic. This might sound counterintuitive. Why leave things to chance when solving a problem? It turns out that for certain problems, embracing randomness can lead to algorithms that are simpler, faster, or even able to solve problems that deterministic methods struggle with."},uuid:"6|2"},$R[749]={content:$R[750]={type:"blockquote",text:"A randomized algorithm uses random numbers to guide its behavior, leading to different execution paths even for the same input."},uuid:"6|3"},$R[751]={content:$R[752]={type:"realImage",url:"https://oboe-storage.s3.amazonaws.com/dev/imagesReal/v1/e87cfd42-ff0c-435c-a350-3b061f56ee36.png",attributionUrl:"https://commons.wikimedia.org/wiki/File:Difference_between_deterministic_and_Nondeterministic.png",caption:"A randomized, or non-deterministic, algorithm can explore many possible paths to a solution."},uuid:"6|4"},$R[753]={content:$R[754]={type:"text",text:"There are two main flavors of randomized algorithms, named after the famous gambling hubs."},uuid:"6|5"},$R[755]={content:$R[756]={type:"definition",term:"Las Vegas Algorithm",definition:"An algorithm that always produces the correct result, but its running time varies based on random choices. The gamble is on speed, not correctness.",syllables:$R[757]=["las","ve","gas","al","go","ri","thm"],phonetic:"/lɑs ˈveɪɡəs ˈælɡəˌrɪðəm/",partOfSpeech:"noun",exampleUsage:"Randomized Quicksort is a classic Las Vegas algorithm because it always sorts the array correctly, but its efficiency depends on the random pivot choices."},uuid:"6|6"},$R[758]={content:$R[759]={type:"text",text:"A great example is Randomized Quicksort. In the standard Quicksort algorithm you've seen, a poor choice of pivot element can lead to a worst-case performance of $O(n^2)$. By simply choosing the pivot randomly, we make that worst-case scenario extremely unlikely. The algorithm still sorts the list correctly every time, but its expected running time becomes a highly efficient $O(n \\log n)$."},uuid:"6|7"},$R[760]={content:$R[761]={type:"definition",term:"Monte Carlo Algorithm",definition:"An algorithm that runs for a predictable amount of time but has a small probability of returning an incorrect result. The gamble is on correctness, not speed.",syllables:$R[762]=["mon","te","car","lo","al","go","ri","thm"],phonetic:"/ˌmɒnti ˈkɑrloʊ ˈælɡəˌrɪðəm/",partOfSpeech:"noun",exampleUsage:"To estimate the area of a complex shape, a Monte Carlo algorithm might randomly sample points and count how many fall inside the shape."},uuid:"6|8"},$R[763]={content:$R[764]={type:"text",text:"Imagine trying to estimate the value of $\\pi$. A Monte Carlo method could involve drawing a square with a circle inside it. If you randomly throw darts at the square, the ratio of darts that land inside the circle to the total number of darts thrown will approximate the ratio of the circle's area to the square's area. With enough throws, you can get a pretty good estimate of $\\pi$. The answer won't be perfectly accurate, but we can make the probability of error very small by running more trials."},uuid:"6|9"},$R[765]={content:$R[766]={type:"header",text:"Analyzing Randomness"},uuid:"6|10"},$R[767]={content:$R[768]={type:"text",text:"Analyzing a randomized algorithm requires a different mindset. Instead of focusing on a single worst-case input, we analyze its *expected performance* over all possible random choices it could make. This is often called probabilistic analysis."},uuid:"6|11"},$R[769]={content:$R[770]={type:"text",text:"For a Las Vegas algorithm, we analyze its **expected running time**. This is the average time the algorithm will take to produce its guaranteed-correct answer. For Randomized Quicksort, while a single run *could* be slow, the average over all possible random pivot choices is fast."},uuid:"6|12"},$R[771]={content:$R[772]={type:"text",text:"For a Monte Carlo algorithm, we analyze its **probability of error**. If an algorithm has a 1% chance of being wrong, that might not be good enough. But what if we could run it five times? If the random choices in each run are independent, the probability of getting the wrong answer all five times becomes minuscule. This ability to amplify correctness by repeating the process makes Monte Carlo algorithms very powerful."},uuid:"6|13"},$R[773]={content:$R[774]={type:"header",text:"Where Randomness Shines"},uuid:"6|14"},$R[775]={content:$R[776]={type:"text",text:"Randomized algorithms are not just a theoretical curiosity; they are essential tools in many areas of computer science."},uuid:"6|15"},$R[777]={content:$R[778]={type:"table",markdown:"| Domain | Application Example |\n|---|---|\n| **Cryptography** | The Miller-Rabin test is a fast, randomized algorithm for checking if a large number is prime. It's crucial for generating the large prime numbers that secure online communication. |\n| **Network Algorithms** | In a large network, routing protocols might use a \"random walk\" approach to discover paths between nodes, which can be simpler and more robust than maintaining a complete map of the network. |\n| **Data Structures** | Skip lists and hash tables use randomness to achieve excellent average-case performance for searching, inserting, and deleting data. |\n| **Machine Learning** | Algorithms like Stochastic Gradient Descent use randomness to efficiently navigate huge datasets and find optimal models. |"},uuid:"6|16"},$R[779]={content:$R[780]={type:"text",text:"The main advantage of randomness is often simplicity and speed. A randomized solution can be much easier to design and implement than a complex deterministic one that has to account for every possible edge case. They can also be more efficient on average than their deterministic counterparts."},uuid:"6|17"},$R[781]={content:$R[782]={type:"text",text:"However, they have limitations. The need for a true source of randomness can be a challenge; computers are deterministic, so they rely on pseudorandom number generators. And for mission-critical applications where even a tiny probability of error is unacceptable, a Monte Carlo algorithm may not be appropriate."},uuid:"6|18"},$R[783]={content:$R[784]={type:"text",text:"Time to check your understanding of these chance-based approaches."},uuid:"6|19"},$R[785]={content:$R[786]={type:"quiz",questions:$R[787]=[$R[788]={text:"What is the defining characteristic of a randomized algorithm?",options:$R[789]=[$R[790]={text:"It always produces an approximate, rather than exact, solution.",followup:"This is a characteristic of Monte Carlo algorithms, but not all randomized algorithms. Las Vegas algorithms, for example, always produce the correct answer.",isRightAnswer:!1},$R[791]={text:"It uses a source of randomness, like a random number generator, as part of its logic.",followup:"Correct! The use of randomness to make decisions is the core idea that separates randomized algorithms from deterministic ones.",isRightAnswer:!0},$R[792]={text:"It can only solve problems for which no deterministic algorithm exists.",followup:"This is incorrect. For example, Randomized Quicksort solves the sorting problem, for which many deterministic algorithms exist.",isRightAnswer:!1},$R[793]={text:"Its performance is identical on every run for a given input.",followup:"This describes a deterministic algorithm. A randomized algorithm's path and performance can vary between runs on the same input due to its random choices.",isRightAnswer:!1}]},$R[794]={text:"Which statement best describes the trade-off between Las Vegas and Monte Carlo algorithms?",options:$R[795]=[$R[796]={text:"Las Vegas algorithms are used for numerical problems; Monte Carlo algorithms are used for sorting problems.",followup:"This is an incorrect generalization. For instance, Randomized Quicksort is a Las Vegas algorithm for sorting, and Monte Carlo methods are widely used for numerical estimations like calculating pi.",isRightAnswer:!1},$R[797]={text:"Las Vegas algorithms are always slower but more accurate; Monte Carlo algorithms are always faster but less accurate.",followup:"While there's a trade-off, the terms 'always slower' and 'less accurate' can be misleading. A Las Vegas algorithm's runtime is variable, not always slow, and it's always 100% correct.",isRightAnswer:!1},$R[798]={text:"Las Vegas algorithms use more memory; Monte Carlo algorithms use less memory.",followup:"Memory usage is not the primary distinguishing factor between these two types of algorithms.",isRightAnswer:!1},$R[799]={text:"Las Vegas algorithms guarantee a correct answer but have a variable runtime; Monte Carlo algorithms may produce an incorrect answer but have a predictable runtime.",followup:"Exactly. Las Vegas gambles with time but not correctness. Monte Carlo gambles with correctness but not time.",isRightAnswer:!0}]},$R[800]={text:"Randomized Quicksort is a classic example of a Las Vegas algorithm. Why?",options:$R[801]=[$R[802]={text:"Because its worst-case runtime is $$O(n^2)$$.",followup:"While this is true, it's the result of unlucky random choices, not the reason it's classified as a Las Vegas algorithm.",isRightAnswer:!1},$R[803]={text:"Because it only sorts the list correctly a certain percentage of the time.",followup:"This would describe a Monte Carlo algorithm. Randomized Quicksort always sorts the list correctly.",isRightAnswer:!1},$R[804]={text:"Because it always returns a correctly sorted list, but the time it takes can vary based on pivot selection.",followup:"Correct. It guarantees the right answer (the list is always sorted), but its runtime depends on the random choices made for the pivot.",isRightAnswer:!0}]},$R[805]={text:"When analyzing a Monte Carlo algorithm that has a small probability of error, what is a common strategy to increase confidence in the result?",options:$R[806]=[$R[807]={text:"Decrease the number of random choices made within a single run.",followup:"This would likely increase the probability of error, not decrease it. For example, in the pi estimation problem, fewer 'dart throws' leads to a less accurate estimate.",isRightAnswer:!1},$R[808]={text:"Run the algorithm multiple times and take the most frequent answer.",followup:"Correct. By repeating the process with independent random choices, the probability of the algorithm being wrong every single time becomes extremely small.",isRightAnswer:!0},$R[809]={text:"Convert it into a deterministic algorithm.",followup:"This would defeat the purpose and is often very difficult or would result in a much less efficient algorithm.",isRightAnswer:!1},$R[810]={text:"Analyze its expected running time instead of its error probability.",followup:"Analyzing expected running time is the primary method for Las Vegas algorithms. For Monte Carlo algorithms, the main concern is the probability of an incorrect answer.",isRightAnswer:!1}]},$R[811]={text:"True or False: A major benefit of randomized algorithms is that they are often simpler to design and implement than deterministic algorithms that must account for all possible worst-case inputs.",options:$R[812]=[$R[813]={text:"True",followup:"Correct. By using randomness, an algorithm can often avoid the complex logic needed to handle every specific edge case that might lead to poor performance in a deterministic approach.",isRightAnswer:!0},$R[814]={text:"False",followup:"Incorrect. Simplicity and speed are often cited as key advantages of randomized algorithms. A randomized solution can be much easier to design than a complex deterministic one.",isRightAnswer:!1}]}]},uuid:"6|20"},$R[815]={content:$R[816]={type:"text",text:"By incorporating randomness, we expand our algorithmic toolkit, allowing us to tackle problems with new and often more efficient strategies."},uuid:"6|21"}]},$R[817]={uuid:"7",title:"Applications of Theoretical Computer Science",includesKnowledgeBase:!1,hasDemonstratedMastery:!1,streaming:!1,blocks:$R[818]=[$R[819]={content:$R[820]={type:"header",text:"From Theory to Reality"},uuid:"7|0"},$R[821]={content:$R[822]={type:"text",text:"Theoretical computer science can feel abstract, a world of Turing machines and complexity classes. But these concepts are the bedrock of the technology we use every day. The study of what's possible, what's efficient, and what's fundamentally hard to compute has led to powerful real-world applications. Let's explore how theoretical principles shape our digital lives, from secure communication to online auctions."},uuid:"7|1"},$R[823]={content:$R[824]={type:"header",text:"Securing Our Digital World"},uuid:"7|2"},$R[825]={content:$R[826]={type:"text",text:"Every time you shop online or log into an account, you're using cryptography. Modern security protocols aren't built on physical locks, but on mathematical hardness. The entire field relies on the principles of computational complexity you've already seen, particularly the idea that some problems are incredibly difficult to solve."},uuid:"7|3"},$R[827]={content:$R[828]={type:"blockquote",text:"The security of many cryptographic systems rests on the assumption that certain computational problems, while easy to verify, are extraordinarily hard to solve."},uuid:"7|4"},$R[829]={content:$R[830]={type:"text",text:"Public-key cryptography is a perfect example. It uses two keys: a public key for encrypting messages and a private key for decrypting them. This system's security hinges on a concept from number theory and complexity: prime factorization. Multiplying two large prime numbers is computationally easy. But given the product, finding the original two primes is believed to be a very hard problem. Your browser can quickly calculate a public key, but an eavesdropper would need an infeasible amount of time to factor it and find the private key. This one-way difficulty is the core of systems like RSA, which secures much of the internet."},uuid:"7|5"},$R[831]={content:$R[832]={svgMarkup:"\x3C?xml version='1.0' encoding='UTF-8'?>\n\x3C!-- This file was generated by dvisvgm 2.11.1 -->\n\x3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='226.771653pt' height='139.740715pt' viewBox='169.795276 177.282747 226.771653 139.740715'>\n\x3Cdefs>\n\x3Cpath id='g0-2' d='M3.875467-2.769614L1.882939-4.752179C1.763387-4.871731 1.743462-4.891656 1.663761-4.891656C1.564134-4.891656 1.464508-4.801993 1.464508-4.692403C1.464508-4.622665 1.484433-4.60274 1.594022-4.493151L3.58655-2.49066L1.594022-.488169C1.484433-.37858 1.464508-.358655 1.464508-.288917C1.464508-.179328 1.564134-.089664 1.663761-.089664C1.743462-.089664 1.763387-.109589 1.882939-.229141L3.865504-2.211706L5.927771-.14944C5.947696-.139477 6.017435-.089664 6.07721-.089664C6.196762-.089664 6.276463-.179328 6.276463-.288917C6.276463-.308842 6.276463-.348692 6.246575-.398506C6.236613-.418431 4.652553-1.982565 4.154421-2.49066L5.977584-4.313823C6.027397-4.373599 6.176837-4.503113 6.22665-4.562889C6.236613-4.582814 6.276463-4.622665 6.276463-4.692403C6.276463-4.801993 6.196762-4.891656 6.07721-4.891656C5.997509-4.891656 5.957659-4.851806 5.84807-4.742217L3.875467-2.769614Z'/>\n\x3Cpath id='g2-40' d='M3.297634 2.391034C3.297634 2.361146 3.297634 2.34122 3.128269 2.171856C1.882939 .916563 1.564134-.966376 1.564134-2.49066C1.564134-4.224159 1.942715-5.957659 3.16812-7.202989C3.297634-7.32254 3.297634-7.342466 3.297634-7.372354C3.297634-7.442092 3.257783-7.47198 3.198007-7.47198C3.098381-7.47198 2.201743-6.794521 1.613948-5.529265C1.105853-4.433375 .986301-3.327522 .986301-2.49066C.986301-1.713574 1.09589-.508095 1.643836 .617684C2.241594 1.843088 3.098381 2.49066 3.198007 2.49066C3.257783 2.49066 3.297634 2.460772 3.297634 2.391034Z'/>\n\x3Cpath id='g2-41' d='M2.879203-2.49066C2.879203-3.267746 2.769614-4.473225 2.221669-5.599004C1.62391-6.824408 .767123-7.47198 .667497-7.47198C.607721-7.47198 .56787-7.43213 .56787-7.372354C.56787-7.342466 .56787-7.32254 .757161-7.143213C1.733499-6.156912 2.30137-4.572852 2.30137-2.49066C2.30137-.787049 1.932752 .966376 .697385 2.221669C.56787 2.34122 .56787 2.361146 .56787 2.391034C.56787 2.450809 .607721 2.49066 .667497 2.49066C.767123 2.49066 1.663761 1.8132 2.251557 .547945C2.759651-.547945 2.879203-1.653798 2.879203-2.49066Z'/>\n\x3Cpath id='g2-61' d='M6.844334-3.257783C6.993773-3.257783 7.183064-3.257783 7.183064-3.457036S6.993773-3.656289 6.854296-3.656289H.886675C.747198-3.656289 .557908-3.656289 .557908-3.457036S.747198-3.257783 .896638-3.257783H6.844334ZM6.854296-1.325031C6.993773-1.325031 7.183064-1.325031 7.183064-1.524284S6.993773-1.723537 6.844334-1.723537H.896638C.747198-1.723537 .557908-1.723537 .557908-1.524284S.747198-1.325031 .886675-1.325031H6.854296Z'/>\n\x3Cpath id='g2-69' d='M1.354919-.777086C1.354919-.418431 1.334994-.308842 .56787-.308842H.328767V0H6.07721L6.495641-2.570361H6.246575C5.997509-1.036115 5.768369-.308842 4.054795-.308842H2.729763C2.261519-.308842 2.241594-.37858 2.241594-.707347V-3.367372H3.138232C4.104608-3.367372 4.214197-3.048568 4.214197-2.201743H4.463263V-4.841843H4.214197C4.214197-3.985056 4.104608-3.676214 3.138232-3.676214H2.241594V-6.067248C2.241594-6.396015 2.261519-6.465753 2.729763-6.465753H4.014944C5.539228-6.465753 5.808219-5.917808 5.967621-4.533001H6.216687L5.937733-6.774595H.328767V-6.465753H.56787C1.334994-6.465753 1.354919-6.356164 1.354919-5.997509V-.777086Z'/>\n\x3Cpath id='g2-70' d='M5.798257-6.774595H.328767V-6.465753H.56787C1.334994-6.465753 1.354919-6.356164 1.354919-5.997509V-.777086C1.354919-.418431 1.334994-.308842 .56787-.308842H.328767V0C.67746-.029888 1.454545-.029888 1.843088-.029888C2.251557-.029888 3.158157-.029888 3.516812 0V-.308842H3.188045C2.241594-.308842 2.241594-.438356 2.241594-.787049V-3.237858H3.098381C4.054795-3.237858 4.154421-2.919054 4.154421-2.072229H4.403487V-4.712329H4.154421C4.154421-3.875467 4.054795-3.5467 3.098381-3.5467H2.241594V-6.067248C2.241594-6.396015 2.261519-6.465753 2.729763-6.465753H3.92528C5.419676-6.465753 5.668742-5.907846 5.828144-4.533001H6.07721L5.798257-6.774595Z'/>\n\x3Cpath id='g2-72' d='M6.107098-6.027397C6.107098-6.386052 6.127024-6.495641 6.894147-6.495641H7.13325V-6.804483C6.784558-6.774595 6.047323-6.774595 5.668742-6.774595S4.542964-6.774595 4.194271-6.804483V-6.495641H4.433375C5.200498-6.495641 5.220423-6.386052 5.220423-6.027397V-3.696139H2.241594V-6.027397C2.241594-6.386052 2.261519-6.495641 3.028643-6.495641H3.267746V-6.804483C2.919054-6.774595 2.181818-6.774595 1.803238-6.774595S.67746-6.774595 .328767-6.804483V-6.495641H.56787C1.334994-6.495641 1.354919-6.386052 1.354919-6.027397V-.777086C1.354919-.418431 1.334994-.308842 .56787-.308842H.328767V0C.67746-.029888 1.414695-.029888 1.793275-.029888S2.919054-.029888 3.267746 0V-.308842H3.028643C2.261519-.308842 2.241594-.418431 2.241594-.777086V-3.387298H5.220423V-.777086C5.220423-.418431 5.200498-.308842 4.433375-.308842H4.194271V0C4.542964-.029888 5.280199-.029888 5.65878-.029888S6.784558-.029888 7.13325 0V-.308842H6.894147C6.127024-.308842 6.107098-.418431 6.107098-.777086V-6.027397Z'/>\n\x3Cpath id='g2-77' d='M2.400996-6.585305C2.311333-6.804483 2.281445-6.804483 2.052304-6.804483H.368618V-6.495641H.607721C1.374844-6.495641 1.39477-6.386052 1.39477-6.027397V-1.046077C1.39477-.777086 1.39477-.308842 .368618-.308842V0C.71731-.009963 1.205479-.029888 1.534247-.029888S2.351183-.009963 2.699875 0V-.308842C1.673724-.308842 1.673724-.777086 1.673724-1.046077V-6.41594H1.683686L4.084682-.219178C4.134496-.089664 4.184309 0 4.283935 0C4.393524 0 4.423412-.079701 4.463263-.18929L6.914072-6.495641H6.924035V-.777086C6.924035-.418431 6.90411-.308842 6.136986-.308842H5.897883V0C6.266501-.029888 6.94396-.029888 7.332503-.029888S8.388543-.029888 8.757161 0V-.308842H8.518057C7.750934-.308842 7.731009-.418431 7.731009-.777086V-6.027397C7.731009-6.386052 7.750934-6.495641 8.518057-6.495641H8.757161V-6.804483H7.073474C6.814446-6.804483 6.814446-6.794521 6.744707-6.615193L4.562889-1.006227L2.400996-6.585305Z'/>\n\x3Cpath id='g2-97' d='M3.317559-.757161C3.35741-.358655 3.626401 .059776 4.094645 .059776C4.303861 .059776 4.911582-.079701 4.911582-.886675V-1.444583H4.662516V-.886675C4.662516-.308842 4.41345-.249066 4.303861-.249066C3.975093-.249066 3.935243-.697385 3.935243-.747198V-2.739726C3.935243-3.158157 3.935243-3.5467 3.576588-3.915318C3.188045-4.303861 2.689913-4.463263 2.211706-4.463263C1.39477-4.463263 .707347-3.995019 .707347-3.337484C.707347-3.038605 .9066-2.86924 1.165629-2.86924C1.444583-2.86924 1.62391-3.068493 1.62391-3.327522C1.62391-3.447073 1.574097-3.775841 1.115816-3.785803C1.384807-4.134496 1.872976-4.244085 2.191781-4.244085C2.67995-4.244085 3.247821-3.855542 3.247821-2.968867V-2.600249C2.739726-2.570361 2.042341-2.540473 1.414695-2.241594C.667497-1.902864 .418431-1.384807 .418431-.946451C.418431-.139477 1.384807 .109589 2.012453 .109589C2.669988 .109589 3.128269-.288917 3.317559-.757161ZM3.247821-2.391034V-1.39477C3.247821-.448319 2.530511-.109589 2.082192-.109589C1.594022-.109589 1.185554-.458281 1.185554-.956413C1.185554-1.504359 1.603985-2.331258 3.247821-2.391034Z'/>\n\x3Cpath id='g2-99' d='M1.165629-2.171856C1.165629-3.795766 1.982565-4.214197 2.510585-4.214197C2.600249-4.214197 3.227895-4.204234 3.576588-3.845579C3.16812-3.815691 3.108344-3.516812 3.108344-3.387298C3.108344-3.128269 3.287671-2.929016 3.566625-2.929016C3.825654-2.929016 4.024907-3.098381 4.024907-3.39726C4.024907-4.07472 3.267746-4.463263 2.500623-4.463263C1.255293-4.463263 .33873-3.387298 .33873-2.15193C.33873-.876712 1.325031 .109589 2.480697 .109589C3.815691 .109589 4.134496-1.085928 4.134496-1.185554S4.034869-1.285181 4.004981-1.285181C3.915318-1.285181 3.895392-1.24533 3.875467-1.185554C3.58655-.259029 2.938979-.139477 2.570361-.139477C2.042341-.139477 1.165629-.56787 1.165629-2.171856Z'/>\n\x3Cpath id='g2-100' d='M3.785803-.547945V.109589L5.250311 0V-.308842C4.552927-.308842 4.473225-.37858 4.473225-.86675V-6.914072L3.038605-6.804483V-6.495641C3.73599-6.495641 3.815691-6.425903 3.815691-5.937733V-3.785803C3.526775-4.144458 3.098381-4.403487 2.560399-4.403487C1.384807-4.403487 .33873-3.427148 .33873-2.141968C.33873-.876712 1.315068 .109589 2.450809 .109589C3.088418 .109589 3.536737-.229141 3.785803-.547945ZM3.785803-3.217933V-1.175592C3.785803-.996264 3.785803-.976339 3.676214-.806974C3.377335-.328767 2.929016-.109589 2.500623-.109589C2.052304-.109589 1.693649-.368618 1.454545-.747198C1.195517-1.155666 1.165629-1.723537 1.165629-2.132005C1.165629-2.500623 1.185554-3.098381 1.474471-3.5467C1.683686-3.855542 2.062267-4.184309 2.600249-4.184309C2.948941-4.184309 3.367372-4.034869 3.676214-3.58655C3.785803-3.417186 3.785803-3.39726 3.785803-3.217933Z'/>\n\x3Cpath id='g2-105' d='M1.763387-4.403487L.368618-4.293898V-3.985056C1.016189-3.985056 1.105853-3.92528 1.105853-3.437111V-.757161C1.105853-.308842 .996264-.308842 .328767-.308842V0C.647572-.009963 1.185554-.029888 1.424658-.029888C1.77335-.029888 2.122042-.009963 2.460772 0V-.308842C1.803238-.308842 1.763387-.358655 1.763387-.747198V-4.403487ZM1.803238-6.136986C1.803238-6.455791 1.554172-6.665006 1.275218-6.665006C.966376-6.665006 .747198-6.396015 .747198-6.136986C.747198-5.867995 .966376-5.608966 1.275218-5.608966C1.554172-5.608966 1.803238-5.818182 1.803238-6.136986Z'/>\n\x3Cpath id='g2-108' d='M1.763387-6.914072L.328767-6.804483V-6.495641C1.026152-6.495641 1.105853-6.425903 1.105853-5.937733V-.757161C1.105853-.308842 .996264-.308842 .328767-.308842V0C.657534-.009963 1.185554-.029888 1.43462-.029888S2.171856-.009963 2.540473 0V-.308842C1.872976-.308842 1.763387-.308842 1.763387-.757161V-6.914072Z'/>\n\x3Cpath id='g2-110' d='M1.09589-3.427148V-.757161C1.09589-.308842 .986301-.308842 .318804-.308842V0C.667497-.009963 1.175592-.029888 1.444583-.029888C1.703611-.029888 2.221669-.009963 2.560399 0V-.308842C1.892902-.308842 1.783313-.308842 1.783313-.757161V-2.590286C1.783313-3.626401 2.49066-4.184309 3.128269-4.184309C3.755915-4.184309 3.865504-3.646326 3.865504-3.078456V-.757161C3.865504-.308842 3.755915-.308842 3.088418-.308842V0C3.437111-.009963 3.945205-.029888 4.214197-.029888C4.473225-.029888 4.991283-.009963 5.330012 0V-.308842C4.811955-.308842 4.562889-.308842 4.552927-.607721V-2.510585C4.552927-3.367372 4.552927-3.676214 4.244085-4.034869C4.104608-4.204234 3.775841-4.403487 3.198007-4.403487C2.470735-4.403487 2.002491-3.975093 1.723537-3.35741V-4.403487L.318804-4.293898V-3.985056C1.016189-3.985056 1.09589-3.915318 1.09589-3.427148Z'/>\n\x3Cpath id='g2-111' d='M4.692403-2.132005C4.692403-3.407223 3.696139-4.463263 2.49066-4.463263C1.24533-4.463263 .278954-3.377335 .278954-2.132005C.278954-.846824 1.315068 .109589 2.480697 .109589C3.686177 .109589 4.692403-.86675 4.692403-2.132005ZM2.49066-.139477C2.062267-.139477 1.62391-.348692 1.354919-.806974C1.105853-1.24533 1.105853-1.853051 1.105853-2.211706C1.105853-2.600249 1.105853-3.138232 1.344956-3.576588C1.613948-4.034869 2.082192-4.244085 2.480697-4.244085C2.919054-4.244085 3.347447-4.024907 3.606476-3.596513S3.865504-2.590286 3.865504-2.211706C3.865504-1.853051 3.865504-1.315068 3.646326-.876712C3.427148-.428394 2.988792-.139477 2.49066-.139477Z'/>\n\x3Cpath id='g2-112' d='M1.713574-3.745953V-4.403487L.278954-4.293898V-3.985056C.986301-3.985056 1.05604-3.92528 1.05604-3.486924V1.175592C1.05604 1.62391 .946451 1.62391 .278954 1.62391V1.932752C.617684 1.92279 1.135741 1.902864 1.39477 1.902864C1.663761 1.902864 2.171856 1.92279 2.520548 1.932752V1.62391C1.853051 1.62391 1.743462 1.62391 1.743462 1.175592V-.498132V-.587796C1.793275-.428394 2.211706 .109589 2.968867 .109589C4.154421 .109589 5.190535-.86675 5.190535-2.15193C5.190535-3.417186 4.224159-4.403487 3.108344-4.403487C2.331258-4.403487 1.912827-3.965131 1.713574-3.745953ZM1.743462-1.135741V-3.35741C2.032379-3.865504 2.520548-4.154421 3.028643-4.154421C3.755915-4.154421 4.363636-3.277709 4.363636-2.15193C4.363636-.946451 3.666252-.109589 2.929016-.109589C2.530511-.109589 2.15193-.308842 1.882939-.71731C1.743462-.926526 1.743462-.936488 1.743462-1.135741Z'/>\n\x3Cpath id='g2-114' d='M1.663761-3.307597V-4.403487L.278954-4.293898V-3.985056C.976339-3.985056 1.05604-3.915318 1.05604-3.427148V-.757161C1.05604-.308842 .946451-.308842 .278954-.308842V0C.667497-.009963 1.135741-.029888 1.414695-.029888C1.8132-.029888 2.281445-.029888 2.67995 0V-.308842H2.470735C1.733499-.308842 1.713574-.418431 1.713574-.777086V-2.311333C1.713574-3.297634 2.132005-4.184309 2.889166-4.184309C2.958904-4.184309 2.978829-4.184309 2.998755-4.174346C2.968867-4.164384 2.769614-4.044832 2.769614-3.785803C2.769614-3.506849 2.978829-3.35741 3.198007-3.35741C3.377335-3.35741 3.626401-3.476961 3.626401-3.795766S3.317559-4.403487 2.889166-4.403487C2.161893-4.403487 1.803238-3.73599 1.663761-3.307597Z'/>\n\x3Cpath id='g2-115' d='M2.072229-1.932752C2.291407-1.892902 3.108344-1.733499 3.108344-1.016189C3.108344-.508095 2.759651-.109589 1.982565-.109589C1.145704-.109589 .787049-.67746 .597758-1.524284C.56787-1.653798 .557908-1.693649 .458281-1.693649C.328767-1.693649 .328767-1.62391 .328767-1.444583V-.129514C.328767 .039851 .328767 .109589 .438356 .109589C.488169 .109589 .498132 .099626 .687422-.089664C.707347-.109589 .707347-.129514 .886675-.318804C1.325031 .099626 1.77335 .109589 1.982565 .109589C3.128269 .109589 3.58655-.557908 3.58655-1.275218C3.58655-1.803238 3.287671-2.102117 3.16812-2.221669C2.839352-2.540473 2.450809-2.620174 2.032379-2.699875C1.474471-2.809465 .806974-2.938979 .806974-3.516812C.806974-3.865504 1.066002-4.273973 1.92279-4.273973C3.01868-4.273973 3.068493-3.377335 3.088418-3.068493C3.098381-2.978829 3.188045-2.978829 3.20797-2.978829C3.337484-2.978829 3.337484-3.028643 3.337484-3.217933V-4.224159C3.337484-4.393524 3.337484-4.463263 3.227895-4.463263C3.178082-4.463263 3.158157-4.463263 3.028643-4.343711C2.998755-4.303861 2.899128-4.214197 2.859278-4.184309C2.480697-4.463263 2.072229-4.463263 1.92279-4.463263C.707347-4.463263 .328767-3.795766 .328767-3.237858C.328767-2.889166 .488169-2.610212 .757161-2.391034C1.075965-2.132005 1.354919-2.072229 2.072229-1.932752Z'/>\n\x3Cpath id='g2-116' d='M1.723537-3.985056H3.148194V-4.293898H1.723537V-6.127024H1.474471C1.464508-5.310087 1.165629-4.244085 .18929-4.204234V-3.985056H1.036115V-1.235367C1.036115-.009963 1.96264 .109589 2.321295 .109589C3.028643 .109589 3.307597-.597758 3.307597-1.235367V-1.803238H3.058531V-1.255293C3.058531-.518057 2.759651-.139477 2.391034-.139477C1.723537-.139477 1.723537-1.046077 1.723537-1.215442V-3.985056Z'/>\n\x3Cpath id='g2-117' d='M3.895392-.787049V.109589L5.330012 0V-.308842C4.632628-.308842 4.552927-.37858 4.552927-.86675V-4.403487L3.088418-4.293898V-3.985056C3.785803-3.985056 3.865504-3.915318 3.865504-3.427148V-1.653798C3.865504-.787049 3.387298-.109589 2.660025-.109589C1.823163-.109589 1.783313-.577833 1.783313-1.09589V-4.403487L.318804-4.293898V-3.985056C1.09589-3.985056 1.09589-3.955168 1.09589-3.068493V-1.574097C1.09589-.797011 1.09589 .109589 2.610212 .109589C3.16812 .109589 3.606476-.169365 3.895392-.787049Z'/>\n\x3Cpath id='g2-121' d='M4.134496-3.347447C4.393524-3.975093 4.901619-3.985056 5.061021-3.985056V-4.293898C4.83188-4.273973 4.542964-4.26401 4.313823-4.26401C4.134496-4.26401 3.666252-4.283935 3.447073-4.293898V-3.985056C3.755915-3.975093 3.915318-3.805729 3.915318-3.556663C3.915318-3.457036 3.905355-3.437111 3.855542-3.317559L2.849315-.86675L1.743462-3.5467C1.703611-3.646326 1.683686-3.686177 1.683686-3.726027C1.683686-3.985056 2.052304-3.985056 2.241594-3.985056V-4.293898C1.982565-4.283935 1.325031-4.26401 1.155666-4.26401C.886675-4.26401 .488169-4.273973 .18929-4.293898V-3.985056C.667497-3.985056 .856787-3.985056 .996264-3.636364L2.49066 0C2.440847 .129514 2.30137 .458281 2.241594 .587796C2.022416 1.135741 1.743462 1.823163 1.105853 1.823163C1.05604 1.823163 .826899 1.823163 .637609 1.643836C.946451 1.603985 1.026152 1.384807 1.026152 1.225405C1.026152 .966376 .836862 .806974 .607721 .806974C.408468 .806974 .18929 .936488 .18929 1.235367C.18929 1.683686 .607721 2.042341 1.105853 2.042341C1.733499 2.042341 2.141968 1.474471 2.381071 .9066L4.134496-3.347447Z'/>\n\x3Cpath id='g2-122' d='M3.88543-3.995019C3.975093-4.104608 3.975093-4.124533 3.975093-4.164384C3.975093-4.293898 3.895392-4.293898 3.716065-4.293898H.52802L.418431-2.689913H.667497C.727273-3.706102 .916563-4.07472 2.012453-4.07472H3.148194L.368618-.318804C.278954-.209215 .278954-.18929 .278954-.139477C.278954 0 .348692 0 .537983 0H3.825654L3.995019-1.863014H3.745953C3.656289-.687422 3.447073-.249066 2.291407-.249066H1.115816L3.88543-3.995019Z'/>\n\x3Cpath id='g1-110' d='M.876712-.587796C.846824-.438356 .787049-.209215 .787049-.159402C.787049 .019925 .926526 .109589 1.075965 .109589C1.195517 .109589 1.374844 .029888 1.444583-.169365C1.454545-.18929 1.574097-.657534 1.633873-.9066L1.853051-1.803238C1.912827-2.022416 1.972603-2.241594 2.022416-2.470735C2.062267-2.6401 2.141968-2.929016 2.15193-2.968867C2.30137-3.277709 2.82939-4.184309 3.775841-4.184309C4.224159-4.184309 4.313823-3.815691 4.313823-3.486924C4.313823-2.86924 3.825654-1.594022 3.666252-1.165629C3.576588-.936488 3.566625-.816936 3.566625-.707347C3.566625-.239103 3.915318 .109589 4.383562 .109589C5.32005 .109589 5.688667-1.344956 5.688667-1.424658C5.688667-1.524284 5.599004-1.524284 5.569116-1.524284C5.469489-1.524284 5.469489-1.494396 5.419676-1.344956C5.220423-.667497 4.891656-.109589 4.403487-.109589C4.234122-.109589 4.164384-.209215 4.164384-.438356C4.164384-.687422 4.254047-.926526 4.343711-1.145704C4.533001-1.673724 4.951432-2.769614 4.951432-3.337484C4.951432-4.004981 4.523039-4.403487 3.805729-4.403487C2.909091-4.403487 2.420922-3.765878 2.251557-3.536737C2.201743-4.094645 1.793275-4.403487 1.334994-4.403487S.687422-4.014944 .587796-3.835616C.428394-3.496887 .288917-2.909091 .288917-2.86924C.288917-2.769614 .388543-2.769614 .408468-2.769614C.508095-2.769614 .518057-2.779577 .577833-2.998755C.747198-3.706102 .946451-4.184309 1.305106-4.184309C1.504359-4.184309 1.613948-4.054795 1.613948-3.726027C1.613948-3.516812 1.58406-3.407223 1.454545-2.889166L.876712-.587796Z'/>\n\x3Cpath id='g1-112' d='M.448319 1.215442C.368618 1.554172 .348692 1.62391-.089664 1.62391C-.209215 1.62391-.318804 1.62391-.318804 1.8132C-.318804 1.892902-.268991 1.932752-.18929 1.932752C.079701 1.932752 .368618 1.902864 .647572 1.902864C.976339 1.902864 1.315068 1.932752 1.633873 1.932752C1.683686 1.932752 1.8132 1.932752 1.8132 1.733499C1.8132 1.62391 1.713574 1.62391 1.574097 1.62391C1.075965 1.62391 1.075965 1.554172 1.075965 1.464508C1.075965 1.344956 1.494396-.278954 1.564134-.52802C1.693649-.239103 1.972603 .109589 2.480697 .109589C3.636364 .109589 4.881694-1.344956 4.881694-2.809465C4.881694-3.745953 4.313823-4.403487 3.556663-4.403487C3.058531-4.403487 2.580324-4.044832 2.251557-3.656289C2.15193-4.194271 1.723537-4.403487 1.354919-4.403487C.896638-4.403487 .707347-4.014944 .617684-3.835616C.438356-3.496887 .308842-2.899128 .308842-2.86924C.308842-2.769614 .408468-2.769614 .428394-2.769614C.52802-2.769614 .537983-2.779577 .597758-2.998755C.767123-3.706102 .966376-4.184309 1.325031-4.184309C1.494396-4.184309 1.633873-4.104608 1.633873-3.726027C1.633873-3.496887 1.603985-3.387298 1.564134-3.217933L.448319 1.215442ZM2.201743-3.108344C2.271482-3.377335 2.540473-3.656289 2.719801-3.805729C3.068493-4.11457 3.35741-4.184309 3.526775-4.184309C3.92528-4.184309 4.164384-3.835616 4.164384-3.247821S3.835616-1.514321 3.656289-1.135741C3.317559-.438356 2.839352-.109589 2.470735-.109589C1.8132-.109589 1.683686-.936488 1.683686-.996264C1.683686-1.016189 1.683686-1.036115 1.713574-1.155666L2.201743-3.108344Z'/>\n\x3Cpath id='g1-113' d='M4.503113-4.293898C4.503113-4.333748 4.473225-4.393524 4.403487-4.393524C4.293898-4.393524 3.895392-3.995019 3.726027-3.706102C3.506849-4.244085 3.118306-4.403487 2.799502-4.403487C1.62391-4.403487 .398506-2.929016 .398506-1.484433C.398506-.508095 .986301 .109589 1.713574 .109589C2.141968 .109589 2.530511-.129514 2.889166-.488169C2.799502-.139477 2.470735 1.205479 2.440847 1.295143C2.361146 1.574097 2.281445 1.613948 1.723537 1.62391C1.594022 1.62391 1.494396 1.62391 1.494396 1.823163C1.494396 1.833126 1.494396 1.932752 1.62391 1.932752C1.942715 1.932752 2.291407 1.902864 2.620174 1.902864C2.958904 1.902864 3.317559 1.932752 3.646326 1.932752C3.696139 1.932752 3.825654 1.932752 3.825654 1.733499C3.825654 1.62391 3.726027 1.62391 3.566625 1.62391C3.088418 1.62391 3.088418 1.554172 3.088418 1.464508C3.088418 1.39477 3.108344 1.334994 3.128269 1.24533L4.503113-4.293898ZM1.743462-.109589C1.145704-.109589 1.105853-.876712 1.105853-1.046077C1.105853-1.524284 1.39477-2.610212 1.564134-3.028643C1.872976-3.765878 2.391034-4.184309 2.799502-4.184309C3.447073-4.184309 3.58655-3.377335 3.58655-3.307597C3.58655-3.247821 3.038605-1.066002 3.008717-1.026152C2.859278-.747198 2.30137-.109589 1.743462-.109589Z'/>\n\x3C/defs>\n\x3Cg id='page1'>\n\x3Cg transform='translate(169.795 177.283)scale(.996264)'>\n\x3Cpath d='M 76.1826 16.3774C 76.1826 7.47101 68.9625 0.250937 60.0561 0.250937C 51.1497 0.250937 43.9296 7.47101 43.9296 16.3774C 43.9296 25.2838 51.1497 32.5039 60.0561 32.5039C 68.9625 32.5039 76.1826 25.2838 76.1826 16.3774Z' fill='#c0ffff'/>\n\x3C/g>\n\x3Cg transform='translate(169.795 177.283)scale(.996264)'>\n\x3Cpath d='M 76.1826 16.3774C 76.1826 7.47101 68.9625 0.250937 60.0561 0.250937C 51.1497 0.250937 43.9296 7.47101 43.9296 16.3774C 43.9296 25.2838 51.1497 32.5039 60.0561 32.5039C 68.9625 32.5039 76.1826 25.2838 76.1826 16.3774Z' fill='none' stroke='#0000ff' stroke-linecap='round' stroke-linejoin='round' stroke-miterlimit='10.0375' stroke-width='0.501875'/>\n\x3C/g>\n\x3Cg transform='translate(169.795 177.283)scale(.996264)'>\n\x3Cpath d='M 183.692 16.3774C 183.692 7.47101 176.472 0.250937 167.566 0.250937C 158.66 0.250937 151.439 7.47101 151.439 16.3774C 151.439 25.2838 158.66 32.5039 167.566 32.5039C 176.472 32.5039 183.692 25.2838 183.692 16.3774Z' fill='#c0ffff'/>\n\x3C/g>\n\x3Cg transform='translate(169.795 177.283)scale(.996264)'>\n\x3Cpath d='M 183.692 16.3774C 183.692 7.47101 176.472 0.250937 167.566 0.250937C 158.66 0.250937 151.439 7.47101 151.439 16.3774C 151.439 25.2838 158.66 32.5039 167.566 32.5039C 176.472 32.5039 183.692 25.2838 183.692 16.3774Z' fill='none' stroke='#0000ff' stroke-linecap='round' stroke-linejoin='round' stroke-miterlimit='10.0375' stroke-width='0.501875'/>\n\x3C/g>\n\x3Cg fill='#00f'>\n\x3Cuse x='227.124571' y='194.7151' xlink:href='#g1-112'/>\n\x3Cuse x='334.3366' y='194.7151' xlink:href='#g1-113'/>\n\x3C/g>\n\x3Cg transform='translate(169.795 177.283)scale(.996264)'>\n\x3Cpath d='M 81.5581 140.014L 146.064 140.014L 146.064 107.761L 81.5581 107.761L 81.5581 140.014Z' fill='#c0ffc0'/>\n\x3C/g>\n\x3Cg transform='translate(169.795 177.283)scale(.996264)'>\n\x3Cpath d='M 81.5581 140.014L 146.064 140.014L 146.064 107.761L 81.5581 107.761L 81.5581 140.014Z' fill='none' stroke='#008000' stroke-linecap='round' stroke-linejoin='round' stroke-miterlimit='10.0375' stroke-width='0.501875'/>\n\x3C/g>\n\x3Cg fill='#008000'>\n\x3Cuse x='262.556338' y='302.584394' xlink:href='#g1-110'/>\n\x3Cuse x='271.303595' y='302.584394' xlink:href='#g2-61'/>\n\x3Cuse x='281.819675' y='302.584394' xlink:href='#g1-112'/>\n\x3Cuse x='289.046006' y='302.584394' xlink:href='#g0-2'/>\n\x3Cuse x='299.00862' y='302.584394' xlink:href='#g1-113'/>\n\x3C/g>\n\x3Cg transform='translate(169.795 177.283)scale(.996264)'>\n\x3Cpath d='M 99.9571 104.104L 68.1193 29.8162' fill='none' stroke='#0000ff' stroke-linecap='round' stroke-linejoin='round' stroke-miterlimit='10.0375' stroke-width='0.501875'/>\n\x3C/g>\n\x3Cg transform='translate(169.795 177.283)scale(.996264)'>\n\x3Cpath d='M 100.188 104.006C 100.451 102.869 101.245 102.078 101.338 102.038C 101.442 101.994 101.516 102.071 101.55 102.152C 101.605 102.279 101.557 102.327 101.514 102.386C 101.196 102.727 100.512 103.457 100.465 104.842C 100.455 105.01 100.453 105.038 100.372 105.073C 100.292 105.108 100.27 105.09 100.142 104.981C 99.1054 104.06 98.1053 104.052 97.6391 104.047C 97.5666 104.037 97.4991 104.038 97.4447 103.912C 97.4101 103.831 97.4052 103.724 97.509 103.679C 97.6012 103.64 98.7215 103.61 99.7265 104.203L 100.188 104.006Z' fill='#0000ff'/>\n\x3C/g>\n\x3Cg transform='translate(169.795 177.283)scale(.996264)'>\n\x3Cpath d='M 127.665 104.104L 159.503 29.8162' fill='none' stroke='#0000ff' stroke-linecap='round' stroke-linejoin='round' stroke-miterlimit='10.0375' stroke-width='0.501875'/>\n\x3C/g>\n\x3Cg transform='translate(169.795 177.283)scale(.996264)'>\n\x3Cpath d='M 127.896 104.203C 128.901 103.61 130.021 103.64 130.113 103.679C 130.217 103.724 130.212 103.831 130.177 103.912C 130.123 104.038 130.055 104.037 129.983 104.047C 129.517 104.052 128.517 104.06 127.48 104.981C 127.352 105.09 127.33 105.108 127.25 105.073C 127.169 105.038 127.167 105.01 127.158 104.842C 127.11 103.457 126.426 102.727 126.108 102.386C 126.065 102.327 126.017 102.279 126.072 102.152C 126.106 102.071 126.181 101.994 126.284 102.038C 126.377 102.078 127.171 102.869 127.434 104.006L 127.896 104.203Z' fill='#0000ff'/>\n\x3C/g>\n\x3Cg transform='translate(169.795 177.283)scale(.996264)'>\n\x3Cpath d='M 65.4681 62.9948L 162.154 62.9948L 162.154 50.3925L 65.4681 50.3925L 65.4681 62.9948Z' fill='#ffffff'/>\n\x3C/g>\n\x3Cg fill='#00f'>\n\x3Cuse x='236.318882' y='236.195216' xlink:href='#g2-69'/>\n\x3Cuse x='243.099029' y='236.195216' xlink:href='#g2-97'/>\n\x3Cuse x='248.080368' y='236.195216' xlink:href='#g2-115'/>\n\x3Cuse x='252.010086' y='236.195216' xlink:href='#g2-121'/>\n\x3Cuse x='260.589049' y='236.195216' xlink:href='#g2-40'/>\n\x3Cuse x='264.463422' y='236.195216' xlink:href='#g2-77'/>\n\x3Cuse x='273.595865' y='236.195216' xlink:href='#g2-117'/>\n\x3Cuse x='279.130682' y='236.195216' xlink:href='#g2-108'/>\n\x3Cuse x='281.89809' y='236.195216' xlink:href='#g2-116'/>\n\x3Cuse x='285.772464' y='236.195216' xlink:href='#g2-105'/>\n\x3Cuse x='288.539872' y='236.195216' xlink:href='#g2-112'/>\n\x3Cuse x='294.074689' y='236.195216' xlink:href='#g2-108'/>\n\x3Cuse x='296.842098' y='236.195216' xlink:href='#g2-105'/>\n\x3Cuse x='299.609506' y='236.195216' xlink:href='#g2-99'/>\n\x3Cuse x='304.037358' y='236.195216' xlink:href='#g2-97'/>\n\x3Cuse x='309.018697' y='236.195216' xlink:href='#g2-116'/>\n\x3Cuse x='312.893071' y='236.195216' xlink:href='#g2-105'/>\n\x3Cuse x='315.660479' y='236.195216' xlink:href='#g2-111'/>\n\x3Cuse x='320.641818' y='236.195216' xlink:href='#g2-110'/>\n\x3Cuse x='326.176635' y='236.195216' xlink:href='#g2-41'/>\n\x3C/g>\n\x3Cg transform='translate(169.795 177.283)scale(.996264)'>\n\x3Cpath d='M 40.3027 18.2557L 27.8031 43.2549L 38.5541 70.1324L 19.7399 97.0098L 33.1786 123.887L 78.8703 123.887' fill='none' stroke='#ff0000' stroke-dasharray='7.87846,7.87846' stroke-linecap='round' stroke-linejoin='round' stroke-miterlimit='10.0375' stroke-width='1'/>\n\x3C/g>\n\x3Cg transform='translate(169.795 177.283)scale(.996264)'>\n\x3Cpath d='M 39.8555 18.0321C 37.7871 19.0942 35.5622 18.9042 35.3833 18.8147C 35.1821 18.7141 35.2045 18.5017 35.2827 18.3452C 35.4057 18.0992 35.5399 18.1104 35.6852 18.0992C 36.6132 18.1439 38.6033 18.2445 40.7723 16.5339C 41.0406 16.3327 41.0853 16.2992 41.2418 16.3774C 41.3984 16.4557 41.3984 16.5116 41.3984 16.847C 41.3313 19.6085 42.6058 21.1402 43.1984 21.8558C 43.2767 21.9788 43.3661 22.0794 43.2431 22.3254C 43.1649 22.4819 43.0083 22.6272 42.8071 22.5266C 42.6282 22.4372 41.1412 20.7713 40.7499 18.4793L 39.8555 18.0321Z' fill='#ff0000'/>\n\x3C/g>\n\x3Cg transform='translate(169.795 177.283)scale(.996264)'>\n\x3Cpath d='M 187.319 18.2557L 199.819 43.2549L 189.068 70.1324L 207.882 97.0098L 194.443 123.887L 148.752 123.887' fill='none' stroke='#ff0000' stroke-dasharray='7.87846,7.87846' stroke-linecap='round' stroke-linejoin='round' stroke-miterlimit='10.0375' stroke-width='1'/>\n\x3C/g>\n\x3Cg transform='translate(169.795 177.283)scale(.996264)'>\n\x3Cpath d='M 186.872 18.4793C 186.481 20.7713 184.994 22.4372 184.815 22.5266C 184.614 22.6272 184.457 22.4819 184.379 22.3254C 184.256 22.0794 184.345 21.9788 184.424 21.8558C 185.016 21.1402 186.291 19.6085 186.224 16.847C 186.224 16.5116 186.224 16.4557 186.38 16.3774C 186.537 16.2992 186.581 16.3327 186.85 16.5339C 189.019 18.2445 191.009 18.1439 191.937 18.0992C 192.082 18.1104 192.216 18.0992 192.339 18.3452C 192.418 18.5017 192.44 18.7141 192.239 18.8147C 192.06 18.9042 189.835 19.0942 187.767 18.0321L 186.872 18.4793Z' fill='#ff0000'/>\n\x3C/g>\n\x3Cg fill='#f00' transform='matrix(0 -1 1 0 -71.016 423.17)'>\n\x3Cuse x='131.009477' y='249.583745' xlink:href='#g2-72'/>\n\x3Cuse x='138.481476' y='249.583745' xlink:href='#g2-97'/>\n\x3Cuse x='143.462816' y='249.583745' xlink:href='#g2-114'/>\n\x3Cuse x='147.364866' y='249.583745' xlink:href='#g2-100'/>\n\x3Cuse x='156.220558' y='249.583745' xlink:href='#g2-40'/>\n\x3Cuse x='160.094932' y='249.583745' xlink:href='#g2-70'/>\n\x3Cuse x='165.768119' y='249.583745' xlink:href='#g2-97'/>\n\x3Cuse x='170.749458' y='249.583745' xlink:href='#g2-99'/>\n\x3Cuse x='175.17731' y='249.583745' xlink:href='#g2-116'/>\n\x3Cuse x='179.051684' y='249.583745' xlink:href='#g2-111'/>\n\x3Cuse x='184.033023' y='249.583745' xlink:href='#g2-114'/>\n\x3Cuse x='187.935073' y='249.583745' xlink:href='#g2-105'/>\n\x3Cuse x='190.702482' y='249.583745' xlink:href='#g2-122'/>\n\x3Cuse x='195.130333' y='249.583745' xlink:href='#g2-97'/>\n\x3Cuse x='200.111672' y='249.583745' xlink:href='#g2-116'/>\n\x3Cuse x='203.986046' y='249.583745' xlink:href='#g2-105'/>\n\x3Cuse x='206.753455' y='249.583745' xlink:href='#g2-111'/>\n\x3Cuse x='211.734794' y='249.583745' xlink:href='#g2-110'/>\n\x3Cuse x='217.269611' y='249.583745' xlink:href='#g2-41'/>\n\x3C/g>\n\x3Cg fill='#f00' transform='matrix(0 1 -1 0 637.386 -143.2)'>\n\x3Cuse x='345.225956' y='249.583745' xlink:href='#g2-72'/>\n\x3Cuse x='352.697955' y='249.583745' xlink:href='#g2-97'/>\n\x3Cuse x='357.679294' y='249.583745' xlink:href='#g2-114'/>\n\x3Cuse x='361.581345' y='249.583745' xlink:href='#g2-100'/>\n\x3Cuse x='370.437037' y='249.583745' xlink:href='#g2-40'/>\n\x3Cuse x='374.311411' y='249.583745' xlink:href='#g2-70'/>\n\x3Cuse x='379.984598' y='249.583745' xlink:href='#g2-97'/>\n\x3Cuse x='384.965937' y='249.583745' xlink:href='#g2-99'/>\n\x3Cuse x='389.393789' y='249.583745' xlink:href='#g2-116'/>\n\x3Cuse x='393.268162' y='249.583745' xlink:href='#g2-111'/>\n\x3Cuse x='398.249501' y='249.583745' xlink:href='#g2-114'/>\n\x3Cuse x='402.151552' y='249.583745' xlink:href='#g2-105'/>\n\x3Cuse x='404.91896' y='249.583745' xlink:href='#g2-122'/>\n\x3Cuse x='409.346812' y='249.583745' xlink:href='#g2-97'/>\n\x3Cuse x='414.328151' y='249.583745' xlink:href='#g2-116'/>\n\x3Cuse x='418.202525' y='249.583745' xlink:href='#g2-105'/>\n\x3Cuse x='420.969933' y='249.583745' xlink:href='#g2-111'/>\n\x3Cuse x='425.951272' y='249.583745' xlink:href='#g2-110'/>\n\x3Cuse x='431.486089' y='249.583745' xlink:href='#g2-41'/>\n\x3C/g>\n\x3C/g>\n\x3C/svg>",type:"svgGraphic"},uuid:"7|6"},$R[833]={content:$R[834]={type:"text",text:"Another area where theory is crucial is in network security. How do routers efficiently find the best path for data to travel across the internet? They use pathfinding algorithms like Dijkstra's or BGP (Border Gateway Protocol). The design and analysis of these algorithms draw directly from graph theory and computational complexity to ensure they are fast and reliable enough to handle the immense scale of the global network."},uuid:"7|7"},$R[835]={content:$R[836]={type:"header",text:"Designing Fair Systems"},uuid:"7|8"},$R[837]={content:$R[838]={type:"text",text:"What happens when algorithms have to make decisions involving self-interested people? Welcome to algorithmic game theory, a field that blends computer science with economics. It studies how to design systems where individual incentives lead to good outcomes for the group."},uuid:"7|9"},$R[839]={content:$R[840]={type:"definition",term:"Mechanism Design",definition:"A field of game theory that focuses on designing rules for games (or systems) to achieve a specific, desirable outcome, assuming all participants will act in their own self-interest.",syllables:$R[841]=["mech","a","ni","sm","de","sign"],phonetic:"/ˈmɛkəˌnɪzəm dɪˈzaɪn/",partOfSpeech:"noun",exampleUsage:"Online ad auctions use mechanism design to sell ad space efficiently and fairly."},uuid:"7|10"},$R[842]={content:$R[843]={type:"text",text:"A classic application is online advertising auctions. When you search for something, an incredibly fast auction takes place to decide which ads to show you. Companies like Google use a sophisticated type of auction, often a variation of a second-price auction, to sell these ad slots. In a simple second-price auction, the highest bidder wins but pays the amount of the *second-highest* bid.\n\nThis mechanism is designed to encourage truthful bidding. Your best strategy is to bid exactly what you think the ad slot is worth. If you bid less, you risk losing to someone else for a price you would have been willing to pay. If you bid more, you risk paying more than it's worth to you if the second-highest bid is also high. This elegant design uses game theory to create a stable, predictable, and profitable marketplace."},uuid:"7|11"},$R[844]={content:$R[845]={type:"realImage",url:"https://oboe-storage.s3.amazonaws.com/dev/imagesReal/v1/e80793e2-c827-4bf3-84d4-939db88e038a.png",attributionUrl:"https://commons.wikimedia.org/wiki/File:Difference_between_Data-Driven_Companies_and_Data_Bounty_Hunter_Companies.png",caption:"Theoretical models help analyze how companies can use data and auctions for advertising and sales."},uuid:"7|12"},$R[846]={content:$R[847]={type:"text",text:"Mechanism design also applies to other areas, like ride-sharing apps that use surge pricing to balance supply (drivers) and demand (riders), or kidney exchange programs that use algorithms to find compatible donor-recipient pairs in complex situations."},uuid:"7|13"},$R[848]={content:$R[849]={type:"text",text:"Ready to test your knowledge on these applications?"},uuid:"7|14"},$R[850]={content:$R[851]={type:"quiz",questions:$R[852]=[$R[853]={text:"The security of many public-key cryptography systems, like RSA, is based on the computational difficulty of which mathematical problem?",options:$R[854]=[$R[855]={text:"Factoring a large number into its two prime components.",followup:"Correct. This asymmetry—multiplication being easy and factoring being hard—is the foundation for the security of systems like RSA.",isRightAnswer:!0},$R[856]={text:"Sorting a large, unsorted list of numbers.",followup:"While sorting can be computationally intensive, it is considered a 'solved' problem with efficient algorithms and is not used as the basis for modern cryptography.",isRightAnswer:!1},$R[857]={text:"Finding the shortest path between two nodes in a graph.",followup:"This is a problem solved by routing algorithms like Dijkstra's, not the basis for this type of cryptography.",isRightAnswer:!1},$R[858]={text:"Multiplying two large prime numbers together.",followup:"This part is computationally easy. The difficulty lies in reversing this process.",isRightAnswer:!1}]},$R[859]={text:"In a simple second-price auction, the winning bidder pays the amount bid by the ___________.",options:$R[860]=[$R[861]={text:"second-highest bidder",followup:"Correct. This mechanism encourages bidders to bid their true valuation of the item.",isRightAnswer:!0},$R[862]={text:"lowest bidder",followup:"The lowest bid does not determine the price paid by the winner.",isRightAnswer:!1},$R[863]={text:"highest bidder",followup:"The highest bidder wins the auction, but they do not pay their own bid amount in this type of auction.",isRightAnswer:!1},$R[864]={text:"auctioneer",followup:"The auctioneer sets the rules but does not determine the price in this way.",isRightAnswer:!1}]},$R[865]={text:"What is the primary goal of applying algorithmic game theory to systems like online ad auctions or ride-sharing apps?",options:$R[866]=[$R[867]={text:"To create systems that maximize profit for the platform above all else.",followup:"While profit is a factor, the primary goal is broader; it's about designing a stable and efficient system.",isRightAnswer:!1},$R[868]={text:"To design systems where individual self-interest leads to a desirable overall outcome.",followup:"Correct. Game theory helps create rules where users acting in their own best interest also contribute to a well-functioning system (e.g., truthful bidding, balancing supply and demand).",isRightAnswer:!0},$R[869]={text:"To prove that certain computational problems are fundamentally unsolvable.",followup:"This is a goal of computability theory, not algorithmic game theory.",isRightAnswer:!1}]},$R[870]={text:"True or False: The principles of graph theory are fundamental to the design of internet routing protocols that find efficient paths for data to travel.",options:$R[871]=[$R[872]={text:"True",followup:"Correct. The internet can be modeled as a massive graph, and pathfinding algorithms from graph theory are essential for routing data packets efficiently.",isRightAnswer:!0},$R[873]={text:"False",followup:"Incorrect. Graph theory is the core mathematical framework used for network routing problems.",isRightAnswer:!1}]},$R[874]={text:"A 'one-way' function in cryptography is one where the forward operation is computationally easy, but the reverse operation is computationally infeasible. Which of the following is an example of this concept?",options:$R[875]=[$R[876]={text:"Searching for an item in a sorted database.",followup:"Both searching for an item and verifying its location are computationally easy tasks.",isRightAnswer:!1},$R[877]={text:"Calculating the total cost of items in a shopping cart.",followup:"Adding numbers is easy, and reversing the process (subtraction) is also easy.",isRightAnswer:!1},$R[878]={text:"Encrypting a message with a private key and decrypting it with the same private key.",followup:"This describes symmetric cryptography. Both operations are designed to be easy for the key holder.",isRightAnswer:!1},$R[879]={text:"Combining two large prime numbers to get a product.",followup:"Correct. Multiplying the primes is easy (the forward operation), but finding the original primes from the product (the reverse operation) is extremely difficult.",isRightAnswer:!0}]}]},uuid:"7|15"},$R[880]={content:$R[881]={type:"text",text:"Theoretical computer science provides the essential tools for building the complex, secure, and efficient systems we rely on. From the mathematical hardness that protects our data to the game theory that powers online marketplaces, these abstract principles have a profound and practical impact on modern technology."},uuid:"7|16"}]}],version:3,formats:$R[882]=["deepdive"],isBookmarked:!1}},ssr:!0},$R[883]={i:"�_web�learn�$searchSlug��learn�foundations-of-theoretical-computer-science-1sqyjzt�",u:1784583982289,s:"success",l:$R[884]={courseData:$R[21]},ssr:!0}],lastMatchId:"�_web�learn�$searchSlug��learn�foundations-of-theoretical-computer-science-1sqyjzt�",dehydratedData:$R[885]={queryStream:$R[886]=($R[887]=(e) => new ReadableStream({ start: (r) => { e.on({ next: (a) => { try { r.enqueue(a); } catch (t) {} }, throw: (a) => { r.error(a); }, return: () => { try { r.close(); } catch (a) {} } }); } }))($R[888]=($R[889]=() => { let e = [], r = [], t = !0, n = !1, a = 0, s = (l, g, S) => { for (S = 0; S < a; S++) r[S] && r[S][g](l); }, i = (l, g, S, d) => { for (g = 0, S = e.length; g < S; g++) d = e[g], !t && g === S - 1 ? l[n ? "return" : "throw"](d) : l.next(d); }, u = (l, g) => (t && (g = a++, r[g] = l), i(l), () => { t && (r[g] = r[a], r[a--] = void 0); }); return { __SEROVAL_STREAM__: !0, on: (l) => u(l), next: (l) => { t && (e.push(l), s(l, "next")); }, throw: (l) => { t && (e.push(l), s(l, "throw"), t = !1, n = !1, r.length = 0); }, return: (l) => { t && (e.push(l), s(l, "return"), t = !1, n = !0, r.length = 0); } }; })()),dehydratedQueryClient:$R[890]={mutations:$R[891]=[],queries:$R[892]=[$R[893]={dehydratedAt:1784583982289,state:$R[894]={data:null,dataUpdateCount:1,dataUpdatedAt:1784583982185,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:"success",fetchStatus:"idle"},queryKey:$R[895]=["currentUser"],queryHash:"[\"currentUser\"]"},$R[896]={dehydratedAt:1784583982289,state:$R[897]={data:null,dataUpdateCount:1,dataUpdatedAt:1784583982185,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:"success",fetchStatus:"idle"},queryKey:$R[898]=["impersonationState"],queryHash:"[\"impersonationState\"]"},$R[899]={dehydratedAt:1784583982289,state:$R[900]={data:$R[21],dataUpdateCount:1,dataUpdatedAt:1784583982288,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:"success",fetchStatus:"idle"},queryKey:$R[901]=["sequence","1sqyjzt"],queryHash:"[\"sequence\",\"1sqyjzt\"]"}]}}})($R["tsr"]);document.currentScript.remove()