[Powered by Google Translate] [주 7] [데이비드 J. Malan - 하버드 대학교 (Harvard University)] [이 CS50입니다. - CS50.TV] 괜찮아요. 다시 오신 것을 환영합니다. 이 CS50이며,이 주 7의 시작입니다. 약간의 공지 사항 몇 가지 : Pset5는 현재 진행중인, 또는 곧한다 그리고 정말 솔직히 말 할게요,이 더 도전들 수하는 경향이 과정의 문제 세트,이 나를 지금은 언급하게 이번 주 이상 너이 될 때까지 기다리 않도록, 수요일 밤에, 말 나 목요일 밤에 들어 잠수 할 이 확실히 흥미로운 pset입니다. 우리는 재미 것 같아요. 당신은 실제로 완전히 정확하고 다음 소위 빅위원회에 이의를 제기 할 수없는 경우는, 당신은 물론 직원들과 순발력이 일치 할 수있는 기회를 갖게됩니다 과 친구들의 일부. 어떤 빅위원회는 것​​은, 일단 당신이 당신의 맞춤법 검사기 작동이됩니다 당신이 명령을 실행 한 후 cs50.net에 갈 수 있습니다 순전히 양의 시간과 RAM의 양과 이상의을 취소하고, 귀하의 구현에 사용 한 것은이 과정의 홈 페이지에 전시됩니다. 여기이 사람들의 전체 무리가 직원으로 표시됩니다 것을 알 수 지난 주말부터 직원은 서로를 능가하려고 재미있을 것이라고 생각했습니다. 자, 이제 목표는 직원을 능가하지 것을 알고 있습니다. 비록 나는 숫자 13은 여기입니다. 순전히을 취소하지만, 볼 수있는 기회가 얼마나 작은 RAM 과 몇 CPU 시간 (초) 귀하의 급우 마주 일부를 사용할 수 있습니다. 그리고 케빈 마이클 슈미트을 인정 현재 TFS의 하나로서 1 번 위치에서, 이게 우리가 할 수 없습니다 부른다 구현 한 것입니다 그는 로딩을 거의 0 RAM 거의 10 초 사용하고 있다는 것을 감안하면. 그래서 우리는 케빈 오프라인 처리됩니다. [웃음] 케빈이 시험에 넣는되는 특정 기술이 있습니다. 우리는 우리가 할 줄 알았는데 것들 중 하나는 역시 CS50x이 진행 주입니다 지금 그리고 너희들은 많은 학생들이 같이이 실험의 일부입니다. 우리는 스크래치 프로젝트를 제출 비슷하게했습니다있는 자신의 pset0의 일부로을 요청했습니다 의 그들에게 관심을 - 게임 아트의 인터랙티브 작품, 애니메이션, 또는 같은 - 1 -가 세계에 인사하고 누구하려는 경우에 2 분 비디오는 실제로 있습니다. 나는 당신과 함께 지금까지 제출 된 동영상 중 몇을 공유 줄 알았는데 우리의 직원에 적어도 정말 흥분되는 일 이었 때문 그리고 전 세계에서 이러한 사람들을 볼 고무 - 전 세계 국가 - 인터넷에서 컴퓨터 과학 코스, 모든 일을에 튜닝, 그것은 자신들의 연구를 계속하려면 때문입니다, 여부 그들은 새로운 방향으로 자신의 경력을 먹고 싶어 그들은 자신의 지식 격차를 작성하려면 너희들은 아마 여기 한 같은 이유의 일부 때문에. 그래서 여기 당신에게 하나의 학생을 제공합니다. 당신은 볼륨에게 조금을 높이 수 있습니다. 다음은 학생의 1 분 제출 중 하나입니다. 안녕하세요, 세계. 나는 말라가, 스페인에있는 여기를 산업 공학의 학생입니다. 나는 컴퓨터 과학을 사랑 하니까, 내가 정말로이 온라인 코스에 대해 흥분 와 저는 여러분들이 제가 여행 얻을 감사드립니다. 그리고 너희 모두가 같은 것을 배울 수 있다는 사실 대신 나는 말라가 (Malaga)에서 오전 하버드에 빠진 때문에, 그건 얼마나 멋진 지입니까? 음, 페르난도이고이 CS50입니다. 너희를 참조하십시오. [웃음] 우리가 특히 좋아하는 또 다른 클립이,이 신사의 영어가 그렇게 확실하지 않다고 찾을 수 있습니다. 그가 기계가 번역했습니다 것 같은데, 번역 자체가 약간 불완전하므로 하지만 지금까지뿐만 아니라 우리의 즐겨 찾기 중 하나입니다. [♪ ♪] 안녕하세요, 세계. [일본어로 말한다] [내 영어가 매우 불안정하기 때문에 나는 일본어로 인사를해야합니다.] [I은 기후의 도시, 일본에서 여러분에게 메시지를 전달하고 있습니다.] [I이 볼 수 있듯이, 20 년 만에 처음으로 학생이 될 수 있습니다.] [I 나에게이 기회 edX 준 사람 하버드 대학교 (Harvard University)에 매우 감사드립니다.] [골프는 기타입니다 그리고 내가 좋아하는 것은 실행할 수 있습니다.] [웃음] [♪ ♪] [왜 내가 cs50x에 참석하려고했던 것 같아.] [하버드 대학, 내 그리움입니다.] [특히 내가 먼 존재가 일본에 살았던 것 같다.] [I는 edX 때.의 존재 즉시 인식 체험을하고 싶어] [당신이 당신이 I. 학습의 시대에 관한하지 않습니다 그렇게 생각하지 않아요] [cs50는 나의 열망입니다. 내 이름은 카즈이며,이 cs50 수 있습니다.] [♪ ♪] [박수와 환호] 우리의 또 다른 좋아하는 사람이에서 여기에 제출했다. [♪ ♪] [Malan] 구글 그것은이 뮘에 익숙하지 않은 경우. 그리고 마지막으로, 아마도 사랑 스럽다 상을 우승하는 게시 어 다른 사람의 몇. [학생] 오! >> [Malan] 우리가 듣는해야합니다. 이 짧은이기 때문에, 잘 들어보세요. [여성 스피커]이 (가) 당신의 이름이 뭐예요? >> 루이. [여성 스피커] 이것은 무엇입니까? >> [헤헤] CS50. [웃음] [Malan] 그​​는하지만 안쪽 에선 1 ~ 2 않았습니다. 여기 우리는 마지막으로 이동합니다. 내 이름은 루이 있으며,이 CS50입니다. [웃음]이 그때 CS50x입니다. 집에서 함께 따라하는 동안의 사람들의 모든 감사 지금까지 사람을 함께하는되었습니다. 오늘날, 우리는 데이터 구조 우리의 토론을 체결 가장 기본적인의 일부 적어도, 그리고 우리는 HTML 및 웹 프로그래밍에 대한 우리의 대화를 계속 진행합니다. 사실, 우리는 칠주는 프로그래밍의 기본을보고 과거를 보냈어요 - 알고리즘, 데이터 구조, 그리고 같은 - 당신이 지금까지 경험 한 수 있으므로 C,, 반드시 언어의 가장 액세스 할 수 없습니다 어떤 분들 아이디어를 구현합니다. 그리고, 이번 주 다음 주 시작하고 다음 우리는 드디어 일반적으로 매우 낮은 수준의 언어로 알려져 있습니다 C,에서 전환 할 수 있습니다 할 것도 높은 사람들 PHP, 자바 스크립트 간의 레벨과 같은을 우리는 우리가 지난 몇 주 동안 배운 것과 동일한 수업에 그리는를 볼 수있는 하지만 찾을 수 그 배열과 해시 테이블 같은 것을 선언 및 검색 및 정렬 언어 자체가 우리가 사용됩니다 때문에 훨씬 쉬워졌습니다 더 강력한 될 것입니다. 하지만 먼저, 나무의 응용 프로그램입니다. 이 정보를 압축해야 할 요즘 매우 일반적입니다. 어떤 상황에서는 디지털 정보의 일부 종류를 압축했을까요? 그래. >> [학생]는 당신이 웹을 통해 그것을 보낼 필요합니다. 네, 당신은 웹을 통해 무언가를 보낼 때. 당신이 큰 파일을 다운로드 할 경우, 반대편에 사람이있는 경우 이상적입니다 우편 형식 또는 그런 일을 사용하여 해당 파일을 압축했다 다른 방법이 전송 될 수보다 적은 비트를 보낼 수 있도록. 그럼 당신은 정보를 압축합니까? 기본적으로 필요한 것보다 적은 비트를 사용하는 것이라고 요약 할 수 있습니다. 주 0과 1로 생각하지만 이건 재미있는 것은 어떤 종류의 우리는에 대해 ASCII 및 이진 이야기 우리는 특히에 대한 ASCII 얘기 할 때 알파벳의 편지를 표현하기 위해 8 비트를 사용하는 편지는이 65로 표시 될 수 있도록,이 숫자 97이다 소문자 와 그러나 당신이 7 8 비트를 사용하고, 65 또는 97를 나타냅니다. 그러나 캐치는 영어 알파벳의 일부 글자가 있다는 것입니다 다른 사람들과 인기가없는 것. Z는 모두 인기가 없다 Q는 모든 인기있는 것이 아니라, A와 E가 인기 최고입니다. 그리고 아직이 편지의 모든에 대해 기본적으로 그냥 세상, 8 비트의 동일한 번호를 사용합니다. 그래서 더 똑똑 대신 모든 편지 8 비트를 사용, 가지 않았을 텐데, 심지어 가장 자주, Q와 Z처럼 사용할 우리는 A와 E와 S와 가장 인기있는 편지에 적은 비트를 사용한 경우 하고, 덜 인기있는 문자에 대한 더 많은 비트를 사용 일반적인 사건에 대한하자의 최적화되는 생각, 이는 가장 무슨 일이 일어날 지 최적화하기 위해 노력 컴퓨터 과학 테마입니다 그리고, 그래, 무슨 일이 일어날하는 것들에 조금 더 시간이 좀 더 많은 공간을 할애 하지만 반드시 자주 있습니다. 그러니 예를 봅시다. 우리가 매우 효율적으로 정보를 인코딩 할 가정 해 보겠습니다. 당신은 모스 부호에 대해 좀 아는 어른 수도 그리고 아이가, 당신이 실제 코드를 몰랐 아르 하지만 당신은이 점과 대시 최소한이 시리즈라고 기억 할 수 있습니다. 예를 들어, E -이 상당히 효율적인 코딩 및 통지의 가장 인기있는 문자입니다 - 삡의 짧은을 사용합니다. 모스 부호는 삐 - 삐 - 삐 - 삐 - 삐 - 삐에 대해와 색조를 개최합니다 두 시간이나 오랜 기간의 짧은 기간 동안. 같은 점으로 표시 E는 슈퍼 짧은 신호음, 그냥 삐 있으며, 그 E.를 나타내는 것 반면, T는 삐 같은 이상 신호음이 될 [소리 연장] 것, 그리고 그게 T.를 나타내는 것 당신은 Z를 살펴보면, 반대로, 때문에 그건 아직 꽤 짧다 Z를 표현하기 위해 당신은 삑, 삑 [더 이상 소리], 삑, 삑 [짧은 소리] 갈 것입니다. 가 많이 때문에 그게 더 이상. 하지만, 여기에 잡았다는 모스 코드가 조금 문제가있는 것입니다 점에서 즉시 decodable 없습니다. 예를 들어, 와이어 삐의 일부 끝에 소리했다고 가정 [짧은] 삐 [긴]. 난 그냥 어떤 메시지를 받았습니까? 점과 대시. 그 무엇을 나타 냅니까? [학생] A. >> [Malan] 어쩌면. 또한 T. 뒤에 E 될 수 즉, 모르스 부호, 그것은 코너 케이스를 최적화의 원리를 활용하지만 그것은 바로 decodability에 자신을 빌려하지 않습니다. 즉,이 점 및 대시를 청각 또는 수신하는 인간입니다 바꿈 문자 사이의 위치를​​ 어떻게 든, 알아 있습니다 그 휴식이 어디 당신이 모르는 경우 동부 표준시하거나 그 반대로에게 혼란을 줄 수 있기 때문. 그럼 당신은 어떻게할까요? 모스 코드에서 당신은 편지의 각 사이에 일시 중지 수 있습니다. 그러나 일시 중지 물건을 속도의 전체 지점 카운터의 종류입니다. 이 나쁜 상황이없는 곳 우리는 코드와 함께 와서 그래서 대신하는 경우 위치 E는의 예를 들어, 접두사입니다 - 즉, 우리는 패턴이 인기있는 문자에 대해 아직 짧은 있는지 확인 할 수 있을까? 덜 인기있는 편지 긴하지만 가능한 한 혼란이 없어? 호프만의 이름으로 사람이 년 전 허프만 코딩이라는 제도를 발명 그 사실은 우리가 얘기하는 시간을 조금 소비 한 데이터 구조 중 하나를 활용 지난 주, 특히 나무, 이진 나무의 - 이 2 명의 어린이보다 더 이상하지 못하는 이진 트리 의미. 그것은 아마, 아마 오른쪽 아이가 왼쪽 아이가 있고, 그게 다예요. 누구 메시지를 보내 싶어 단지 논의의 위해 가정 그게이 것 같습니다. 이 작업이 완료 말도 있지만으로 구성된있어, B들, CS, DS, 그리고 믿을 수. 그리고 당신은 실제로로의 모든을 계산하면, B들, CS, DS, 그리고 믿을 수 그리고, 문자의 총 횟수로 나누어 여기이 작은 차트는 글자의 45 %가 믿을 수 아르 20 %로되어 있다고 10% 학사 등등. 따라서 즉, 가정 저기 인용 문자열 당신이 보낼 것을 몇 가지 메시지가 있습니다. 그것은 우리가 가능한 한 적은 문자로 사용할 수 있습니다 그냥 말도 안되는 것 일 하지만 실제로 E는 가장 인기있는 남아있는 경우, 야 그리고 B와 C는 가장 인기있는, 알파벳이 5 글자 이상.주세요 그럼 우리는 인코딩을 만드는데에 대해 갈 수 바이너리 인코딩이 편지의 각 0s와 1S의 패턴 E는 짧은 패턴이며, 어쩌면 B와 C가 약간 이상 패턴 것을 같은 방식으로, 다시 생각은 우리가 적은 비트에게 대부분의 시간을 사용하고자하는 것 만 가끔은 더 많은 비트. 허프만 코딩에 따르면, 당신은 나무의 숲을 만들 수 있습니다. 스토리 라인의 종류는 나무와도를 구축하는 과정에 관련되어 있다는 것을 여기에 있습니다. 시작해. 당신이 그렇게 다섯 나무, 이야기,이 숲으로 시작하는 제안 어떤의 각은 아주 바보 같은 나무입니다. 나무로 원으로 여기에 표현 단 하나의 노드로 구성되어 있습니다. 따라서 이러한 것들이 각 C의 구조체 될 수 그리고 내부의 C의 구조체의이 주파수 카운트를 나타내는 부동 될 수 그리고 아마 편지를 나타내는 문자. 그래서, 지금 높은 수준을 마치 다른 오래된 C의 구조체로이 노드 생각하지만. 이 호텔은 5 나무, 단지 하나의 노드를 가진 각각의 숲입니다. 호프만 제안은 우리가 그 나무를 결합하는 시작하는 무엇입니까 약간 더 큰 나무로 작은 주파수 카운트가 그 새로운 루트 노드으로 연결. 자, 이제 문자들, 편의를 위해 나는 왼쪽에서 오른쪽으로 정렬 한 것을 그 엄격하게 필요한 사항이 아닙니다하지만 그 작은 노드 현재 10 % 10% 있습니다. 따라서 호프만은 우리가 새로운 나무로 지난 2 작은 노드를 병합하는 제안 후 새 부모 노드를 소개하고하여 해당 부모에게 왼쪽 자녀와 권리가 아이를주십시오 B는 임의의 왼쪽이며, C는 임의의 오른쪽입니다. 그리고 호프만 더욱하자 이젠 그냥 왼쪽 자녀의 생각 제안 이 나무 중 하나에 항상 (으)로 0으로 표시되고 하고 오른쪽 어린이는 항상 숫자 1로 표시된다. 왜 그렇게 오래 당신이 일치 해요로 뒤집기를하면 문제가되지 않습니다. 이제 우리는이 숲 네 개의 나무가 있습니다. 그리고 말의 왼쪽에 네 개의 때문에 이제 나무 - 그리고 너무 많은이 이런 식으로 성장하는 의미에서 나무 아닙니다 지금 0.2은 두 아이의 부모의 일종 인 가족 나무처럼 야 - 그 부모에 우리가 0.2를 그려 놨 것을 확인할 수 있습니다. 우리는 두 아이의 주파수 카운트를 추가하고 새 노드의 총 합계 드렸습니다. 이제 우리는이 과정을 반복합니다. 두 작은 노드를 찾기 다음 새 트리으로 가입 그리고 더 과정을 반복합니다. 지금 우리는 몇 후보자, 20 %, 15 %, 그리고 20 %가 있습니다. 이 경우, 우리는 넥타이를 깨 부숴 야 해요. 우리는 그것에게 임의로 작업을 수행 할 수 있습니다. 우리는 지속적으로 할 것입니다. 이 경우, 나는 임의의, 왼쪽에있는 한 사람과 갈거야 그리고 지금 나에게 35%라는 새로운 부모를 제공하기 위해 20 % 15 %를 병합 누구의 오른쪽 자녀 1, 지금 우리는 숲에서 단지 세 그루의 나무가 0 그의 왼쪽 자녀입니다. 당신은 아마도이가는 곳 볼 수 있습니다. 우리가이에게 몇 번을 반복하면, 우리는 하나의 큰 나무를 할거야 그의 가장자리 0s와 1S으로 분류됩니다 모든. 다시 한번 해보자 구. 35%가 그 나무의 루트입니다. 20% 45 %가, 그래서 우리가 35 %와 20 %를 병합거야. 이제 우리는 여기이 나무가 있습니다. 우리는, 저를 추가 우리가 55 %를 있습니다. 이제 숲에서 두 그루의 나무가 있습니다. 우리는이 마지막으로 시간을하고, 희망적으로 수학적으로 모든 주파수가 추가 그들은 이후 우리는에서를 계산해야하기 때문에 100 %까지 추가하게 - 이동합니다. 그리고 이제 하나의 나무가 있습니다. 그래서이 허프만 코딩의 나무입니다. 그것은 가지 구두가 얻을 때까지 시간이 좀 걸 렸어요하지만 현실은 루프에 함께 또는 재귀 함수, 자네가 꽤 빨리이 일을 만들 수 있습니다. 이제 우리는 하나의 새로운 노드를 가지고 있고,이 내부 노드의 모든 malloc'd되었습니다 추측 컨데, 길을 따라. 우리는 경로가 그래서 지금이 나무의 상단에 우리가 100 %를 가지고 있지만 지금은 알 이 새로운 선조 - 조부모의 선조 - 손자의 모든 잎의 모든 하단에있는 모든 방법. 우리가 지금 할 수있는 일은하면, 문자 E를 대표하기 위해 해당을 정할 우리는 단순히 숫자 1을 사용합니다. 이유는 무엇입니까? 우리가 E로 알려진 잎으로 최종 루트에서이 나무를 통과하면, 우리는 하나의 에지, 오른쪽 가장자리를 따라, 그리고 오른쪽 상단 1에서 물론이라는 것 같네요. 따라서 호프만 보시려면 여기를 시사하는 바이너리에서 E의 인코딩이 단 1한다 것이 었습니다. 그리고 꽤 효율적입니다. 정말 그것보다 더 작아을 가져올 수 없습니다. 대조적으로, A는 논리를 따를 경우, 표현 될 것입니다 대신 비트 어떤 패턴으로? 01. 그럼에 도착, 우리는 루트부터 시작해서 왼쪽으로 이동하고 우리가 오른쪽 이는 우리가 0을 따라 한 후 1을 의미합니다. 그래서 우리는 패턴 0과 1로 문자를 나타냅니다한다. 그리고 지금 우리는 이미 바로 decodability의 속성을 발견 우리는 모스 코드에서이없는 것이 었죠. 이 패턴이 모두 매우 짧은 경우에도 - E는 1 비트입니다, A는 2 비트입니다 - 그들은 하나 또는 다른, 혼동 할 수없는 것을 알 당신은 1 참조하면 그것은 당신이 볼 경우, E있을거야 때문에 0 다음은 분명 A.있을 거예요 1 마찬가지로, D 뭐죠? 001. C는 무엇입니까? 0001. 그리고 B는 무엇인가? 0000. 그리고 다시, 우리가 걱정하는 문자는 모두 잎에 있기 때문에 그 중 어느 것도, 루트 잎의 경로에 중간의 종류되지 않습니다 이 편지를 '다른 인코딩을 conflating의 위​​험이 없습니다 이 비트 패턴의 모든 결정하기 때문입니다. 0000은 항상 B. 될 것입니다 당신이 다른 하나는 편지를 혼동 할 수 어딘가에 사이에 노드가 없습니다. 그래서 여기 함축 된 의미는 뭐죠? 가장 인기있는 편지 -이 경우 E의는 - 가장 짧은 인코딩을 얻었다 A는 다음 짧은 인코딩을 얻었다 우리가 이미 적어도 인기의 첫인상이었다 종류에서 알고 B와 C, 10 %의 주파수 각각에, 그들은 가장 긴 인코딩을졌습니다. 그리고 이것이 지금 의미 것은 당신이 압축있어 메시지를 보내려면 인터넷을 통해 또는 이메일 또는 같은에 오히려 표준 ASCII를 사용하는 것보다, 당신은 호프만 암호화 된 메시지를 보낼 수 있습니다 당신은 문자 E를 보내려면 상기, 당신은 단지 하나의 비트를 보낼 수 있습니다. 당신이를 보내려면, 당신은 2 비트, 01, 대신 8 비트를 보내 보내 등등 다른 8 비트 및 다음 다른 8 비트 다음. 그러나 잡았다 여기 있습니다. 단지 앨리스 Bob에게 보낼 다음이 나무를 구축하고 충분하지입니다 짧은 비트 패턴, ASCII에서 문자열, 앨리스는 무엇의 밥을 알려 있기 때문에 밥은 그녀의 압축 메시지를 읽을 수 있겠 경우? [안 들리게 학생 응답] >> 그게 뭐야? [안 들리게 학생 응답] 트리가 무엇의 >>. 또는 더 구체적으로, 이러한 인코딩이 무엇인지, 이 이야기하는 동안 우리가 한 점에서 판결 전화를했다 특히 때문입니다. 우리는 2 개의 다른 20 %의 노드 사이에 임의로 선택해야한다고 기억나요? 그럼 밥,받는 사람, 그냥 자신의 트리를 재구성 할 수있는 상황이 아니라는 아마도 그는 언제나 약간 다르게 앨리스 트리를 생성합니다 때문입니다. 또한, 밥도 원래 메시지가 무엇인지되지 않습니다 앨리스가 그를 보내는 유일한 것은 물론, 압축 된 메시지이기 때문이다. 같은 압축 캐치이 있습니다 그래서, 그래, 앨리스는 비트 전체 많이 절약 할 수 있습니다 등등을 위해 E 1과 01을 보낸, 그녀는 또한 매핑이 문자와 비트 사이에 무엇인지 밥을 알려있다 우리가 ASCII 사용하지 않으면 분명 단지 ASCII 더 이상 의지 할 수 없기 때문에. 그래서 그녀는 두 어떻게 든 그에게 나무를 보낼 수 있습니다 - 그런 식으로 이진 데이터 또는 무언가로 저장을 적어 - 또는 그에게 매핑을 보여줍니다 약간의 컨닝 시트, 엑셀 파일을 보낼 수 있습니다. 따라서 압축의 효과는 정말 가정 당신이 보내는 그 메시지 , 중간 크기의 최소, 예쁜 큰 당신이 슈퍼 짧은 메시지를 보낼 경우 때문에, 방금 메시지가 BAD 보내려면되는데,이, 우리가 철자 할 수있는 단어로 발생 B-A-D, 당신은 아마도 적은 비트를 사용하는 것, 여러분은 또한 나무가 무엇 밥을 알려해야한다면 그 댓가가 있습니다 또는 그 인코딩이 무엇인지, 당신은 아마 저축의 모든을 무릅 쓸거야 로 시작하는 압축 일들을 갖는. 그럼 실제로 시도하는 경우 압축되는 경우가 있습니다 심지어 우편 번호 또는 파일 형식과 같이 여러분은 잘 알고있을 - 아주 작은 파일, 심지어 빈 파일 - 때때로 이러한 파일은 크고 작은 못받을 수도 있습니다. 그러나 현실적으로, 그 만 작은 파일 크기를 어떻게 그래서 기가 바이트 파일 크기가 2GB 될하지 않을거야; 우리가 정말 바이트 또는 몇 킬로바이트을 이야기하고있어. 우편 번호와 같은 일부 프로그램은 그걸 깨달았을 할 수있을만큼 똑똑 "당신이 압축 더 많은 비트를 지출 할 것"이라고 말했다. "나 전혀 당신을 위해 압축 걱정하지 말자." 그래서이 텍스트 형식으로 압축을 한 다음 방법 중 하나입니다. 우리는 C.에서이 같은 것을 구현 할 수 예를 들어, 여기에 우리가이 트리에서 노드를 나타낼 수 방법입니다 우리는 기호에 대한 문자, 주파수 부동 값을 가지고있는 우리는 다른 데이터 구조, 2 포인터와 함께 본 적이로 NULL이 될 수도있는 왼쪽 자녀, 오른쪽 1 대 1, 하지만 그렇지 않으면 왼쪽 자녀와 권리가 자녀를 의미합니다. 그래서,이는 허프만 코딩이며, 당신이 정보를 압축에 대해 갈 수있는 또 하나의 방법 그리고 확실히 구현하기 가장 쉬운 중 하나 지난 주의 데이터 구조, 말의 맥락에서, 더 정교한 알고리즘이 존재하지만 그 데이터의 더 복잡한 변이를 할 수 있습니다. 모든 나무, 이진 나무, 또는 텍스트의 압축에 대한 다음 질문? [학생] 어떤 모호함이 [안 들리게] 분할하는 경우와 같은 01에 있습니까, 그리고 011는 모호한, 옳을까요? [안 들리게] >> 좋은 질문입니다. 모호함. 여기이 그림을 참조하여 제가 요약 보자. 때문에이 압축되는 문자의 표현, 이 알고리즘의 정의에 의해 항상 잎 남아 당신은 실수로 여러 글자의 접두사에 대해 비트 같은 패턴을 사용하지 않을거야. 그래서 다른 말로, 당신이 걱정하고, 그것은 발생하는 모호함, 소리 상기 001은 B의 시작 또는 C 또는 그런 일의 시작이 될 수 있습니다. 하지만 그건 알파벳 문자 모두가 인코딩 있다는 이유 통지의 경우 수 없습니다 잎 이용하실 수 있습니다. 모호는, 모스 코드의 경우에서와 같이 발생할 수 경우, 예를 들어, C는 루트에서 B.에 대한 경로 어디 선가했습니다 [학생] 맞아. 그렇다면, A는 2 잎을 가지고 말한다. >> A는이 말 - 그 다시 말해. [학생] A는 2 잎, F와 G, 그리고 G가 말해봐 - >> 좋아합니다. 하지만 안 할 수 있습니다. A는 그 자체가 그 편지 때문에 잎의 F와 G를 가질 수 없다고 F 및 G 자체 B의 왼쪽 또는 E.의 오른쪽에있는 곳으로 떠나는 것 따라서 정의에 의해, 그들은 잎해야합니다. 그렇지 않으면, 당신은 정확히 맞아, 모스 코드가 직면 한 문제를 해결하지했습니다. 좋은 질문입니다. 다른 질문? 괜찮아요. 우리가 능력이 있어요 아웃 비트의이 개념은 우리가 실제로 사용하지 않는 모든 걸 함께 변 그것은이 0s와 1 초를 조작에 왔을 때. 우리는 초기 문제 세트 중 하나를이 물어 : 즉, 당신은 대문자는 소문자 또는 그 반대로 변환에 대해 어떻게 가야합니까? 또는 더 구체적으로, 그 첫번째 psets 중 하나가 물었다 얼마나 많은 비트가 실제로 반대의 경우도 마찬가지을 소문자로 변경하기 위해 대칭해야하나요? 여기에 65 97 바이너리에 어떻게 생겼는지에 대한 간단한 신호입니다. 심지어 경우 그 문제는 약간, 메모리에 사라졌고 당신은 얼마나 많은 비트가 뒤집혀해야 할 것으로 다시 볼 수 있습니다 자본을 변경하려면를 소문자로? 하나. 그들은 하나의 위치 만, 왼쪽에서 세 번째 비트에 차이가 있습니다. A는 010, 조금있다 반면에 011이 있습니다. 그래서 어떻게 든, 우리는 그 비트를 돌려 할 수 있어야합니다 우리는 대문자 나 문자를 소문자 할 수 있습니다. 우리는 실제로 사용하여 과거에 이런 짓을 한 조건 경우 그리고 문자 자본과 자본 Z 사이에있는 경우 확인, 다음과 같은 출력 - + 26 그런 일. 당신은 아마 알파벳의 편지에 산술 변경 했어요. 하지만 우리는 단일 비트 그 무엇을 뒤집기 할 수 있다면? 어떻게 01,000,001와 01,100,001 것처럼 비트, 8 비트 중 하나 바이트의 가치를 복용에 대해 갈 수있는 거죠? 당신이 비트 그 패턴이 있다면, 우리는 그 중 하나를 변경에 대해 어떻게 갈 수 있을까요? 우리가 노란색으로 비트의 다른 패턴을 소개하면 어떻게됩니까? 제가 변경하고 싶은 한 비트를 제외하고 전체 노란색 문자열 0s를하면 그럼 내가 비트 연산자라는 새로운 연산자를 소개 - 이 각각의 비트에서 작동하는 의미에서 비트, 하지 전체 바이트 또는 4 바이트 모두 한 번에 있습니다. 노란색에,이 수직 막대는 우리가 자본의 표현을 어떻게 받아들이면하는 것이 좋습니다 와 비트 노란색 순서와 비트 OR어요? 즉, 스크래치에 부울 표현식 우리의 토론으로 생각하고 C.에 부울을하거나하는 것은 사실이 밝혀 있다는 것을 의미 중 첫 번째 것은 사실합니다 나, 그리고 두 번째는 사실하는 또는 두 사실이 있어야 후 결과 출력은 사실 그 자체입니다. 여기이 경우, 우리는 0으로 ed를 어떻게 우리가 0을 받아들이면하기 "또는"어떻게해야합니까? 허위 또는 거짓? 아직도 허위이야, 소문자는 예상대로 남아 있도록. 무엇 대신에 우리가 1 또는 0을하면? 이은 1 남아 있지만, 여기에 이​​런 일을 확인합니다. 우리는 자본과 시작하고 우리가하는 일로서 우리는 각각의 비트를 계속 "또는"경우, 0 또는 노란색 하나는 여기 무슨 우리가 제공? 이 우리에게 하나를 제공합니다. 사실, 우리는 작은의 대문자 버전이 실제로 뭔지 몰랐어요 것 같아요. 의 이렇게 가자. 내가 여기이 다시 이동하세요. 다시이 작업을 수행하자. 0 또는 0 날 0을 제공합니다. 1 또는 0 저에게 하나를 제공합니다. 0 또는 1이 나에게 한을 제공합니다. 0 또는 0 날 0을 제공합니다. 다음 하나는 0, 다음 하나는 0, 다음 하나는 0입니다. 1 또는 0 저에게 하나를 제공합니다. 우리가 사전에 몰랐다 경우에도 그리고,했다가 소문자 일 단순히 보내어 "또는"우리가 노란색으로 여기에 제시된 한 비트의 패턴, 그 비트를 내리고으로 자본을 소문자 할 수 있습니다. 우리는 표현 주 전에이 사용 : 조금 내리고. 당신이 실제로 어떻게 프로그래밍합니까? 당신은 일반적으로 마스크, 비트의 순서를,라는 것을 사용합니다 그건이 경우에는 그냥 여기이 번호처럼 보이도록 일 다음 "또는"모두가 함께이 새로운 C 연산자를 사용하여 하지 | |, 당신은 하나를 사용하여 | 때문에 당신은 왜 실제로 여기에 대한 답변을 얻었 을까? 이것은 1 초 장소, 거 고요 장소, 8s, 4S 16, 32s 있습니다. 그럼 당신이 대문자를하면 A와 정수 32 비트 또는, 밝혀 정수 32 때문에, 당신은 비트으로 볼 때,과 같은 당신이 실제로 원하는 비트를 뒤집어 의미한다. And 유사 - 그리고 우리가 순간에 코드를 살펴 보겠습니다 - 우리가 다른 방향에 가고 싶어요 가정 해 보겠습니다. 당신은 소문자 자본에서 어떻게해야할까요? 어떤 비트는 변경 할 필요가? 이 같은 하나. 우리는 0으로 1 일부터 그 세번째 비트를 변경하고 싶습니다. 그리고 어떻게 우리가이 일을에 대해 이동할까요? 어떻게 우리가 조금 해제하려면 어떻게해야합니까? 비트 어떤 패턴으로 우리는 약간 좀 꺼 줄래요? 우리가 마스크 반전으로 정렬한다면? 이전 반면, 우리는 전체 노란색 마스크 0s 한 한 비트를 제외하고 우리는 켜 싶어 무슨 시간이 있다면, 우리는 해제 할 비트를 제외하고 전체 마스크 1 초를 그리고 어떤 연산자를 사용할 수 있습니까? 우리 "및"일 경우? 가 살펴 보자. 지금 우리가이 일에 뒤집기하면 다시는 모든 1 초입니다 마스크를 만드는 것이 가정 제가 해제 할 한 비트를 제외 그리고보다는 "또는"여기에 노란색 번호 꼭대기의 흰 번호, 무엇 같이 I 대신에 "와"그 경우? 이 비트 전화있어. 논리적으로 부울과 같은 일이야합니다. 이 0 & 1 0 저를 제공합니다. 따라서 거짓과 진실은 false입니다. 진정한 진정한 사실입니다. 그리고 여기에 마법 : TRUE와 FALSE 지금 거짓이므로 그 장면이 해제되었습니다. 그리고 지금 이야기의 나머지 부분은 다소 간단합니다. 마스크의 나머지는 1 초이기 때문에 숫자가 흰색에 어떤 중요하지 않습니다. 당신이 "와"진실이 뭔가, 당신은 그 값을 변경하지 않을 때. 사실이라면, 사실 유지됩니다. 이 거짓이라면, 그것은 거짓 유지됩니다. 당신은 사실 뭔가를 찍을 때 그러나 마법이 발생 허위로 누른 다음 "과"그. 이것은 비트를 해제하는 효과가 있습니다. 거기에 따라서 약간 이상한. 실제로 더 많은 암호화 볼 수있는, 그럼 실제로 어떤 코드를 보자, 하지만 우린 ToLower는 이곳을 봅시다. 나는 ToLower는 보면, A는 A를 소문자로 자본의 것 우리가이 프로그램을 구현하는 방법을 살펴 보자. 다음은 주요이고,이 모든 명령 줄 인자를 복용 없어. I는 사용자가 들어 입력 할 것을 편지 문자 C를 선언 했어 루프 단지 사용자가 확실히 나에게 자본을 제공합니다 있는지 확인하는 동안은 내가 그 다음 친숙한 DO를 사용하여 또는 B 또는 C. .. Z, 그럼 나 한테와 Z. 사이에 뭔가를 제공 그리고 지금 여기서 뭐하고있는 거지? 난 "또는"0x20로 불라하지만 실제로 같은거야 - 우리는 순간이 다시 올거야 - 32. 그러니 다시 32 여기 비트의 패턴이다. 왜 우리는 알 수 있나요? 그냥 주 다시 0으로 생각합니다. 이것은 1 초 장소, 거 고요 장소, 4S, 8s, 16, 32s 곳입니다. 그래서 노란색 숫자는 32로 발생합니다. 그럼, 말 그대로 숫자 32 여기 비트 "또는"을 숯불 같은 편지를 취할 수 내가 무엇을 다시 돌려 주실 건가요? 그 문자의 소문자 버전입니다. 순간 전은, 다른 기본 표기법에서이 작업을 표명했다. 이것은 무엇을 의미 거죠? >> [학생] 16. [Malan]이 16 진수를 나타내는 발생합니다. 우리는 모두 많은 진수에 대해 얘기하지 않은 하지만 이런 경우에 실제로 편리하다. 그것은 더 복잡한보고에도 불구하고 그 20가 아닌 32 인 것 같은데, 비록 그것은 16 진수 실제로 슈퍼 편리 표기법입니다 판명 16 진수마다 0x 뒤에 숫자 때문에 -이 아무 의미가 없어; 여긴 16 진수 숫자가 들어오는데 그냥 사람 컨벤션입니다 - 이 숫자의 각, 2, 다음 0, 자체는 표시 할 수 정확히 4 비트와. 우리가이 작업을 수행하는 경우 그럼, 텍스트 편집기를 열고 보자 - 이상한 자동 완성 - 우리가 여기서 약간의 텍스트 편집기를하면, 번호 0x20는 4 비트입니다 뜻이 여기 또 다른 4 비트입니다. 첫번째 가장 오른쪽 4 비트를 보자. 4 비트로 표현할 0 무엇인가? 슈퍼 편리합니다. 그냥 0s. 따라서 0s 등 4 비트. 어떻게 2를 대표합니까? 그것은 우리가 이런 짓을한지 꽤 오래되었습니다하지만 0100 죠. 이 1 초 곳입니다 그래서이 거 고요의 장소입니다, 다음은 다른 곳이 무엇인지 상관하지 않습니다. 즉, 16 진수 당신은 0x20라고 할 수 하지만 다음 2 일에 대해 생각하고 어떻게 바이너​​리로 표현되는 경우, 무엇을 0이며 어떻게 바이너​​리로 표현되고, 그 질문에 대한 답변은 각각이이 있습니다. 그럼 0x20은 8 비트의 패턴을 표현하기 위해 어떻게 이는 바로 우리가 바라던 마스크입니다. 그래서이는 순간을 위해 단지 지적 운동입니다 하지만 현실은 코드에서이 같은 상수를 작성하는 일반적으로 더 일반적입니다 16 진수 다음 프로그래머가 할 수있는 비교적 쉽게 때문에, 이 종이와 연필을 필요로하는 경우에도 비트의 패턴이 무슨 날인지 알아내는 당신은 코드에서 일반적으로 0s와 1S 표현할 수 없습니다 때문입니다. 당신은 00,010에 가서 등등 할 수 없습니다. 당신은 진수 또는 진수 또는 진수 또는 다른 표기법을 선택해야합니다. 대부분의 사람들은 간단하게, 각 숫자는 4 비트를 나타내는 16 진수를 선택하는 경향이 그리고이 빠른 수학을 수행 할 수 있습니다. 그리고 거의 동일 toupper에서 내 손을 흔드는 것, 그것은 거의 동일 보입니다. Toupper가 아닌 나 운영자가 아니라 남자와 DF를 사용하여 발생합니다. DF는 무엇을 나타 냅니까? DF? 누구? >> [학생] 255. 255? 하지 255. 그래서 FF 것입니다. 우리는 운동을 좀로 하나를두고 있습니다. 귀하는 0부터 시작이라면, 그 1, 2, 3, 4, 5, 6, 7, 8, 9과 9시 일까? 우리는 자릿수가 부족 일종의 만, 16 진수 무슨 일 9시 일까? [학생]. >> 그럼 A, B, C, D. 당신은 거기에 D가 실제로 나타내는 비트의 어떤 패턴에서 알 수 있습니다. 우리가 수학을하지 않으면, 우리는 당신이 돌아 치울 마스크이 동일하다고 볼 수 있습니다. 이 F, 모두 1 초이며,이 D입니다. 그럼 DF는 마스크를 나타냅니다. 괜찮아요. 그리고 마지막으로, 일 사운드 슈퍼, 슈퍼 기술을 할 수 없음 하지만 우리가이 일을하는 프로그램을 작성하고 싶어 가정 해 보겠습니다. 내가 가서 binary.c라는 파일의 프로그램 바이너리를 만들어 보자. 그리고 지금 바이너리를 실행하고 나에게 음수가 아닌 정수를 주자. 가자는 0에서 쉽고 타입 시작합니다. 이는 이제 이진 표현에서 정수를 출력하는 프로그램입니다. 다시는이 게임을 불과 1 입력하면 그래서 1의 32 비트 표현을해야합니다. 제가 2 다시이 작업을 수행하는 경우, 그런을해야합니다. 나는 7 할 경우, 나는 등등 끝 부분에 몇 1S를하고해야합니다. I 때문에 비트 운영과이 얘기 아웃이 변 당신은 실제로뿐만 아니라 다른 일을 할 수 있습니다. 당신은 동적으로 이러한 마스크를 만들 수 있습니다. 비트 작업을 포함하는이 마지막으로 예를 살펴보십시오. 다음은 코드의 첫 번째 부분은,, 번호를 사용자에게 묻는 메시지를 그리고 당신이 저에게 음수가 아닌 정수를 제공한다고 주장합니다. 그래서 오래된 학교 물건의 일종 이죠. 하지만 여기 흥미로운 종류의 뭔가입니다. 어떻게 이진의 숫자를 인쇄에 대해가요? 처음 것과 일에 반복? 적어도 어플라이언스에 일반적으로 정수의 크기 무엇입니까? >> [학생] 4. 은 4입니다. 따라서 4 * 8은 32 - 1 31입니다. 내가 31을 기준으로하기 시작 했어요면, 그, 그게 밝혀 나타냅니다 그냥 개념적으로, 여기이 남자는이 31 비트 또는 가장 높은 순서 비트, 이 비트 0 될 것입니다 반면. 그래서이 비트 01는 ... 비트 31. 그래서이 코드는 뭐하는 거지? 이 암호화 된 모양에도 내려 31 일부터 0으로 반복되어, 루프 위해이 일을 확인할 수 있습니다. 그게 전부 야. 그래서 흥미로운 부분은 지금은 여기이 5 행에 있어야합니다. 이 줄에 제가라는 변수 마스크를 선언납니다 이 노란색 숫자의 우리의 이야기와 일치해야합니다. 그리고이 뭐하는 거지? 이것은 우리가 전에, 대부분 본 적이 없는데 다른 비트 연산자입니다. 그것은 왼쪽 시프트 연산자입니다. 이 연산자는이 작업을 수행합니다. 다음은 숫자 1이 있으며, 당신이 할 경우 내가 이동, 왼쪽 시프트를 왼쪽으로 그 각각의 1 일의 효과가 그 어떤 것 같아? 그대로 이쪽으로 이동. 숫자 1은 왼쪽에 있습니다 무엇이며 당신은 31 전을 초기화하여 시작한다면 그게 무슨 짓 이예요? 그것은이 숫자 1을 가지고 여기에 그것을 31 곳을 이동하는거야. 그리고 뒤에 분명히 다른 자리가 없기 때문에, 이러한 기능은 기본적으로 0s로 대체됩니다. 그럼 당신은 물론이 모양 숫자 1,와 함께 시작합니다 - 이 날의 중심부에 여기로 그려 보자. 당신이 왼쪽에있는 물건을 이동으로 그리고,이 사람은 본질적으로 이런 식으로갑니다. 하지만 곧 당신이 그렇게하는 한, 0 인치 채워집니다 당신이 두 번째 시간을 이동하면이 길로 다른 0 인치 채워집니다 당신은 다시 이동 한 다음 다른 0 인치 채워집니다 당신이 1 << 내가 31 곳의 일을한다면 그래서 마스크를 치울 즉, 긴 1 중 왼쪽 한 32 자입니다 나머지 모든 0입니다. 그리고 이렇게 왼쪽으로 번호를 이동, 옆으로 밝혀 또한 우연히도 때로는 편리 그 번호 뭐하는 효과가있어? >> [학생]를 두 배로. 을 두 배로 때문에 열 각 - 1 초 장소, 거 고요 장소, 4S 장소 8s 장소, 16 장소 - 당신은 왼쪽로 이동 한 모든 복제를 에서요. 또는 오히려, 당신은 1 초를 이동 때 수의 값을 두 배로 결국거야. 당신은 숫자의 흥미로운 변환을하고 마무리 할 수 2의 거듭 제곱하여이 방식으로 모든여 이동하여. 그럼이 작동합니까? 이는 나에게 내가 원하는 정확하게 위치에 1을 제외한 모든 0s입니다 마스크를 제공합니다 toupper.c에서 도난 다음이 표현, 단순히 사용자가 입력하는 N 수를 말하는 있으며, "와"그게 마스크와 함께, 그리고 당신은 얻을 수 있습니까? 당신이 가면 위치에 1이 있으면 1을 가질 겁니다 또는이 아니라면 0을받을거야. 그리고이 모든 프로그램은 효과적으로은 루프가 있습니다 않습니다 그리고, 여기 1 다음, 여기에 다음 여기로 1 1 마스크를 만듭니다 그리고 여기에 사용자의 입력에 1 비트가 말을이 비트 및 트릭을 사용하여? 여기에 사용자의 입력에 1 비트가 있습니까? 그리고 경우 그대로 0을 인쇄 할 다른, 1 인쇄 할 수 있습니다. 우리가 대신 8 32 비트를하고있는 이유라고해서 우리는 ints로 이런 짓을하고있는거야 하지만, 우리가 도입 한 것은이 비트 AND,이 비트 OR입니다 자주 대단히 도움이되지 않습니다이 왼쪽 시프트 연산자, 그들이 할 수 밖에 있지만집니다. 사실, 경우에 당신은 논리 값의 배열 같은 것을 표현하기 위해했다 단지 true 또는 false 대표, 당신은 여부를 추적하고 싶어 가정 300 명 이상 학생의 전체 객실은 존재 당신이 300 bools을 수 있도록 당신이 BOOL 타입의 크기 300의 배열을 선언 할 수 누군가가 여기 거짓 달리하는 경우와 true로 각각 설정할 수 있습니다. 왜 그런 데이터 구조에서 해당 표현이 비효율적인가? 어떤 데이터 구조, 300 bools의 배열의 디자인에 대한 나쁜거야? 후드 아래에, 사실, BOOL 무엇입니까? 이 역시 익숙하지 않을 수 일입니다. 더 BOOL가 없습니다 아웃이 변합니다. 우리가 약간 만든 기억이 cs50.h 파일과, 하는 자체가 표준 BOOL이 포함되어 있습니다. 이 BOOL 할 때 C는하지만 가지 바보입니다. 그것은 모든 BOOL을 표현하기 위해 8 비트를 사용하는 완전히 낭비 is 분명, 당신은 BOOL을 표현하기 위해 얼마나 많은 비트가 필요 없기 때문에? 그냥 1. 그래서이 판명 당신은 이제 비트 연산자와 능력이있는 경우 심지어 단일 바이트로도 숯불에서 개별 비트를 조작하기 위해, 네가 바보 같은 짓을 대표하는 데 필요한 메모리를 줄일 수있는 아웃이 변 8 요소에 의한 출석 스타일의 데이터 구조처럼. 대신 true 또는 false를 표현하기 위해 8 비트를 사용하는, 당신은 문자 그대로 하나를 사용할 수 있습니다 클래스의 모든 8 명에 대해 단일 ​​바이트를 사용하여 그리고 낮은 수준의 트릭 이러한 종류의를 사용하여 0-1 개별 비트에서 전환. 정말 그 에너지를 막는. 비트 연산에 대한 질문이 있습니까? 그래. >> [학생]가 단독 또는 운영자입니까? 예. 과 같은 배타적 OR 연산자, ^, 당근 기호가 있습니다 어떤은 먼저 나 두 번째 것은 1로 출력 한 수를 의미합니다. 당신은뿐만 아니라 1로 또는 그 반대로 0을 반전 할 수 있습니다 ~은,이 또한 아닙니다. 그리고 우리가 본 사람의 맞은 편에 오른쪽 이동 연산자, >>도있다. 괜찮아요. 가 더 높은 레벨로 지금 일을 보자. 우리는 텍스트에 대해 얘기로 시작 다음 압축 와 비트 이하의 숫자가 포함 된 텍스트를 대표하는, 우리는 이제 비트 수준에서 물건을 조작 시작할 수있는 방법에 대해 조금 했어요. 자, 이제 표현으로 최대 10,000 피트 다시 확대 그래픽과 같은 더 복잡한 것들. 다음은 독일의 깃발을 가지고, 우리가 프랑스 중 하나를 수 있습니다. 예를 들어 GIF를 -이 귀하가 알고있을 파일 형식으로 표현 될 수 있습니다. 당신은 언제 까지나. GIF로 끝나는 웹에서 이미지를 발견 한 경우 이 그래픽 교환 형식입니다. 종류의 여기이 두 플래그는 압축에 자신을 빌려 주다 아마도 분명 무슨 이유에 대해? >> [안 들리게 학생 응답] 반복이 많이있는 거 잖아? 독일의 깃발을 보내려면, 화면에 이미지하다고이 생각 귀하의 스크래치 일 백업합니다. 당신은 이미지를 작성 개별 픽셀 도트가 있다는 기억 할 수 있습니다. 검은 점과 검은 점의 또 다른 전체 행의 전체 행이 있어요. 우리가 확대하는 경우 우리가 볼 수있는 검은 색 점의 행의 무리가 있어요 우리가 포토샵에서 롭의 얼굴에 확대 할 때 훨씬 좋아요. 우리는 깊이와 이미지에 깊이와 깊이 있고, 즉시로 그 경우에 자신의 눈을 구성된 사각형의 모든 pixelation를보고 시작했다. 저도 거래. 우리가 꽤 확대하면 개별 점을 볼 것입니다. 음,이 비트 폐기물의 종류입니다. 국기의 3 검은 색과 국기의 3 노란색 등등 경우는, 왜 우리는 어떻게 든이 플래그를 압축 수없는 이유는 무엇입니까? 패턴이 약간 다른 경우에도, 심지어 프랑스 국기가 압축 될 수 있습니다. 그것은 GIF 파일 형식은 무손실 압축 형식입니다 밝혀 이것은 당신이 여기에 독일 국기와 같은 이미지를 수 있다는 것을 의미합니다 당신은 품질을 희생없이 비트를 많이 던져 수 있습니다. 이것은 JPEG 파일과 같은 대조적입니다 우리 대부분은 아마 더 친숙되는. 페이스 북 사진과 플리커 사진과 같은 그들이 업로드 할 때 거의 항상 JPEG 파일로 저장됩니다, 손실 - - 당신이 비트를 버리지 않는된다 형식 만 JPEG 파일은 손실입니다 뿐만 아니라 품질을 버린다. 그리고 당신은 포토샵과 사진을 압축하거나 페이스 북에 업로드하는 경우 또는 정말 한심 휴대 전화에 데리고 당신은 그림이 매우 얼룩이있는과 pixelated 얻을 시작 알 이 컴퓨터 또는 휴대 전화로 압축되고 있기 때문에 그입니다 에 의해 그대로 거리 정보를 던지기. 그러나 GIF는 기본적으로 수도보다 적은 비트를 사용할 수 있다는 점에서 놀랍습니다 정보를 잃지 않고. 그리고 기본적으로 다음과 그렇게하지 ​​않습니다. 오히려 BMP와 같은 파일에 저장보다 검정, 검정, 검정, 검정을위한 RGB 트리플 겠어, 검정, 검정, 검정, 검정,, 검정 검정, 검정, 검정, 등등, 오히려, GIF 형식은 "블랙"을 말 것입니다 그리고, "이 100 배를 반복"또는 그런 일. "블랙이 100 배를 반복 검은 색이 100 배를 반복 ..." "노란색이 100 배를 반복합니다." 그리고 그것은 왼쪽 픽셀은, 기본적으로, 기억 그리고 어떻게 든 또 한번, 또 한번 그 픽셀을 반복의 개념을 인코딩합니다. 따라서 GIF를 한 다음 정보를 잃지 않고 자신을 압축 할 수 있습니다. 하지만 당신은 사용을 GIF를하는 알고리즘 인 경우 추측 할 수 밖에 없었던 경우, 그들은 크기가 동일 보이는 경우에도 이러한 플래그 중 어떤, GIF로 디스크에 저장할 때 작은 될 것입니다? >> [학생] 독일. 독일은 작아 질 것입니다? 이유는 무엇입니까? [학생] 당신이 그것을 반복하기 때문에 많은 시간이 가로 그리고 당신은 다른 시간을 반복합니다. 정확히 >>. GIF를 발명 명 만 가지가 임의로 결정하기 때문에 반복은 수평이 아닌 측면 활용할됩니다. 프랑스 국기에 비해 독일 국기의 측면 여기에 더 많은 반복이 있어요. 우리가 실제로 이러한 GIF를 가지고 내 하드 드라이브의 폴더를 엽니 다면하면, 당신은 실제로 여기에 독일의 플래그가 2킬로바이트하고 프랑스 하나가 4킬로바이트 것을 볼 수 있습니다. 그것은 한 두 번 다른 것을 우연의 일치로 발생 하지만 실제로 프랑스 국기가 훨씬 큰있는 경우입니다. 우리가 그래픽에 대해 얘기 중에도 불구하고, 동일한 아이디어에 적용 할 수있는 조금 더 복잡하지만, 깃발 이미지 등을 의미하지는 않습니다. 당신이 사과의 사진을 찍을 경우, 반드시 중복이 많이 거기에 있어요 그래서 어떻게 든 우리가 그 기본 배경이 파란색입니다 기억 그리고, 오른쪽 그림은 제안하지 않음으로 이 그림의 모든 단일 픽셀의 색상을 기억해야합니다. 그래서 우리는 정보를 잃지 않고이 거리에 비트를 던져 수 있습니다. 사과는 아직도 같은 보입니다. 여기이 예제에서는, 당신은 영화에서 어떻게 볼 수 있습니다. 이러한 구식 필름 릴 상기가 상단 이미지를 나타냅니다 당신은 집 과거 RV 운전과 나무가 있습니다. 그 밴이 왼쪽에서 오른쪽으로 지난 드라이브 그리고 어떤은 분명히 변화가없는거야? 그 집은 아무데도 안되고, 나무는 아무데도 안됩니다. 움직이고있는 유일한 방법은이 경우에 밴입니다. 변경되지 않은 배경이 제시 있도록, 당신은 영화에서 무엇을 할 수 유사은 프레임 사이에 변경되지 않는 정보를 버리지 있습니다. 이것은 일반적으로 프레임 간 압축으로 알려져 있습니다 상기이 프레임이 하나 거의 동일한 모양한다면, 우선은 디스크에 동일한 정보를 저장 귀찮게하지 이러한 중간 프레임에의 만 가끔 키 프레임을 사용하게 그거 사실 조금 정신이 확인 이중화대로 정보를 저장합니다. 대조적으로, 압축 동영상에 대한 또 다른 접근 방식은, 여기로 낮은 예에 오히려 매장보다 30 프레임, 왜 당신은 대신에 15 프레임 두 번째를 저장하지 않는 어디? 오히려 아름답게, 완벽하게 흐르는의 영화 종류보다, 그것이 조금, 조금 오래된 학교, 자고 있어요 것처럼 보일 수 있습니다 하지만 그물 효과는 달리 필요 것보다 훨씬 적은 비트를 사용하는 것입니다. 어디이 후 우린 어떻하지? 그 말은 당신이 압축 함께 갈 수있는 사람에 따로 약간했습니다. 그에 대한 자세한 내용을 보려면 여기를 CS175 같은 수업을. 여기 동영상에 또 다른 예입니다. 벌은 이동 유일한 경우, 당신은 정말 그 중간 프레임에 정보를 멀리 던질 수 꽃과 하늘과 잎은 변경되지 않기 때문에. 그러나의 지금 마지막 일을 생각해 보자. 다음 5 분 거리에 우리는 강의에서 영원히 뒤에 C를 떠나? 예. 하지 psets에,하지만. 마지막 C에 대한 이야기​​, 그리고 나서 우리는 매우 섹시 걸까지 HTML과 웹과 우 ~ 후를 포함. 괜찮아요. 여기 우리는 간다. 그 동기 부여입니다. 우리가 우리가 꽝를 실행 프로그램을 작성하는 한 모든 시간을줍니다. And 꽝 우리가 꽤 많이 첫 주부터 말했듯이, 소스 코드를 소요 와 객체 코드에 변환합니다. 그것은 C를 탔고, 0s과 1 초에 변환합니다. 그렇게 같은 매우 간단한 게 아냐 때문에 가지 몇 주 동안 당신에게 거짓말을 했어요. 당신이 꽝 같은 프로그램을 실행할 때 후드 아래에 무슨 더 많이 있어요. 실제로, 프로그램을 컴파일하는 과정이 정말 요약 할 수 당신은 컴파일러에 롭의 동영상에서 헤비급으로, 이 4 단계로 : 사전 처리, 그 자체를 컴파일 조립 및 연결. 그러나 클래스의 우리 세계에서 대부분의 사람들은 일반적으로 이러한 단계를 모두 요약 같은 단지 "컴파일." 그러나 우리가이 같은 소스 코드로 시작하는 경우이 아마도 가장 간단한 C 프로그램입니다 기억 우리는 컴파일 때까지 같이보고 끝나는 것이 기억, 지금까지 기록했습니다. 하지만, 중간 단계는 실제로, 그리고 그 단계는 다음과 같습니다. 먼저이 일이 우리의 프로그램의 가장 상단에가 # 을 포함 # 우리를 위해 무엇을 포함합니까? 내 파일에 꽤 많이 복사하여 페이스트 stdio.h의 내용 있도록 왜? 왜 stdio.h의 내용에 대해 신경을 쓰는거야? 관심 거기에 무엇입니까? 컴파일러가 나서 무슨 뜻인지 알고 있도록 Printf의 선언, 그 프로토 타입, 나는 printf이 기능을 언급 할 때. 따라서이 컴파일에서 1 단계를 사전 처리, 상기 꽝 같은 프로그램을 또는 꽝이 함께 제공하는 일부 도우미 프로그램은 하단에 코드 톱을 읽고 왼쪽에서 오른쪽으로,하고 # 기호를 볼 수있는 시간은, 포함과 같은 키워드로 다음 는 복사하여 파일에이 경우 st​​dio.h에 붙여, 그 작업을 수행합니다. 그 단계 1. 그럼 당신은 때문에 큰 복사, 무슨 일이 일어 붙여 넣기 작업의 더 큰 C 파일이 있습니다. 단계 2 이제 컴파일합니다. 그러나 컴파일이 모양 소스 코드를 소요 밝혀 그리고,이 모양 무언가를 변 어떤이 익숙한 위해 호출됩니다? >> [학생] 조립. >> 어셈블리 언어입니다. 이와 같은 사실은 실제로 당신이 더 자세히으로 잠수 할것은 CS61를 받아들이면 일입니다. 이 메시지는 0s와 1S 자신을 쓰기로 이동할 수 있습니다 최대한 가까운 거리에 하지만 여전히 이해의 적어도 약간 만드는 방식으로 일을 쓰고 싶어요. 이 기계 지침 있으며, 우리는 여기에 main () 함수로 스크롤하면 이 푸시 교육이 있다는 것을,지도를 이동 명령을 뺍, 지도를 전화, 등등. 당신의 컴퓨터가 인텔 내부를 가지고 들으면, 귀하의 Mac 또는 PC에서 인텔 CPU를 가지고 그게 무슨 뜻 이죠? CPU는 인텔이 특정 지시 사항을 이해 같은 회사에 의해 건설되어 있습니다. 그들은 더 스왑과 같은 기능이 무엇인지 아이디어 나 주요 아르 이라기보다는이 없습니다 하지만, 같은 매우 낮은 수준의 지침을 추가 알고 뺄셈, 푸쉬 이동 전화, 등등입니다. 따라서 어셈블리 언어로 C 코드를 컴파일 할 때, 당신의 매우 사용자 친화적 인 수준의 코드는,이 같아 보이는 거로 변환 그 말 그대로와 CPU의에서 이러한 작은 단위로 주변 바이트 또는 4 바이트 이동합니다. 그러나 최종적으로 언제 꽝이 프로그램의 표현을 할 준비가되어 0s와 1 초 후 조립이라는 단계가 어떻게에, 꽝을 실행할 때이 모든 걸 다시 눈 깜짝 할 사이에 발생합니다. 우리가 시작되면이 같은 파일을 출력하고, 그이 0s와 1 초에 변환합니다. 그리고 당신은 어디 선가 다시 가서 실제로 행동이를보고 싶다면, - 난에 hello1.c--이 우리가 바라 보았다 최초의 프로그램 중 하나입니다 간다면 일반적으로 우리는 꽝을 hello1.c와 함께 컴파일 것이 우리에게 a.out을 제공합니다. 대신 그에게-S 플래그를 제공 대조적으로하는 경우, 당신이 얻을 거라고 hello1.s입니다 당신은 실제로 어셈블리 언어를 볼 수 있습니다. 난 아주 짧은 프로그램이 일을하지만 당신은 스크램블에 돌아 가면 또는 복구하거나 작성한 모든 프로그램과 그냥 궁금해서 묻는 건데 실제로 CPU에 공급되는 일을, 같은 실제로 어떻게 생겼는지보고 싶어 당신은 꽝 랑-S 플래그를 사용할 수 있습니다. 하지만 마지막 하나 잡았다이 있단 말야. 여기 안녕, 세계의 제 구현을 나타내는 0s와 1 초입니다. 하지만 내 프로그램에 다른 사람의 기능을 사용했습니다. 따라서 프로세스가있다 할지라도, hello.c 가져 그것은 어셈블리 코드로 컴파일됩니다, 다음은 0s와 1 초에 조립됩니다 시간이 시점에서 출력됩니다 0s으로 만 사용되며 1 초 사람 내 코드에서 해당 결과입니다. 그러나 printf 쓴 사람은, 20 년 전에 자신의 코드를 컴파일 그리고 지금은, 어플라이언스에 어딘가에 설치되어 그래서 우리는 어떻게 든 제 0s와 1S와 함께 자신의 0s와 1 초를 병합해야합니다 그리고 그 연결로 알려진 컴파일의 4와 마지막 단계, 우리를 제공합니다. 따라서 왼쪽에 우리는 이전과 동일한 사진이 : hello.c 어셈블리 코드가 0s와 1S된다된다. 하지만 내 코드에서 표준 I / O 라이브러리를 사용하는 기억 그리고 그 stdio.c라는 파일이이 곳 컴퓨터의 의미 적어도 컴파일 된 버전은 그 때문에 몇 년 전에 사람 어셈블리 코드로 stdio.c 컴파일 한 후 0s와 1S의 전체 무리. 이 정적 또는 동적 라이브러리로 알려진 곳입니다. 이 어플라이언스에 어딘가에 앉아 일부 파일입니다. 그러나 마지막으로, 난 내 0s와 1 초를해야하고 그 사람의 0s와 1 초 그리고 어떻게 된 일인지를 함께 링크는 그대로 결합 그 0s와 1 초 a.out이나 hello1이든 뭐든간에라는 하나의 파일로 내 프로그램을 호출 최종 결과는 1 초와 프로그램을 작성해야합니다 0s의 모든이 있도록. 당신은 꽝을 사용하는 동안 내내 이번 학기 자 심지어 최근, 꽝를 실행하기 위해 만들어 실행 다음 단계에 모든 즉시의 정렬이 일어나고 있지만 아주 신중하게되었습니다. 그리고 당신은, 즉 CS61, 컴퓨터 과학에서 계속하는 경우 여러분이 껍질 거기에서 계속하겠다고 레이어입니다 효율성, 보안 관련,이 낮은 수준의 세부 정보와 같은 얘기를. 하지만 그와 함께, 우리는 뒤에 C를 남겨하려합니다. 가 가서 지금 우리의 5 분 쉬었다합시다, 그리고 우리가 돌​​아 왔을 때 : 인터넷. 괜찮아요. 우리가 다시 있습니다. 당신이 볼 수로, 때문에 이제 우리는, HTML에서뿐만 아니라 우리의 모습을 시작 HTML 자체는 실제로 매우 간단합니다 하지만 정말 웹 프로그래밍에서 더 많은 일반적으로 더 일반적으로 네트워킹, 그리고 이러한 기술의 함께 방법을 올 우리가 인터넷을 위에 훨씬 더 복잡한 프로그램을 만들 수 있도록 허용하는 지금까지보다 우리는이 검은 색과 흰색 창문을 수있었습니다. 사실, 학기의이 시점에서 우리는 상대적으로 적은 시간을 보낼 않더라도 PHP, HTML, CSS, 자바 스크립트, SQL 등의, 대부분의 학생들은 웹 기반으로 최종 프로젝트를하는 말을 할 당신이 보게 될 배경은 지금 C에 있기 때문에 이러한 높은 수준의 언어에 적용 많이 있습니다. 그리고 당신은 귀하의 최종 프로젝트에 대해 생각을 시작으로 하는 많은 문제 세트 공처럼, 당신이 격려 곳 스크래치에 관심 대부분 아무 것도 할, 최종 프로젝트는 C로 새로이 지식과​​ 이해가를 귀하의 기회입니다 나 PHP 나 자바 스크립트 나이 질주가 좋아 보고 할 수있는 세계에 대한 소프트웨어의 자신의 조각을 만들 수 있습니다. 그리고 아이디어와 씨앗을하려면 여기 향 수 projects.cs50.net 알아. 매년, 우리는 캠퍼스에서 교수와 직원의 아이디어와 학생 그룹을 요청 단, 컴퓨터를 사용하여 해결할 수있는 재미있는 일들에 대한 자신의 아이디어를 제출하는 , 웹 사이트를 사용하여 소프트웨어를 사용하여. 당신은 자신의 생각을 마련하는데 어려움을 겪고다면 모든 수단 올해 마지막에서이 아이디어를 스크롤하여. 그것은 전에 달려 된 프로젝트를 해결하기 위해 완벽하게 괜찮습니다. 우리는 캠퍼스에 세탁의 상태를 보는 많은 앱을 본 식당 메뉴를 탐색하기위한 다양한 애플리케이션, 코스 카탈로그와 같은 탐색 많은 응용 프로그램이 많이 있습니다. 그리고 실제로, 미래 강의와 미래 세미나에서, 우리는 상업적으로 이용 가능한 모두, 일부 공개적으로 사용 가능한 API를 소개합니다 당신은 데이터에 액세스 할 수 있습니다뿐만 아니라 여기로 사용할 수 캠퍼스에 CS50에서 있도록 다음으로 재미있는 일을 할 수있다. 우리는 사양을 공개 할 때 몇 일 최종 프로젝트에 따라서 더 하지만 지금, 당신은 하나 또는 두 개의 친구들과 각자 일이나 할 수 있다는 사실을 알고 당신에게 관심이 대부분의 모든 프로젝트에. 인터넷. 당신이 가서 노트북을 꺼내, 당신은 처음으로 facebook.com로 이동 최근에 로그인하고 Enter 키를 누르 아니었다. 정확히 무슨 일이? 단계를 귀하의 컴퓨터에서 입력을 누르면 전체 무리 마술 일어나는 일종의을 시작합니다. 그래서 페이스 북과 같은 왼쪽, 웹 서버에 여기 당신이 오른쪽에 여기에 그리고 어떻게 든 당신은 HTTP, 하이퍼 텍스트 전송 프로토콜이라는 언어를 사용하고 있습니다. HTTP는 프로그래밍 언어가 아닙니다. 이 프로토콜의 이상입니다. 이 intercommunicating 때 웹 브라우저와 웹 서버가 사용하는 규칙의 집합입니다. 그리고이게 뭘 뜻은 다음과 같습니다. 대부분 현실 세계에서 마음에, 우리는 이러한 규칙을 가지고 어디 여기 날 놀리는 상관 없어 경우, 처음 몇 사람을 충족하는 경우, 내가 당신에게 와서,라고 말할 수 있습니다 "안녕, 내 이름은 데이빗입니다." >> 안녕, 데이빗. 내 이름은 새미입니다. "안녕, 데이빗. 내 이름은 새미입니다." 이제 우리는 바보 인간 프로토콜의 종류에 종사 한 나는 프로토콜을 시작 한 곳, 새미, 대응하고 있습니다 우리는이 도시 및 거래 완료됩니다. HTTP는 정신에 매우 유사합니다. 귀하의 웹 브라우저 요청 www.facebook.com 때, 당신의 브라우저가 정말하고 것은, 말하자면, 그 손을 내밀며 is 서버에하고 그에게 메시지를 보내는 군. 당신이 얻을 무슨 일을하려는 거죠 - 그리고 그 메시지는 일반적으로 질과 같은입니까? - 나 일반적으로 URL의 끝에 하나의 슬래시로 표시되는 홈 페이지, 얻을. 그리고 그냥 내가 말하는 어떤 언어 알아, 브라우저는 당신에게 갈거야 나는, HTTP 버전 1.1을 말하는 것으로 또한 좋은 측정을 위해, 내가 말해 줄게 그게 내가의 홈 페이지를하고자하는 호스트 facebook.com입니다. 일반적으로, 당신 미지의 웹 브라우저, 인간, 당신은 단순히 www.facebook.com을 입력 할 때 인터넷을 통해이 메시지를 보냅니다 브라우저에 입력하십시오. 그리고 페이스 북은과 반응합니까? 그것은 유사한 수준의 암호화 된 내용뿐만 아니라 훨씬 더로 응답합니다. 내가 여기서 페이스 북의 홈 페이지로 가서 보자. 이것은 당신이 시간의 모든 로그인 유지하면 우리 대부분은 아마 볼 수 없을되는 화면입니다 하지만이 실제로 자신의 홈 페이지입니다. 우리가 크롬에서이 작업을 수행하는 경우, 당신은이 작은 컨텍스트 메뉴를 당겨 수 있다는 것을. 크롬을 사용하여, 맥 OS, 윈도우, 리눅스, 또는 같은의 여부, 을 클릭하거나 왼쪽 버튼을 클릭을 제어하는​​ 경우, 당신은 일반적으로과 같은 메뉴를 조회 할 수 몇 가지 옵션이 기다리고있는 곳의 하나는 페이지 소스보기입니다. 당신은 또한 일반적으로보기 메뉴로 이동하고 주변의 농담으로 이런 일까지 할 수 있습니다. 예를 들어, 여기보기에 따라, 개발자들이 똑같다. 나는 가서보기 페이지 소스를보고거야. 당신이 볼은 마크 facebook.com을 표현하기 위해 작성했습니다하는 HTML입니다. 여기 완전 엉망이지만, 우리는 머지 않아이 조금 더 의미가 있다고 볼 수 있습니다. 하지만 여기 몇 가지 패턴이 있습니다. 내가 이런 짓까지 아래로 스크롤 보자. 인간이 직각 브래킷이 패턴을 읽고,하지만이 있다는 것을하기 위해이 어렵습니다 옵션 값이 같은 키워드, 일​​부 인용 문자열과 같은 키워드를. 이 곳, 당신의 출생 연도가 뭔지 지정한 처음으로, 가입시. 출생 년의 드롭 다운 메뉴가 어떻게 든 여기에 인코딩 HTML, 하이퍼 텍스트 마크 업 언어라는이 언어 인치 즉, 브라우저가 웹 페이지를 요청할 때, 는 HTTP 호출이 대회를 말한다. 그러나 facebook.com이와 함께 그 요청에 어떻게 대응합니까? 우리가 순간에 보게 될이 이러한 암호화 된 메시지의 일부로 응답합니다. 그러나 응답의 대부분은 HTML, 하이퍼 텍스트 마크 업 언어의 형태에 있습니다. 그건 웹 페이지가 작성되는 실제 언어입니다. 그리고 웹 브라우저 정말 다음과 같은 것을받는 즉시, 무엇입니까 는 왼쪽에서 오른쪽으로, 위에서 아래로 읽고, 모든 시간은이 직각 브래킷 하나를보고 옵션 같은 키워드에 이어, 그것은 적절한 방식으로 마크 업 언어를 표시합니다. 이 경우, 그것은 년의 드롭 다운 메뉴를 표시합니다. 다시 한 번,이 볼 수있는 완벽한 엉망입니다. 페이스 북 개발자가 예를 들어, 스타일 5 0 되는거야 때문이 아닙니다. 사람들이 작성하는 코드의 대부분이 있기 때문에 이것은 사실 아름답게 작성 , 음, 주석 잘 들여 쓰기, 그리고 같은 물론 기계, 컴퓨터로, 브라우저는 정말 믿을 수 없어 코드가 잘 스타일을 결정합니다. 그리고 사실,이 탭 키에게 모든 시간을 칠 완전히 낭비입니다 귀하의 코드를 통해 모든 댓글을 넣어하고 정말 설명 변수 이름을 선택 브라우저가 상관하지 않는다 경우 때문에, 당신이 하루의 끝에하고있는 모든 바이트를 낭비하고 있습니다. 그래서 비록 facebook.com에 대한 코드 소스, 무엇 대부분의 웹 사이트가 것은 밝혀 인터넷에서 cs50.net 이러한 다른 웹 사이트의 모든 일반적으로 잘 작성하고 잘 댓글을 달았습니다 그리고 멋지게 들여 쓰기와 같은 한 것은, 웹 사이트가 인터넷에 들어가게된다 일반적으로 전에 코드 minified되고, 상기 HTML과 CSS - 우리가 곧 만날 거 다른 - 우리가 곧 만날 자바 스크립트 코드는 압축되고, 긴 변수 이름은가된다 X와 Y 및 Z, 그리고 모든 게 읽을 보게하는 그 공백을 모두 모두 멀리 던져 수 있습니다 - 당신이 이런 식으로 생각한다면, 페이스 북은 억 페이지가 일을 눌렀을 때 친구는 이런 미친 짓 - 그래서 프로그래머는 단지 항문이어야하는 경우 단지 아무리 더 많은 코드의 일부 라인을 들여 쓰기 위해 스페이스 바를 엑스트라 시간을 쳤어? 페이스 북 보존하면 의미이 그 공백 바이트의 모든 사람들은 인터넷에있는 사람들에게 다시 보내? 스페이스 바를 다니는 한 번에 귀하의 파일에 추가 바이트를 제공합니다. 그리고 만약 억 사람들은 다음, 그 날 홈 페이지를 다운로드 진행 당신은 인터넷을 통해 얼마나 더 많은 데이터를 전송습니까? 아무런 이유 기가 바이트. 그리고 부여, 웹 사이트의 많은이이 같은 확장 성 문제가되지 않습니다 하지만 페이스 북을위한, 구글, 가장 인기있는 웹 사이트의 일부 큰 동기 코드가 엉망처럼 보이려고 재정적가 당신은 그것을 압축뿐만 아니라 가능한 몇 바이트로 사용되도록 우편 번호 같은 것을 사용하여 알고리즘은, gzip으로 불리는 브라우저가 자동으로 않는. 그러나이 끔찍한입니다. 우리는 다른 사람의 웹 사이트에 대해 아무것도 배울 수 없을거야 및 웹 페이지를 디자인 할 수있는 방법을 우리는이처럼 보는 경우. 그럼 다행스럽게도, 크롬, IE와 파이어 폭스와 같은 브라우저 요즘 일반적으로 내장 개발자 도구를 갖추고 있습니다. 난 요소 또는 경우를 검사하려면 여기를 내려 갔는데 사실은, 난, 개발자보기로 이동 그리고 명시 적으로 개발자 도구로 이동 내 화면의 맨 아래에있는 창이 팝업. 익숙하지 않은 탭이별로이 때문에 처음에는 조금 협박이지 하지만 하단 왼쪽에 요소에있는 모든 방법을 클릭하면 크롬은 분명 예쁘고, 똑똑하고 있습니다. 그것은이 모든 코드를 해석하는 방법을 알고 있습니다. 그리고 크롬은 무엇을은 페이스 북의 HTML을 모두 정리합니다. 공백이 존재하지에도 불구하고, 들여 쓰기는 거기에 없어 지금은 모두 더 계층이 웹 페이지를 탐색 할 수 있음을 확인합니다. 그것은 HTML5라는 언어로 작성된 모든 웹 페이지가이로 시작해야 판명 이 DOCTYPE 선언은, 말하자면 방법 : , 그것은 빛과 회색이 같은거야,하지만이 파일의 코드의 가장 첫 번째 줄입니다 그리고는 "야, 여기 HTML5를 제공합니다. 다음은 웹 페이지를 제공합니다."브라우저를 알려줍니다 이후 첫 번째 오픈 브래킷이이 일을, 오픈 브래킷 HTML 태그로 발생 나는 깊은에 다이빙하는 경우 다음 -이 화살표는 아무런 의미이다; 그냥 프리젠 테이션의 위해, 그들은 파일에 실제로 없습니다 있습니다 - 페이스 북의 HTML 태그의 내부에, 오픈 브래킷으로 시작 아무것도 발견 다음 단어는 태그를 호출했다. 따라서 HTML 태그 안에 머리 태그와 BODY 태그 무리가 있습니다. 머리 태그의 내부는 이제 페이스 북의 전체 엉망 그들은 마케팅 및 광고에 대한 메타 데이터 및 다른 많은 것들이 때문입니다. 우리가 아래로 스크롤하면, 아래, 아래, 아래, 그게 어디 보자. 여기 있습니다. 이 사람은 적어도 어느정도는 잘 알고 있습니다. 페이스 북의 홈 페이지의 제목, 당신은 당신의 제목 표시 줄에있는 탭에서 살펴보면, 페이스 북에 오신 것을 환영합니다 수 있습니다 - 가입 또는 자세히 알아보기에 로그인합니다. 그게 당신이 크롬의 제목 표시 줄에 표시했을 일 그리고 그것이 코드로 표현하는 방식입니다. 우리가 머리에서 다른 건 다를 무시하면, 웹 페이지의 내장의 대부분은 몸에 그리고 페이스 북의 코드가 더 복잡한 꼴 것이 밝혀 대부분의 물건보다 우리가 몇 년 동안 구축 된해서 처음에 글을 쓸거야 하지만 스크립트 태그의 많은 자바 스크립트 코드는이 그 웹 사이트는 매우 인터랙티브합니다 : 즉시 자바 스크립트와 같은 언어를 사용하여 상태 업데이트를보고. 페이지의 사업부 인 사업부라는 게있어. 그러나 우리가 그 세부에 도착하기 전에 축소 해 두자 그리고 말하자면, 페이스 북 1.0 간단한 버전의 봐. 다음은 웹 페이지의 인사, 세계입니다. 그것은 상단에 해당 DOCTYPE 선언이 이는 다른 모든에서 조금 다릅니다. 우리가 웹 페이지에 쓸 수있는 게 <로 시작 할 수는 없어! 그 줄 제외 그리고 HTML의 의견이라는 것을 제외한. 그러나 대부분의 경우 웹 페이지의 모든 오픈 브래킷, 키워드, 가까이 브래킷입니다. 이 경우에는 가능한 웹 페이지의 간단한을 볼 수 있습니다. , HTML 태그는 헤드 태그가 포함되어 있으며 body 태그가 포함되어 있습니다 하지만 태그를 시작하고 정지의 개념이 사실을 알아야한다. 이 HTML의 시작 태그이며,이 근처 태그 나 종료 태그입니다. 그들은 의미에서 opposites의 일종임을주의 그 가까이에 태그 나 종료 태그 이 앞으로 자체의 내부 슬래시 있습니다. 한편, 여기에 오픈 헤드 태그와 여기에 가까운 머리 태그가 있습니다. 개방 제목과 가까운 제목 태그가 있어요. 나는 순전히 임의의 한 줄에 제목을 넣어 한 사실. 이 한 줄에 잘 적응처럼 단지 보았다, 그래서 제가 몇 번을 입력 때리는 신경 쓰지 않았다. 한편, 내가 한 몸은 언제나 명확하게하기 위해 들여 쓰기. HTML 꽤 바보 언어 것을 확인할 수 있습니다. 사실, 예전에 WYSIWYG 편집기가 존재하기 전 그리고 당신이 말할 수있는 Microsoft Word의 "이 굵게 만들기는이 기울임 꼴을" 당신은 실제로 20 + 년 전 에세이에 약간의 명령을 입력합니다 무슨 말을 상기, "이 텍스트는 굵게 만들기 시작합니다.이 텍스트는 굵게 만드는 마." "이 텍스트 기울임 꼴을 시작합니다.이 텍스트 기울임 꼴을 중지합니다." 그래서 HTML 또는 마크 업 언어가 무엇인지입니다. 첫 번째 태그는 "야, 브라우저가. 다음은 몇 가지 HTML을 제공합니다."라고 다음 태그는 "야, 브라우저가. 다음은 머리, 내 웹 페이지의 헤더를 제공합니다."라고 "야, 브라우저. 다음은 제목을 제공합니다." 그리고 여기에, "헤이, 브라우저. 그게 제목입니다." 그래서이 세상 브라우저가 인사보다 더 문자를 표시하지에 더 이상 알고 방법입니다 제목 표시 줄 인치 한편,이는 "그게 머리입니다." 이 "이 몸을 제공 여기에 실제 몸입니다."라고 -여보세요, 세계, 문자 그대로 단어입니다. 그리고이 여기라고, "그 몸을 위해 있습니다. HTML을 위해 야." 따라서 브라우저는 상당히 바보입니다. 그들은 그냥 왼쪽에서 오른쪽으로 위에서 아래로이 물건을 읽고 정확히 그들이해야 할 어떤 말을해야. 실제로 여기에 약간의 예를 수행하자. 나 텍스트 편집기 즉, 내 Mac에서 프로그램의 간단한을 열어 보자. Windows에서는 Notepad.exe를 사용할 수 있습니다. 그러나 여러분이 웹 페이지를 만들기 시작하는 데 필요한 모든 것입니다. 나는 가서 그냥이 파일에이 코드를 복사하여 붙여 넣기거야. 나는 가서 내 바탕 화면에 저장거야 그리고 난 hello.html로 저장거야 지금 파일이 hello.html의 이름입니다. 여기가 바탕 화면에 있습니다. 내가 지금 브라우저에 가서 브라우저에 파일을 드래그 보자. 그리고 여기에도 여기 내 첫 웹 페이지입니다. 탭의 제목이 인사입니다주의, 제목 태그에 따라 세계, 안녕하세요, 세상은 내 웹 페이지의 본문입니다 통지, 와 우 ~ 후, 내가 인터넷에입니다. 이 파일이 인터넷에이 아니기 때문에 난 정말, 오른쪽 아니야. 내 로컬 하드 드라이브 특정 경로에에 있어야 발생합니다. 그러나 아이디어는 동일합니다. 우리에게 필요한 것은 어떤에 업로드 할 수있는 웹 서버입니다. 그러나 먼저가 실제로 좀 더 복잡하고 좀 더 어떤 양식에 일치시키는 것을 소개하겠습니다. 이 간단한 경우 지겨운, 웹 페이지입니다. 우리가 사용할 수있는 태그의 다른 종류가 아웃이 변합니다. 예를 들어, 여기 노란색으로 나는 2 개의 새 태그를 도입했습니다. 우리는이 오늘 많이 연주하지만, 사실을 알 수 없습니다 해당 링크의 태그 다른 모든 것들도 달라 보여요. 링크 태그, 속성이라는 것을 걸립니다 그리고 속성은 태그의 동작을 수정 일입니다. 이 경우이 이름, 링크의 최선의 선택이 아닙니다 때문에 그건 어떤 의미의 하지만이 링크 태그 내 웹 페이지의 내부 styles.css라는 파일을 포함, 기본적으로 말한다. 당신은 C가 # 지시어를 포함하도록이 같은 유사 생각할 수 있습니다. Styles.css 우리가 오늘 재생되지 않습니다 모두 다른 언어를 참조합니다 하지만 미학을위한 : 글꼴 크기, 색상, 패딩, 들여 쓰기, 여백, 과 미학 세부 그런 종류의 모든. 한편, 스크립트 태그는 기능적으로 유사합니다 오히려 포함 CSS, 그 언어보다, 다른 언어, 자바 스크립트를 포함하고 있습니다. 그래서 다른 말로,이 두 태그로 결국 내 자신의 웹 페이지를 작성 할 수 있습니다 뿐만 아니라 I 또는 다른 사람이 작성했다는 코드에 끌어 우리가 다른 사람의 어깨에 서 할 수있는, 우리는, 좋은 디자인을 연습 할 수 있습니다 공통 코드에서 고려해 보면. 제가 10 개 웹 페이지를 가지고 있다면, 이것은 내 미학의 일부 많은 # 별도의 파일에 포함 같이 고려 아웃 할 수 있습니다. 그래서 우리는 거기에 있어요. 그러나가 사실은 처음 파일을 사용하여 더 재미있는 일을 보자. 다시 말하지만, 이건 그냥 텍스트 편집기입니다. 아직 인터넷에서 기술적 아니지만, 우리는 갈 수 있습니다. 나는보다 안녕하세요, 세상을 조금 이나마 대담하고 싶습니다. 그럼 안녕,가 임의로 굵게으로 말을하게 해줘. 다시 말하지만, 그 이야기는 동일합니다 : 안녕, 쉼표,이 굵게 만드는 시작 그리고 세계는 굵은 글씨로 인쇄하고,이 굵은 글씨로이 인쇄 중단을 의미합니다됩니다. 내가 가서 내 파일을 저장, 크롬으로 돌아 가자, 내가 너무 우리가 더 잘 볼 수 확대됩니다 재충전을, 그리고 그 세계가 굵은 글씨로 지금 볼 수 있습니다. 웹은 모든 하이퍼 링크에 관한 있으니, 가서이 일을하게 놔두지 : 내 즐겨 찾는 웹 사이트는, youtube.com, 보자. 새로 고침, 저장합니다. 좋아요. 이제 웹 사이트의보기 만해도 무서움 외에 몇 가지 문제가 있습니다. 1, 내가 여기 입력를 누르 확신합니다. 그리고 내가 그랬어. 내 말은, 우리가 스타일에 대해 설교 한 것을 연습, 나 또한 들여 쓰기, Enter 키를 누르뿐만 아니라 하지만 세계 바로 옆에 위치해 있습니다. 왜인가요? 브라우저는 당신이해야 할 말하는 일을 해요. 나는 "여기에 브레이크 라인. 삽입 단락 여기겠다."브라우저를 말하지 않았 제가 돌아 가기 30 번 친다면 브라우저 그래서, 그것은 문제가되지 않습니다 아직도 세계에 내 권리를 줄거야. 내가 여기서해야 할 일은,
것을 이렇게 말할 줄 바꿈을 삽입합니다. 그리고 실제로 줄 바꿈은 이상한 일 거라고 당신이 정말로 다른 라인으로 이동 시작할 수 있기 때문에 다음 일을 다음 새 행으로 이동 중지합니다. 이 원자 작업의 종류입니다. 당신도 할하거나하지 않습니다. 당신은 입력을 누르거나하지 않습니다. 따라서 BR는 다른 태그의 조금이고, 그래서 모두 오픈 정렬을 종료해야합니다 모두 한 번에. 에 대한 구문이 있습니다. 기술적으로, 당신은 HTML의 일부 버전에서이 같은 일을 할 수 무언가를 시작하고 중지 할 이유가 없기 때문에 이건 그냥 바보 같은 짓이에요 대신 한 번에 모든 걸 할 수 있습니다. 그 HTML5는 엄격하게,이 슬래시가 필요하지 않습니다 실현 그래서 당신은 그것을가없는 교과서와 온라인 리소스를 볼 수 있습니다 하지만 좋은 측정의 우리가 지금까지 본 적이있는 대칭을 연습하게. 이 태그는 모두 열리고 닫혀 있다는 것을 의미합니다. 그래서 지금 내가 여기서 돌아 가면, 내 파일을 저장하세요. 그래, 그래서 내가 알고있는 웹을 제외하고, 더 나아 보이게하기 시작하면 어떤 클릭입니다 아직 여기에서 YouTube 아무것도 될하지 않습니다. 이 링크 모양에도 불구하기 때문입니다 즉, 브라우저는 그 당 SE를 알고하지 않습니다 그래서이 링크입니다하는 브라우저에게 얘기를 해. 이 작업을 수행하는 방법은 앵커 태그를 사용하는 것입니다 : <링크를 말하는 오래된 학교 방법입니다 하이퍼 참조에 대한 HREF, = "http://www.youtube.com"> 그리고, 좀 더 읽기 나 때문 그냥 새 줄이 이동하게 그리고 글꼴 크기를 축소합니다. 아직 안 끝났 건가요? 번호이 이분법이있을거야. 이 태그, 앵커 태그는 사실은, 속성을 걸리나요 어떤은 동작을 수정하고 해당 속성의 값은 분명 유튜브의 URL입니다. 그러나 이분법를 발견, 그 당신이에 갈 URL의해서이다 그 말은 당신이 밑줄과 링크를하고 있다는 단어로 보유하고 있다는 것을 의미하지 않습니다. 오히려,이 정도가 될 수 있습니다. 그래서이 단어 닫기 앵커 태그를 사용하여 하이퍼 링크 중단 말을해야합니다. 내가이 일을 안납니다. 1,이 분은 모든 사람들의 시간을 낭비하고 필요는 없어요. 태그를 닫으려면, 당신은 다시 태그의 이름을 언급. 당신은 속성 중 하나를 언급하지 않습니다. 자, 뒤로 가면의 저장 보자. 그래, 좋아, 지금은 파란색 하이퍼 링크입니다. 제가 클릭하면, 사실은 YouTube에 갈 수 있죠. 내 웹 페이지가 인터넷에서하지 않은 경우에도 마찬가지입니다 그래서, 최소한 HTML입니다 우리가 인터넷을 잡을 알려면, 우리는 실제로 youtube.com에서 여기에 종료됩니다. 그리고 돌아갈 수 여기 내 웹 페이지입니다. 하지만이를 확인합니다. 지금까지 스팸 또는 피싱 (Phishing) 공격을 멈추는 경우는, 지금 당신은 동일한 기능을 수행하는 단 5 분 후에 수 있습니다. 우리는 www.badguy.com 같은 여기에 가서 할 수있는 뭐든간에 스케치 웹 사이트이며, 다음은 페이팔 계정을 확인 말할 수있다. [웃음] 그리고 지금이게 내가 클릭 않을거야 badguy.com로 이동 것입니다 그런 일이 리드 아무 생각이 없기 때문입니다. [웃음] 하지만 지금은 실제로 거기에 종료 할 수 있습니다. 그래서 우리는 단지 표면 만 발굴하기 시작하고 있습니다. 우리는 SE에 따라 프로그래밍하지, 우리는 마크 업 언어를 작성하고 있습니다. 하지만 곧 우리는 HTML에서 우리의 어휘를 반올림으로 우리는 PHP, 실제 프로그래밍 언어를 소개합니다 즉, 자동으로 CSS를 생성, 우리는 자동으로 HTML을 생성 할 수 있습니다 그래서 우리 말, 구현 수요일에 시작 할 수하면, 우리 자신의 검색 엔진 및 기타. 며칠은 그 말에하지만 더. 우리는 당신에게 다음을 볼 수 있습니다. [CS50.TV]