DAVID MALAN: Pekala.
Yani bu CS50, ve bu Şimdi haftanın üç başlangıç.
>> Şimdiye kadar, biz ettik kadar Yani C programları yazıyor
bu biraz bakmak Burada böyle bir şey.
Yani biz bir çift olan var Keskin üstünde bulunuyor.
Biz geçersiz, int main var, ve var sonra bir şey ortada yapmak,
içinde kod bazı biraz Bu işlevin.
Fakat anahtar gerçeği olmuştur Burada geçersiz söyleyerek oldum.
Yani geçersiz, bu kez tüm belirtir Bu program çalıştırılacak ki,
Sadece adını aracılığıyla çalıştırılabilir.
Başka kelime yazamaz ya da Programın adı ne zaman sonra sayılar
çalışan.
Bu nedenle, örneğin, bir program, eğer merhaba denilen bir dosyaya derlenmiş,
Eğer ./hello yapabileceğini, ama o kadar.
>> Tek yolu olabilir Bu programa girdi sağlamak
Bir işlevini çağırarak olduğunu.
Örneğin, hangi işlevi Biz bugüne kadar kullanarak olmuştur
kullanıcıdan girdi almak için?
>> İZLEYİCİ: dize alın.
DAVID MALAN: dize olsun, ya da etmek int olsun, ya da başkalarının gördüm,
Eğer onları henüz kullanmadıysanız bile, gibi, uzun uzun ve benzeri olsun.
Ama varsayalım biz Aslında başlamak istiyorum
Biraz daha vardır yazma programları açıkçası, biraz daha, çok yönlü ve
Eğer ettik komutları gibi umarım, elde edilmiş,
biraz alışkın.
Cd alanı Dropbox gibi.
Bu, tabii ki değişiklikler Dizin, varsayarak
John Harvard'ın evinde konum Dizin, Dropbox klasörüne.
Bu arada, bu gibi bir komut , pset2 adlı yeni bir dizin oluşturur
aklınıza gelebilecek zaten ya yakında sorunun iki set.
Yap Merhaba, tabii ki, bir komut merhaba adlı bir program oluşturur
merhaba nokta c adında bir dosyadan.
Ve bunların her birinde davalar, şimdi, biz aldık
Sözde bir argüman sağlamak Komut satırı, yanıp sönen istemi,
O marka bilir, böylece ne inşa, ve öylesine Bu mkdir oluşturmak için hangi klasörün bilir,
ve böylece cd bilir nereye gitmek istiyorum.
Ama şimdiye kadar, biz söylemeye devam ana, varsayılan işlevi,
Bir boşluk ifadesi vardır Bu parantez içinde,
ki bunun anlamı Herhangi bir argüman alamaz.
>> Peki, bugün başlayan ne yapacağız
biz başlatmak için gidiyoruz olduğunu Bu bile gibi şeyler destekleyen.
Aslında, bu durumda, size hangi genellikle elle yazmayın,
Bu yapıyor olun Bizim için, orada değil
bir değil, bir, iki, üç ilave Program en adını sonra dizeleri
clang.
Peki nasıl bu elde edebilirim?
>> Peki, bugünden itibaren, İstediğimiz durumlarda
aracılığıyla girdi sağlamak için Komut satırı sözde,
Biz eklemeye başlamak için gidiyoruz Burada yellow-- ne var
int argc virgül boşluğu değiştirme dize argv açık dirsek yakın dirsek.
Şimdi bu ilginç nedenlerle bir çift için.
Bir, bizi yazalım gidiyor Biraz daha dinamik programlar.
Ancak, daha zorlayıcı, o kadar açık oluyor
olarak artık bir konuşma Ne diziler olabilir gerçekten
ne bir dize için kullanılabilir Gerçekten kaput altında olduğunu,
Gelecek haftaya kadar biz dalış başlattığınızda makine olarak nasıl daha derine
Bu şeyler işin tüm yapım.
Ama şimdi, en çizelim, belki bir resim.
>> Eğer bir program yazarken ilan ana ile
Bu şekilde, bu tür ana bu İki argüman, bir int alır
ve- ne veri türü İkinci argüman nedir?
>> İZLEYİCİ: Dizi.
DAVID MALAN: Dizi.
Bir var gibi Yani ilk bakışta görünüyor dize, ancak köşeli parantez dikkat edin.
Biz tanıttı son kez hatırlayın Bir dizi kavramı.
Ve diziler köşeli parantez kullanın bağlamlarda bir çift.
Sen kare kullanabilirsiniz parantez bir diziye gitmek için
ve bu gibi, belirli bir öğeyi almak dirsek 0 veya dirseği 1 veya 2 braket.
Ama biz, eğer kısaca, gördüm Geçen hafta bu aynı zamanda
Bu köşeli parantezleri kullanabilirsiniz Bir dizinin boyutunu beyan,
Eğer önceden biliyorsanız kaç int ya da kaç dizeleri ya da ne olursa olsun
Aslında istiyorum.
Bu yüzden orada 's çıkıyor Burada üçüncü bir bağlam
Bu içinde hiçbir numarası vardır köşeli ayraç.
Burada olduğu gibi zaman, belirtin argv gibi bir şey adı,
hangi sadece bir fantezi yoludur argüman vektör, diyerek hangi
başka süslü bir yoludur , argümanların bir dizi söyleyerek
Açık dirsek yakın dirsek sadece Eğer ille yapmak anlamına gelir
ne kadar büyük önceden bilmek dizi, olacak
ancak bir dizi olacak biliyorum.
Eğer bilmiyorsanız Yani sayı, orada koymayın
Açık dirsek yakın dirsek için argv bir dize olmadığı anlamına gelir,
ama dizelerden oluşan bir dizi.
Yani sözdizimsel, eğer Geçen hafta geri düşünmek,
söyleyerek çok benzer int yaş açık dirsek gibi bir şey,
ve sonra bir şey bundan sonra.
Peki bu neye benziyor?
Aslında bir resmini çizmek edelim.
Yani Main ile bu programı çalıştırdığınızda İki argüman içinde tanımlanan sahip
Bu parantez, sen aslında en az iki parçalar var
bellek size teslim Kaputun altında.
Bir, bu dikdörtgen olarak çizer Ben olacak gibi, argc adlandırılan olacak.
Ve sadece hızlı recap olarak, argc veri türü nedir?
Yani bir int var.
Yani bir numara gidiyor argc-- sırayla gitmek
dışarı argüman sayısı yanlısıdır.
Bu arada, ben bir dizi olarak argv boğuldum.
Ve ben gerçekten bilmiyorum o olacak ne kadar,
yani bugünün amaçlar için nokta nokta nokta.
Bazı uzunlukta alabilirsiniz.
Ama ben burada resimde ettik en az dört dikdörtgenler.
Yani bu hafızaya bir yığın argv dize dize nokta nokta nokta,
ve argc sadece bir yığınıdır Bir tamsayı için bellek.
>> Peki şimdi, en biraz daha hassas olalım.
Eğer, ben dizeleri olduğunda Bu dizide, denir
argv, ben onlara almak istiyorum bireysel, sadece geçen hafta olduğu gibi,
Biz gösterimi kullanmak için gidiyoruz argv dirsek 0 gibi
İlk şeyi bir dizi alır.
Argv tutucusu 1 almak için vb ikinci şey, ve.
Burada anahtar hala 0 konum olmak indexed-- biz hala 0 sayıyorsanız.
Şimdi aslında atalım Bu bir şey koymak.
Ben adlı bir programı derlemek olsaydı merhaba merhaba nokta c adında bir dosyadan,
ve sonra ben bu programı çalıştırın nokta ile merhaba yırtmaç,
Benim bilgisayar, benim laptop ne, Kaputun altında gibi bakmak
Ben nokta koşmak an merhaba çizgi ve Enter'a basın?
Peki, bu belki de biz tarif ne olabilir
Bilgisayarınızın en içeriği olarak Bellek veya RAM-- Random Access Memory.
Başka bir deyişle, bilgisayar, sihirli bir şekilde sizin için,
argc 1 numara koyar, AKA argcount, ve tam anlamıyla dize koyar
./hello argv aralığındaki 0.
Ben hiçbir fikrim, açıkçası, ne var argv aralığındaki 1 ya da 2 ya da 3,
Kullanıcı bulunmadığı çünkü eğer , ./hello dışında bir şey yazdığınız
bu varsaymak gidiyoruz büyük olasılıkla çöp değerleri,
tabiri caizse.
Bellek Bu parçalar mevcut, ama bizim kadar değil
Çünkü, onlara bakmak için argcount sadece bir tanesidir.
>> Şimdi, bu arada, eğer ben başka bir programı çalıştırmak yazma,
daha düzgün bir komut cd, senin yanıp prompt-- cd uzayda
Ben etkili olduğunu çalıştırdığınızda Dropbox--, cd programı çalıştırdığınızda, argc,
Benim bilgisayar belleğinin içinde, içindir En kısacık ikinci sayı 2.
Ve sonra argv dirsek o vardır cd, argv dirsek 1, Dropbox vardır
ve sonra tabii komut tamamlar, böylece bu belleğin tüm
esasen uzağa gider ve başka bir şey için kullanılır.
Ve bu yüzden diyorum bulunuyor İkinci bir bölünmüş.
>> Bu arada, biz mkdir pset2 yaparsak, resim, hemen hemen aynı görünüyor
ama argv içinde farklı dizeleri ile.
Ben merhaba clang çizgi yaparsanız merhaba nokta c aynı fikir.
Daha şeyler için doldurulur argv ve argc, tabii ki, 4'tür.
Bu yüzden, diğer bir deyişle Hatta bu dizi olsa
Bazı nokta nokta nokta olabilir Değişken uzunlukta, yani, konuşmak
Her zaman bunun nerede sonunu biliyorum argc size anlatacağım çünkü, bir
hangi noktada durdurmak zorunda argv elemanların bakarak.
Sadece dört bakabilirsiniz Bu durumda, toplam.
>> Peki, şimdi bir göz atalım belki basit bir program.
Sadece merhaba diyor biri Zamyla gibi birine.
Yani ben bir program yazmak için gidiyorum iddia Sadece bir an hangi aracılığıyla yapabileceğim
Sonra ben istiyorum ./hello uzay Zamyla, ve benim program şey yazdırmak için
gibi süper basit bir "merhaba, Zamyla."
Şimdi geçmişte biz GetString kullandım.
Geçmişte, bu yüzden bile Eğer programlama için yeni konum
oran bir kırbaç olabilir vardır GetString kullanan programı
ve daha sonra printf kullanır Zamyla merhaba demek için.
Ama bu sefer getString kullanmayın etmeyelim.
Beni yerine SIĞINMACININ içine gidelim ve standart I Ç nokta h eklerim.
Beni de CS50 nokta h dahil edelim.
Şimdi ana int, ve şimdi ben değilim Bugün geçersiz yapmayacağız.
Bunun yerine, ben int argc yapacağım dize argv açık dirsek yakın dirsek,
Bir numara belirterek.
Ve şimdi burada benim yapmak sözde edilir.
Şimdi ne yapacağım ben, bir inanç bir sıçrama biraz yapacağız,
Ben kullanıcı en varsaymak gidiyorum doğru bu programı kullanmak için gidiyoruz,
ve ben sadece gidiyorum , merhaba printf% sn yapmak.
Yani hiçbir şey yeni.
Ama şimdi ne kelime koymak istiyorum Programın adından sonra kullanıcı türleri.
Yani Zamyla ./hello alan yaparsanız, ben şekilde programlı erişim istiyorum
unquote "Zamyla." alıntı bu yüzden Benim argüman vektörüne gidebilir,
Benim dizeler dizisi ve komuta eğer, Yine, ./hello alanı Zamyla idi
ne numara istiyorum yapmak Burada argv koymak için?
HEDEF KİTLE: 1.
David MALAN: 1, çünkü dirsek 0 çıkıyor
olacak Programın adı gördüğümüz gibi.
Yani braket 1 ilk kelime I ki, kullanıcı, yazdığınız.
Ben go ahead ve bu tasarruf için gidiyorum.
Ben klasöre gitmek için gidiyorum nerede bu dosyayı koydum.
Ben merhaba 3 yapmak yapacağım.
Zorunlu IO Tamam.
./hello Zamyla girin.
Neyi yanlış yaptım?
Ben sürpriz yakalandı Kendimi orada sadece bir an için.
Neyi yanlış yaptım?
>> İZLEYİCİ: Adı.
>> DAVID MALAN: dosyanın Aslında hello3.c denir.
Ve ben sadece için yaptım tutarlılık, biz ettik çünkü
vardı merhaba.c en Online kodu geçmiş.
Yani bu ./hello düzeltmek izin braket çizgi 3 Zamyla.
Girin.
Ve şimdi, merhaba Zamyla var.
Bu arada, ben bu değiştirebilirsiniz Rob, ya da gerçekten başka bir kelime.
>> Ama bir köşe durumda düşünelim.
Eğer ne olacak bekliyoruz olabilir Ben hiç kimsenin adını yazmayın?
>> İZLEYİCİ: Hata.
>> DAVID MALAN: Bir hata belki çeşit, bir.
Görelim.
Girin.
Boş.
Yani printf aslında ediliyor Bize biraz koruyucu
Burada, ve tam anlamıyla açık paren baskı null, ama daha kötü şeyler olabilir.
Ve sadece göstermek için bir şey kesinlikle
yapmamalıyız, en gidelim Burada ve çevresinde alay başlar.
Doğru?
Ben biliyorum Eğer bu resim içinde Bellek, esas olarak bu
argv tutucusu 1 Zamyla, argv vardır dirsek 0 ./hello vardır, ya da ./hello-3.
Ne aralığındaki 2 nedir?
Yani o cevap verebilir Doğru, kendimi sorgulamaya?
Ben sadece bir 2 1 değiştirebilirsiniz.
Ben şimdi, 3 merhaba yeniden derlemek olabilir ./hello3 en yakınlaştırmak ve Enter tuşuna basın edelim.
Whoops.
Hiçbir alıntı işareti.
İlginç.
Yani bu tür için serin var Burada başka ne bakın.
>> Yani benim laptop içinde başka ne?
En braket 3 ile kaydedin edelim.
./hello-3, Hello3 olun.
Meraklı.
Ve şimdi gerçekten bold-- 50 başlayalım.
Böylece gerçekten derin dalış bulunuyor Benim bilgisayarın belleğine.
50 endeksleri içinde.
Yani merhaba 3 ./hello-3 yapmak.
Meraklı.
Pekala, şimdi ben sadece pervasız almak için gidiyoruz.
En 5,000 gidelim.
Tamam.
Bu yüzden bana yeniden derlemek izin.
./hello-3, Hello3 olun.
TAMAM MI.
Size bazı Şimdi, orada olabilir gidiyor bir ampul olacak.
Kaç var olan daha önce bu mesajı gördünüz mü?
TAMAM MI.
Peki, neden?
>> Oran mudur ve farklı var Bu neden olabilir şeyler,
ve açıkça iyi konum company-- açıkça var
ne denir neden Bir segmentasyon hatası.
Ve bugün için uzun lafın kısası, ben belleğin bir bölümünü dokundu
Ben olmamalıdır.
Nerede bir kesimi sadece bir yığın anlamına gelir bellek ben olmamalıdır.
Şimdi bilgisayar garanti eğer ben Ben argv dokunabilir ki ./helloZamyla çalıştırın
dirsek 0 ve argv dirseği 1 olmak.
Ama argc değeri 2, bu ben demektir sadece onur çeşit allowed--
dokunmak sisteminin, dirseği 0 ve desteği 1.
Ben herhangi bir uzak giderseniz, orada kesinlikle orada bellek olacak.
Benim RAM fiziksel var bilgisayar.
Ama kim var biliyor?
Nitekim, ben birden koşuyorum Tek seferde programları.
Ben olsam seen-- olabilir SIĞINMACININ Bu yapıyor
ama benim Mac veya PC-- ben olabilir Bir e-posta içeriğini görüldü.
Ben bir anlık görmüş olabilir mesajı Geçenlerde yolladım.
Olabilir bir şey bellekte etrafında kalan
yoluyla erişilen olabilirdi Bu keyfi köşeli ayraç notasyonu.
Ya da daha kötüsü, aklınıza gelebilecek Benim şifreleri biri bulundu
Geçenlerde, yazdığınız bir o edeceğimi program belleğinde depolanmış olan şekilde
Beni kimlik, ve Daha sonra sadece tür bıraktı
RAM ben bu programı çıkıncaya kadar.
>> Gerçekten de, bu biridir tehlike ve bir güçler
C gibi bir dil kullanarak Sen sınırsız erişim var
tüm içeriğini Bir programın bellek,
ve ne kötü adamlar can Hatta bu cases-- yapmak
özellikle biz Web programlama olsun
dönem sonuna doğru, biz olacak etrafında kurcalamak bu topic-- tekrar,
potansiyel, birileri bilgisayarın var Bellek ve meraklı şeyler bulabilirsiniz
Biz orada gördüğümüz gibi.
Hatta daha kötüsü, şifreleri ki o ya o zaman kötü şeyler için kullanabilirsiniz.
>> Yani açıkça ben bu yapmamam gerekirdi garip şeyler olmaya başlar çünkü.
Nitekim, bu program kilitleniyor olduğunu.
Bu eşdeğer olacaktır Windows'un Mac OS veya
Bir program penceresi sadece kaybolan.
Beklenmeyen bir hata oluştu.
Komut satırı ortamında Biz böyle bir şey görüyorum.
Ama bu yüzden, ben sadece dokunuyorum mi Bana ait olmayan bellek.
>> Yani bu a karşı savunmak izin Farklı bir şekilde biraz
Burada bu program bakarak.
Yani, yine, iskelet Biz earlier-- gördüm
ve ben bu sefer int vurguladık.
Ve tüm bu zaman ana vardır gerçekten değer döndürdü.
Olsa bile bizim ders çoğunda biz bir kez kullanılan hiç örnekler
Ana şey geri döner.
Biz sadece printf yakın yazma kaşlı ayraç ve o kadar.
Ama ücretsiz, ne derleyici, sizin için yapıyor
etkin senin için 0 dönüyor.
Şunları bir konrtol açar ve biraz var 0 iyi olduğunu counterintuitive--.
Bu kendi başına yanlış anlamına gelmez.
0 iyidir, ve olmayan 0 değer, dünya karar verdi,
Bir hata delalet edebilir.
Hiç berbat ettik Yani eğer Bilgisayarınızda bir şey yukarı,
veya bir program sadece size vefat etti ve Bazı hatalı pencere gotten
Ekranda, diyerek hata 49 ya da hata negatif 23--
bu bazı görünüşte keyfi value-- Bir programcı kodlanmış çünkü
49 negatif ya da pozitif gibi bir değer 23 herhangi bir sayı temsil etmek, söylemek cesaret,
4 milyar olası şeyler bir programda yanlış gidebilir.
>> Peki nasıl alabilir Bunun avantajı, ben?
Peki, bana bir programı açalım Ben önceden yazdığı,
ve çevrimiçi merhaba 4 denilen etrafında karıştırmak.
Ve o hariç, hemen hemen aynı olduğunu onun hata denetimi biraz var.
Bu durumda, yine ilan ettik İki argüman alarak ana,
ama bu sefer, hat 17, bildirim Ben bir sağlamlık denetimi biraz yapıyorum.
Ben emin değilim argc 2 eşittir.
Eğer öyleyse, o Ben güvenle yapabilirsiniz demektir
sadece braket 0, ancak braket 1 dokunun.
Ve ben go ahead ve çıktısını, Bu durumda, Zamyla veya Rob
ya da ben dışarı yazdığınız ne olursa olsun kelime.
Ve şimdi sadece almak için daha uygun biraz
Ben açıkça dönmek için gidiyorum 0 tüm iyi belirtmek için.
Kötü bir şey oldu.
>> Ama kongre, ben gidiyorum 1 dönmek, ya da açıkçası olmayan 0 değeri,
bir şeyler ters giderse.
Şimdi kullanıcı gitmiyor Gerçekten neler edin.
Nitekim ben bu dizine giderseniz, biz yakınlaştırmak ve merhaba 4 yapabilirim
beklediğim gibi ./hello-4 Zamyla davranır.
Ama bunun yerine yazmazsanız şey, hiçbir şey gibi görünüyor,
ama çökmez.
Ve ben bunun yerine bir şey yaparsam Rob gibi bir gözetmen olduğunu
Thayer-- paylaşım keyfi bilgiler.
Ama haber, argv 1, 2, 3, 4, ve 5 şimdi bellekte bulunmalıdır.
Yani, çok değil, ne olduğunu benim program, bekliyor
Ben olup olmadığı kontrol ettik, çünkü argc eşittir 2 ya da eşittir.
Yani şimdi bu karşı savunmak ediyorum.
>> Şimdi, gibi bir kenara, biz programmer-- ya da daha doğrusu biz users--
0 veya 1 ama bir kullanarak bu Görmez aracı, Debugger, ya da diğer araçları olarak adlandırılan
önce göreceğimiz gibi Uzun, sen programcı
Aslında ne olabilir görebilirsiniz Programınızın içinde yanlış gidiyor.
>> Peki, argc üzerinde herhangi bir soru?
Evet.
>> İZLEYİCİ: nerede gördüm onlar karakter vardı değil, [inaudible]
gibi dize yıldız d dedi karakter yıldız virgül.
Burada eşdeğer mı?
>> DAVID MALAN: Bunlar.
Soru Yani, var bazen görülen programlar
yok ki böyle dize argv dirseğini demek
ama onun yerine bir şey söylemek Char yıldız argv dirsek gibi.
Ve hatta diğer var görebileceğiniz varyantları.
Gerçekten de denktir.
Şimdilik, bu var Eğitim tekerlekleri tür
CS50 dize şeklinde üzerinde Kütüphane, ama sadece bir hafta içinde içinde
ya da biz kaldırmak için gidiyoruz tamamen ve aslında tıkanıklığı
karakter ve yıldız ne bakmak vardır, ve bu belleğe ilgilendirmeyen nasıl
temsil daha genel.
Yani biz tekrar bu geleceğiz.
>> Bizim argv veya argc Diğer sorular?
Evet.
HEDEF KİTLE: Neden geri vermedi Bir hata [inaudible]?
DAVID MALAN: did it Neden oh Sadece-- bir hata döndürür!
Bir önceki durumda, ne zaman biz Hafızalı çevresinde futzing edildi,
Neden sadece bir hata döndürür yaptı Ben gerçekten büyük bir sayı yazdığınız zaman?
Kısa cevap biz sadece şanslı var, bir.
Genel olarak, bir bilgisayar parçalar bellek ayırır,
ve bana yeterince büyük bir yığın verdi Ben, fark edilmeden, kaçtı
dokunaklı dirsek 2, dirsek 3, dirsek 50, ama en kısa sürede itti
Benim şans, ben gitti bellek yığın sınırları
İşletim sistemi beni vermişti.
Ve bu ne zaman var aşağı kelepçeli ve hayır dedi.
Segmentasyon hatası.
Evet.
>> İZLEYİCİ: yok nasıl bilgisayar argc değerini biliyor musun?
>> DAVID MALAN: yok nasıl Bilgisayar argc değerini biliyor musun?
Eğer bir program çalıştırdığınızda, bu program, Yanıp sönen istemi doğası gereği,
dizi verilir Yazılan edildi sözler
isteminde, o oldu isteminde yazdınız.
Ve böylece işletim olduğunu sistem, esas olarak,
sizin için ana argümanlarını doldurur.
Böylece servislerinden biri var olsun ki, çeşit gizlice
kaputu altında bir işletim sistemi.
Diğer sorular?
Evet.
>> İZLEYİCİ: çekirdek dökümü ne demek?
DAVID MALAN: çekirdek dökümü ne demek?
Yani bu iyi bir soru.
Ve beni geri gidelim Burada bu dizin.
Ve bunu fark edeceksiniz Orada yeni bir dosya var.
Gerçekten çekirdek denir, ve bu kadar oluyor Aslında tipik bir iyi-boyutlu dosya.
Bu aslında bir anlık olduğunu Benim programın bellek içeriği
o zaman çöktü veya RAM.
Ve bu, yararlı olacaktır Potansiyel olarak, tanı bakımından,
Biz gelecek derste konuşmak kez ve hata ayıklama hakkında bölüm,
aslında yapabilirsiniz, çünkü Dijital otopsi eşdeğer
Bu dosya üzerinde anlamaya yardımcı olmak için Eğer programda ne yanlış yaptım.
Evet.
>> İZLEYİCİ: Bir komut argc mı kendisi, ya da herhangi bir isim olabilir?
>> DAVID MALAN: İyi bir soru.
, Kendi içinde bir komut argc mı veya herhangi bir isim olabilir?
Kesinlikle bir komut değil.
Bu sadece bir değişken en bulunuyor veya bir argüman ismi,
ve bu yüzden kesinlikle biz Bu foo diyebiliriz,
Biz eğilimi bu bar, diyebiliriz go-kelime bir bilgisayar olmak üzere
bilim adamı gider.
Ama kongre, biz argc ve argv kullanın.
Ama bu sadece bir insan var kongre, başka bir şey.
Tamam.
Yani çıkıyor, ben oldum beyaz lie-- biraz söylüyorum
ve açıkçası, gelecekte, görürsünüz diğer beyaz yalan söylüyorum.
Ama şimdi, biz gidiyoruz Bunlardan birini geri soymak.
Zaman önce ben burada bu durumda ./hello veya ./hello-3 gibi bir program koştu
Zamyla, biz içeriğini vardı benim kabaca benzeyen bilgisayarın bellek
Bu.
Ama bir dizedir ne olduğunu hatırlamak.
Biz ne bir hafta önce ne dedin dize aslında başlık altında mı?
HEDEF KİTLE: karakter dizisi.
DAVID MALAN: Bu bir var karakter dizisi, değil mi?
Yani biz bir dizi olabilir şeritler, ancak, sonuç olarak, bir dizi
karakter dizisidir.
Ben gerçekten olmak istiyorsanız Ben bu resim çizmek anal,
Gerçekten çizim olmalıdır Biraz daha böyle,
böylece bunların her biri Benim argv dizi indeksleri,
bütün dize kendisi olduğunu kendisi bu bir dizi olduğunu.
Ve şimdi beyaz yalan Bugün söylüyorsun
resim değil ki oldukça bu gibi görünüyorsun.
Aslında, küçük kareler Büyük dikdörtgenler tipik dış
orada.
Ama biz uzun zaman önce tekrar bu geleceğiz.
Ancak bu, ./hello eğik 0 Bu özel karakter varlık
bir dize sonuna demarcates, ve biz başka bir sonra var
Zamyla adı.
Peki bu ne anlama geliyor?
>> Peki, beni önde gidelim ve diğer iki örnek açmak
online olmasıdır.
Bir argv1.c adlandırılır ve diğer argv2 olan.
Bir süper basit bir program olduğunu Geçmiş programlardan farklı
ki şimdi kullanıyorum argc ve burada argv.
Ve şimdi ben döngü için bir entegre ediyorum argc için yukarı i hat 18 = 0.
Ve ne yapacağım Burada bu kod satırı ile?
İngilizce.
Bu tabii ki argc kullanımını gösterir.
Ama İngilizce, ne yapar Ben bu programı çalıştırırsanız bunu yapmak?
Evet?
>> İZLEYİCİ: Bu yazdırmak için gidiyor senin İstediğiniz kadar birçok kez ekran.
DAVID MALAN: Kesinlikle.
Yani ne olursa olsun sözler bu, isteminde yazın
kusturmak için gidiyor Satır başına bana onları bir.
O yüzden go ahead ve bu yapalım.
Benim dizine gidelim ve argv1 ./argv1 yapabilirim.
Ve şimdi, en basit tutalım.
Ilk olarak bir şey yapalım.
Bir şey yazdırmak yaptım, ve Bu gerçekten programın ismi,
Bu dirsek 0 çünkü.
Ben şimdi foo dersem, bunu yapmak için gidiyor Bu iki ve ben foo bar derseniz,
bu üç şey söyleyecek.
Şimdi belki biraz ilginç.
Ama bu argv hatırlamak dizelerden oluşan bir dizidir,
ama bir dize karakter dizisidir, bu yüzden bir çentik şeyleri alabilir
ve bu temel uygulamak mantık ve kod yapmak
kuşkusuz, biraz daha şifreli görünüyor.
Ama bir iç içe olan döngü, akin şey
Eğer Mario çağırmak olabilir ne, Örneğin, eğer bu şekilde yaptım.
>> Peki şimdi ben, hat 19 fark yine benim argümanlar üzerinde yineleme,
0 yukarı argc için.
Şimdi hattı I 21-- şeyler Son hafta-- bir hile borçlanma
Ben ne olduğunu kontrol ediyorum argv dirsek i uzunluğu.
Ben n bu cevabı saklamak ediyorum.
Ve sonra ben j itibaren entegre ediyorum j 0 başlatıldı n, kadar.
Yani, sayım için kongre.
Eğer bir varsa, i kullandıktan sonra İç içe döngü, sen, yine i kullanamazsınız
aksi takdirde potansiyel, clobber edeceğiz, İç döngü dışında bir değer.
Yani kongre tarafından j kullanıyorum.
Biz k kullanabilirsiniz.
Eğer k daha varsa, muhtemelen tipik, çok fazla iç içe var.
Ama şimdi, benim printf fark çizgi biraz farklıdır.
Ben% s yazdırma değilim, ben değilim % c baskı, tabii ki,
Bir karakter için bir yer tutucudur.
>> Ve şimdi bu sözdizimi dikkat edin.
Yeni.
Biz daha önce görmedim.
Ama mantıklı, bu sadece anlamına gelir argv i dize olsun
ve ne j olsun?
HEDEF KİTLE: Karakter.
DAVID MALAN: Bu dize Karakter.
Yani köşeli parantezleri kullanarak köşeli parantez ardından,
Bu ilk dalış argv en dizeleri içine,
ve daha sonra ikinci j kare parantez
karakter içine dalış argv o belirli dize.
Ve sonra, sadece iyi ölçmek için, Ben burada yeni bir satır baskı yapıyorum.
Yani şimdi beni go ahead ve açalım biraz daha büyük bir pencerede yukarı
bu yüzden eylem görebilirsiniz.
Bana bu klasöre gidelim.
Ve şimdi yapabilirim argv-2-- argv-2 yapmak whoops--, ./argv 2.
Girin.
Ve biraz zor dikey okuma,
ama bu gerçekten adı var boş bir satır takip programı.
Şimdi bana go ahead ve foo yapalım.
Benzer şekilde sert okumak, ama bu kadar gerçekten her satıra bir karakter baskı.
Ben bar yaparsam Ve, şimdi var satır satır bu baskı.
Yani burada paket çok değil vay, bu temiz yeni hile bakmak, o
nereye içeriğine alabilirsiniz Bir dizinin belirli karakter,
ama doğrusu biz bu temel alıyoruz nasıl bir diziye endeksleme gibi fikirler,
ve daha sonra bir içine indeksleme bu dizi olduğu dizi
ve sadece aynı fikirleri uygulayarak Biraz daha sofistike örnekler.
Ama temelleri gerçekten var Hatta geçen haftadan bu yana, değişti.
>> Şimdi bu, zamanında tür ki, haftada sıfır, hatırlama
böyle bir telefon rehberi ile oynadı.
Ve bu tabii ki olsa bile kâğıdın fiziksel parçaları,
ne tür düşünebilirsiniz bir dizi olarak bir telefon rehberi.
Eğer olsaydı şüphesiz, reimplement Bu parçalar kağıt bu parçalar
Bir bilgisayar, muhtemelen Eğer bir şey kullanmak istiyorum
Bir dizi tüm bu depolamak için gibi Bir bütün yoldan isimleri ve numaraları
Z. aracılığıyla Yani bu, çünkü güzel bize bir fırsat veriyor,
nasıl olabilir belki, dikkate Aslında böyle bir şey uygulamak.
Burada kapı, bir dizi gibi.
Ben Yapabileceğim Yani eğer biz bir ihtiyaç yukarı gelip gönüllü.
Görelim.
Bir yabancı yüz, belki, belki de yabancı bir yüz.
Nasıl turuncu hakkında?
İşte.
Turuncu gömlek, yukarı gel.
>> Şimdi ve hareket devam edelim tarafa bu kapılar,
Bir an için dışına bu hareket.
Adınız ne?
>> AJAY:
>> DAVID MALAN: Ajay.
David.
Tanıştığımıza memnun oldum.
Tamam.
Bu yüzden bu altı arkasında var screen-- üzerinde dijital kapılar
veya, daha doğrusu, yedi kapı numaralarının bir sürü screen--.
Ve sana bir şey söyledim içinde advance-- kabul etti?
AJAY: Önceden bir şey yok.
DAVID MALAN: Tüm ben yapmak istiyorum Şimdi benim için bulmak için, ve bizim için,
Gerçekten, sayı 50, Bir seferde bir adım.
>> AJAY: No 50?
>> DAVID MALAN: sayı 50.
Ve sen ne ortaya çıkarabilir Bu kapıların her birinin arkasında
basit bir parmak ile dokunarak.
Kahretsin. [KAHKAHA]
>> [Alkış]
>> Çok iyi yapılır.
TAMAM MI.
Biz güzel bir hediye var Burada sizin için ödül.
Film Sizin seçim biz Geçen hafta tartışıldı.
>> AJAY: Ah, dostum.
Ah, ben Spaceballs görmedim.
>> DAVID MALAN: Spaceballs.
Tamam.
Yani sadece tek bir an tutun.
Şimdi bu yapalım How-- Bir öğretilebilir moment--
Eğer nasıl gitti numara 50 bulma?
AJAY: Ben rastgele seçtim.
DAVID MALAN: Yani seçti rastgele ve şanslı var.
AJAY: Evet.
DAVID MALAN: Tamam.
Mükemmel.
Yani şimdi, seni yoktu şanslı, başka ne kazanılmış
Bu kapılar ardında ne olabilir?
Ben devam Yani eğer ve Burada bu sayıları ortaya,
aslında rastgele sıralanmıştır.
Ve en iyi sen olabilir yapılan, açıkçası, sonuçta, tarafından
En kötü durumda, hepsini kontrol.
Yani, süper-got lucky hangi Biz bir algoritma dediğimiz değil.
Evet, tebrikler.
Eğer yapabilirsen Ama şimdi, mizahı, beni let's--.
Burada bu sekmeye gidelim.
Ve burada açıkça numaraları vardır rastgele bir düzen gibi görünüyor ne,
ve onlar.
Ama şimdi onun yerine iddiası ise Bu, bu kapılar ardında
sıralanır sayılardır.
amaç şimdi de olduğunu Bize numara 50 bulabilirsiniz.
Ama algoritmik bunu, ve Bu konuda gidiyoruz nasıl bize bildirin.
Eğer bulursanız Ve, filmi tutmak.
Bunu, onu geri ver bulmuyorum.
AJAY: Ben uçlarını kontrol edeceğim Birincisi, orada- belirlemek için
[Güler ve alkışlar]
DAVID MALAN: Burada gitmek.
En birinde bir göz atalım Ajay adlı öncekilerin,
Oldukça şanslı değildi Sean.
Tamam, burada görev yüzden, Sean, şudur.
Ben bu arkasında gizli olan Kapılar sayı yedi,
ancak bu kapıların bazıları sıkışmış yanı sıra diğer negatif olmayan sayılardır.
Ve amacınız bu düşünmek için sadece bir dizi olarak sayıların üst satır.
Biz parçaları sadece bir dizi olduğunu arkalarında numaraları ile kağıt.
Ve amacınız sadece üst kullanılması, dizi burada, bana numarayı yedi bulabilirsiniz.
Ve biz o eleştirmek için gidiyoruz Bunu yaparken nasıl.
Bize numarayı yedi lütfen bulun.
Hayır.
5, 19, 13.
Bu bir tuzak soru değil.
1.
Bu noktada puanınız çok değil İyi, böylece de devam olabilir.
3.
Hadi.
Açıkçası, ben yardım edemem ama merak ediyorum ne bile düşünüyorsun.
>> SEAN: Ben sadece üst satırda alabilir.
DAVID MALAN: Sadece üst satır.
Yani üç sol var.
Yani bana 7 bulabilirsiniz.
>> [İZLEYİCİ ÖNERİLER bağırır]
Yani bunların her ikisi de inanılmaz çok farklı nedenlerle.
Yani bu nerede biz Bir an önce bıraktığı,
ve burada temel anlayış Bu kapılar numaraları vardı
arkalarında bu ideal, sıralanır için paket yapabilirsin ki
temelde iyi bu ikinci example--
ve, aslında, o Sean oldu rasgele sayılar ile ilk girişim
gibi before-- ancak en kısa sürede Bu numaralar kriteri olarak,
Telefon defterine gibi çok, Açıkçası ne yapabilirim?
Ya da nasıl bu bilgiyi kaldıraç?
Evet.
>> İZLEYİCİ: Sen [duyulamaz] yarıya gitmek.
DAVID MALAN: Evet.
Kesinlikle.
Yani Ajay adlı ilk içgüdüsü Hatırladığım kadarıyla, uçlarını kontrol etmek,
ve sonra çeşit bitmiş hızlı örnek.
Başladığımız Ama bu daha fazlasını yapmak için yöntemli bu doğrultuda,
ancak belki başlangıç Orta, onlar sıralanır çünkü,
en kısa sürede açığa gibi sayı 16, bu nedenle payi
ve en biz ki- tam yapalım Bu nedenle biliyorum ki 50, bugünün durumunda,
sağa olmak var.
Yani tıpkı haftada sıfır Biz yarısında telefon rehberini yırttı
ve yarısını attı uzakta Sorun, burada da aynı fikir.
Biz bu yarım atabilir Sorunun uzakta.
Ve muhtemelen ne algoritmik yapabilir,
50 olması gerektiğini öğrendikten sonra sağa, her yerde eğer,
ortada, orada deneyin Kalan kapıların.
Tabii ki, 50 daha yüksektir 42 den, yani biz
Bu kalan atmak uzakta sorunun çeyrek,
ve son olarak, tespit 50 gibi bir şey.
Ama sadece gibi Telefon rehberi, bu rakamlar
zaten bize verildi Sıralanan düzen, bize bırakıyor
sorusuyla, nasıl yapmak siralanacak şeyler olsun?
Ve açıkçası, ne pahasına?
Olması gereken bir şey var Telefon rehberini teslim
ve daha sonra bularak arkadaşlarınızı etkilemek Sağ gerçekten hızlı bir telefon numarası,?
Bulmak için 32 sayfalarını yırtarak 4 milyar sayfaların dışında bir kişi,
biz bir uç bir örnek olduğunu söyledi.
Ama ne kadar zaman sürdü Verizon bu telefon rehberini sıralamak için?
Bizi sürdü ne kadar zaman Bu yedi numara sıralamak için?
Yani biz ettik bir soru Şimdiye kadar tamamen göz ardı.
>> Peki şimdi bu soruya cevap verelim.
Ve şimdi tüm filmler bitti, ama biz biraz stres topları var.
Sekiz gönüllü söylüyorlar, varsa Burada bizi katılmadan misin değil misin?
Nasıl, en önde gidelim ve yapılacak Senin dört, burada üç?
Bazı yeni yüzler alın.
Ve orada sizin dört?
Ve en değil önyargı izin şimdi-- ötürü-- ve Burada ucunda üzerinde sayı sekiz.
Hadi gel.
Tamam.
Yani biz burada için ne Senin her bir sayıdır.
Nereye gitmek isterseniz Önümüzdeki bu numarayı almak.
Adınız ne?
>> ARTIE: Artie.
>> DAVID MALAN: Artie, tamam.
Sen 1 numara sensin.
>> AMİN: Amin.
DAVID MALAN: Amin.
David.
Sen 2 numaralı konum.
Ben el gibi, go ahead Eğer kağıt yaprak,
müzik önünde kendinizi sıraya Orada aynı sırada duruyor.
>> ANDY: Merhaba, Andy.
>> DAVID MALAN: Andy, seni görmek güzel.
Sayı 3.
>> JACOB: Jacob.
>> DAVID MALAN: Jacob, 4 numaralı.
Aramıza hoşgeldin.
GRANT: Grant.
DAVID MALAN: Grant.
Sayı 5.
>> ALANNA: Alanna.
>> DAVID MALAN: Alanna, 6 numaralı.
>> FRANCES: Frances.
DAVID MALAN: Frances, 7 numara.
Ve?
>> RACHEL: Rachel.
>> DAVID MALAN: Rachel, sayı 8.
Tamam.
Devam edin ve bu sırada kendinizi olsun.
Bana Kalan birini koyalım Müzik yerde durmak.
Nerede bir stand gerekiyor?
TAMAM MI.
Devam edin ve sadece numaraları koymak nerede seyirci onları görebilirsiniz,
Müzik dışa dönük duruyor.
Ve umarım, bizim ilk aklı kontrol ötürü-- 4, 2, 6.
Oh-oh.
Bir dakika bekle.
Biz 8 yok.
Ben sizi tahliye etmek gerekir nasılsa örnek.
Hayır.
Hayır, sorun değil.
Görelim.
Biz bunu yapabilirsiniz.
Yanında olmak.
Biz oraya gitmek.
Doğru.
Tamam.
Yani, şimdi biz 8, 1, 3 7, 5 var.
TAMAM MI.
Mükemmel.
>> Yani eldeki soru olarak, bir ne pahasına ve hangi yöntem vasıtasıyla,
biz aslında burada bu numaraları sıralayabilirsiniz biz tür geriye çalışabilir, böylece,
sonuçta, ve decide-- o gerçekten Etkileyici, gerçekten verimli,
Ben bölmek olduğunu ve Bir telefon rehberi fethetmek?
O gerçekten verimli mi Ben bölmek ve fethetmek için
bu dijital adet Gemide kağıt,
bize bir maliyeti olacak belki zaman ya da enerji veya CPU döngüleri servet
aslında bizim veri almak için Bazı sıralı düzene?
Yani bu soruyu soralım.
>> Peki ilk kapalı, bu numaraları hemen hemen rastgele sırayla,
ve ben teklif gidiyorum bir algoritma veya işlem
hangi biz bu millet sıralayabilirsiniz.
Ben yaklaşmaya gidiyorum Bu oldukça safça.
Ve ben tanımak için gidiyorum Benim için bir çok çeşit olduğunu
etrafında fikrimi sarmak için Bütün veriler aynı anda ayarlanır.
Ama biliyor musun?
Biraz yapmaya gidiyorum çok basit marjinal giderir.
4 ve 2 eğer, sipariş dışında gol 8 kadar üzerinde 1'den gitmektir.
Peki biliyor musun?
Sana sahip gidiyorum Eğer geçerseniz çocuklar, takas
fiziksel konumları ve kağıt senin adettir.
Şimdi 4 ve 6, bu sırayla yer almaktadır.
Ben o olacak terk edeceğim.
6 ve 8, bu sırayla yer almaktadır.
Onları olmasını terk edecek.
Bozuk 8 and1.
İki takas sakıncası olmazdı.
Şimdi 8 ve 3, siz takas eğer.
8 ve 7, siz takas eğer.
Ve 8 ve 5, siz takas eğer.
>> Şimdi, ben bittim?
Hayır, tabii ki değil.
Ama ben yaptık daha iyi bir durum, değil mi?
Adın neydi, sayı 8?
>> RACHEL: Rachel.
DAVID MALAN: Yani Rachel vardır etkili bir oldukça uzak kadar kabarmış,
sonuna kadar tüm yol Burada sayıların benim dizi.
Ve böylece sorun tür çözüldü.
Şimdi, açıkça, 2 hâlâ gerekiyor Biraz hareket ve 4 ile 6 ve 1.
Ama aldık görünüyor çözüm yakın küçük.
Yani bu aynı uygulayalım Yine naif sezgisel.
2 ve 4, tamam.
4 ve 6 Tamam.
6 ve 1 mm mm.
En takas edelim.
6 ve 3 mm mm.
En takas edelim.
6 ve 7 Tamam.
7 ve 5, hayır.
En takas edelim.
Ve şimdi 7 ve 8.
Ve senin adın neydi?
FRANCES: Frances.
DAVID MALAN: Frances.
Yani şimdi Frances bile daha iyi olduğunu pozisyon, şimdi 7 ve 8 çünkü
doğru üstüne kadar kabarmış edilir.
Yani 2 ve 4, tamam.
4 ve 1, diyelim takas.
4 ve 3, diyelim takas.
4 ve 6, iyisin.
6 ve 5, diyelim takas.
Ve şimdi bu adamlar iyi.
Biz neredeyse oradayız.
2 ve 1, sıra dışı, yani takas.
Ve şimdi bana bir sağlamlık denetimi yapalım.
2 ve 3, 3 ve 4, 4 ve 5, 5 ve 6, 6 ve 7, 8.
Tamam, bu yüzden bitti.
>> Ama ne maliyeti yaptım ben Burada bu sayıları sıralamak?
Peki, kaç adım potansiyel ben yaptım Bu millet sıralarken almak?
Peki, biz geri o soruya geleceğiz.
Ama açıkçası, sen var eğer Biraz bıkkın, işte
tür bu değildi ki ortaya belki de en verimli algoritma.
Ve gerçekten de, açıkçası, ben Terliyorum daha ileri geri yürüme.
Bu özellikle verimli gelmiyordu.
Yani başka bir şey deneyelim.
Siz sıfırlamak olsaydı Bu sekiz değerlerine kendinizi.
Aferin.
>> Sadece için, dijital bir göz atalım Bir an biz, başka bir şey deneyin önce
Sadece ne oldu.
Burada yukarı, bir görmek üzereyiz Bu sekiz insan görselleştirme
bu sayede, mavi ve kırmızı barlar sayıları temsil eder.
uzun boylu bar, numara büyük.
kısa bar, numara küçük.
Ve ne görmek için gidiyoruz olduğunu Bunlardan sekiz daha fazla rasgele düzeni.
Bu çubuklar görmek için gidiyoruz Aynı algoritma sıralama kriteri alıyorum,
veya, talimatlar seti hangi Biz kabarcık sıralama bundan böyle arayacağım.
Yani, ikinci ya da bu yüzden her fark İki bar, kırmızı aydınlatan vardır
bilgisayar tarafından karşılaştırılır ediliyor.
Ve sonra, eğer büyük bir bar ve küçük bar, düzenin dışında
Onlar benim için takas ediliyor.
>> Şimdi bu inanılmaz sıkıcı Kesinlikle, bu seyretmek,
Çok uzun, ama fark sağa hareket büyük barlar takeaway--
sola hareket küçük barlar.
Şimdi bu süreci iptal edelim ve bu hızlandırmak
çok daha hızlı olacak, bu yüzden biz için Neyin üst düzey bir anlamda olsun,
Gerçekten, kabarcık sıralama yapıyor.
Nitekim, bu kadar köpüren Listenin sağ tarafında,
ya dizi, büyük barlar.
Ve tersine, küçük barlar sola aşağı onların yolunu köpüren,
daha hızlı bir tempoda da olsa daha biz daha önce yaptık.
Yani, sert insanlar ile görmek, ama görsel o gerçekten ne var
oluyordu.
>> Ama temelde bir deneyelim Şimdi farklı bir yaklaşım.
En farklı deneyelim algoritma size sahip sayede
adamlar bu orijinal başlayacak Bu düzen burada pozisyonları.
Ve şimdi devam edelim.
Ve ben bir şey yapacağım Hatta basit, değil mi?
Geriye dönüp bakıldığında, yine çiftler halinde takas ve yine, neredeyse küçük bir akıllı.
, En daha safça şeyler yapalım nerede bu millet sıralamak isterseniz,
bana sadece seyir devam edelim En küçük eleman için.
Yani şimdi, 4 Ben gördüğüm en küçük sayı.
Ben hatırlıyorum gidiyorum.
Hayır, 2 iyidir, ve unutmayın.
1 bile küçük.
3, 7, 5.
TAMAM MI.
Şehre adınız neydi?
>> ARTIE: Artie.
>> DAVID MALAN: Artie.
Yani, Artie, devam edin.
Ben çizgi dışına çekmeye gidiyorum.
Buraya gel olsaydı.
Ve ben onun için yer açmak gerekir.
Biz burada bir karar noktası var.
Burada Artie için yer açmak nasıl 1 numara aittir başında?
>> İZLEYİCİ: Shift.
>> DAVID MALAN: Tamam, biz Herkesi kayması olabilir.
Ama optimizasyon öneriyoruz.
Bu biraz can sıkıcı hissediyor Bana dört kişiyi sormak için
tüm yol aşağı taşımak için.
Başka ne yapabilirim?
>> İZLEYİCİ: Bunları geçin.
>> DAVID MALAN: Bunları geçin.
Ve senin adın neydi?
>> JACOB: Jacob.
DAVID MALAN: Jacob, hareket.
Çok daha verimli adil olması için Artie ile Yakup takas yerleri,
zorlamak yerine Bu millet dört,
için, çok teşekkür ederim onların doğru pozisyon.
Şimdi ne Artie hakkında güzel, onun doğru pozisyonda olduğunu.
Tekrar yapalım.
2, ben gördüğüm en küçük sayı.
3, 7, 5.
TAMAM MI.
2 kesinlikle küçüğüdür.
Herhangi bir işi yapmak zorunda değilsiniz.
Tekrar yapalım.
6.
Küçük?
8.
Hayır.
4?
Ooh.
Bana 4 unutmayalım.
3.
Bana 3 unutmayalım.
7, 5.
Ben ettik küçük sayı Bu geçişte görülen 3.
Eğer dışarı gel istiyorum.
Nereye koymak için gidiyoruz?
Ve senin adın ne?
>> ALANNA: Alanna.
>> DAVID MALAN: Alanna, biz konum tahliye etmek zorunda olacak.
Ama bu, daha verimli Sadece iki kişi takas etmek,
birden fazla kişi olması daha Aslında üzerinde kaçınmak.
Şimdi yine bu yapalım.
Ben 4 seçeneğini, böylece dışarı gelip gidiyorum.
Ve kim taşımak olacak?
Sayı 8, tabii.
Ben şimdi sayı 5 bulursanız, dışarı gel.
Sayı 8 tekrar tahliye almak için gidiyor.
Ben şimdi yerinde sayı 6 bulmaya gidiyorum.
Yerine 7.
Yerine 8.
>> Biz sadece şimdi ne yaptım Seçim sıralama denen şey,
Bu görselleştirmek ve eğer, bu kadar biraz farklı hissediyorum olacak.
En önde ve bundan gidelim Menü burada, bu visualization--
en, Firefox hadi amaçlara yönelik bu değiştirelim.
Seçimi tür bu değiştirelim.
Ve en önce olduğu gibi hızlandırmak izin, ve şimdi görselleştirme başlatın.
Ve bu algoritma vardır o bir farklı hissediyorum.
Her tekrarında, açıkçası, hatta daha basittir.
Ben sadece küçük elemanı seçerek ediyorum.
Şimdi, açıkçası, ben biraz şanslı Zaman, ki süper-hızlı sıralanır.
elemanlar rasgele idi.
Bu gibi biz sonunda olacak, değil temelde daha hızlı, bkz.
Ama üçüncü ve son görelim Neler olarak burada yaklaşım.
Yani öncesinde gidelim ve sizi reset son bir kez burada bu sırada olmak.
>> Ve şimdi, ben gidiyorum biraz daha zeki
sadece bizim algoritmaları yuvarlak dışarı.
Bunu yapmak için gidiyorum.
Ben gidemem gidiyorum ileri ve geri çok.
Açıkçası, ben yoruldum Bütün bu şaryo.
Ben sadece ben ne alacağım Listenin başında verilen,
ve ben sıralamak gidiyorum o zaman ve orada.
Yani burada biz.
Sayı 4.
Ben numarayı eklemek için gidiyorum Sıralı liste halinde 4.
Bitti.
Ben şimdi iddia ve sadece bu daha yapmak için net, benim listesinin bu kısmı sıralanır.
Aptalca bir iddia tür, ama aslında 4 boyutunda bir listesinde sıralanır.
Şimdi, ben 2 sayısına almaya gidiyorum.
Sayı 2 Ben şimdi gidiyorum doğru yere yerleştirin.
Peki nerede 2 aittir?
Açıkçası, buraya.
Yani go ahead ve eğer yapabilirsen, geri hareket ettirin.
Ve neden siz sadece almak yok Müzik seninle bu sefer duruyor.
Ve zorla yapalım sizi eklemek Listenin başında içine.
Yani biraz daha fazla iş.
Ben, etrafta Jacob taşımak zorunda kaldı ve senin adın ne?
>> AMİN: Amin.
>> DAVID MALAN: Amin.
Ama en azından ben ileri geri gitmedi.
Ben gitmek gibi ben sadece şeyler alıyorum.
Ben sadece onları takacağım doğru yerde.
6, bu aslında oldukça kolaydır.
Eğer en, orada sizi eklemek edelim sadece biraz üzerinde taşımak istedim.
Sayı 8, aynı zamanda oldukça kolay.
Sağ orada.
Kahretsin.
Sayı 1 yapamayız sadece Burada Amin ile takas,
çünkü gidiyor karışıklık sipariş.
Yani biz biraz daha akıllı olmak zorunda.
Yani, Artie, eğer olabilir Bir an için yedekleyin.
, En önde gidip şimdi vardiya Let Önceki algoritmalar farklı olarak,
Artie'den yer açmak için Burada başında.
Günün sonunda Yani, ben tür değilim Ben daha önce önlemek istediğini yapıyor.
Ve bu yüzden benim algoritması tür bir, entelektüel, tersine
başlangıçta ne gelen.
Ben sadece vites yapıyorum farklı bir noktada.
Şimdi 3 kulüpler.
Lanet olsun.
Biz yine daha fazla iş yapmak zorunda.
Yani seni dışarı itmek verelim.
En geçelim 8, 6, 4-- Oh-- oh ve 3 sağ oraya gitmek için gidiyor.
Bu sefer en hafif tasarruf öylesine.
7 değil, çok iş yapılacak.
Eğer pop istiyorsanız Yani geri, seni eklemek edelim.
Ve son olarak, 5, eğer geri pop istiyorum, biz
Seni kaydırmaya sana ihtiyacım var, beş kadar, yerinde olduğunu.
>> Peki şimdi bu görmek için grafiksel yüksek düzeyde,
Şimdi bu algoritma yapalım görselleştirme bir ek süre.
Yani bu bizim ekleme tür çağırır.
Biz sadece çalıştırın edeceğiz hızlı ve burada başlatın.
Ve o da, farklı bir havası vardır.
Bu tür iyi gidiyor ve Daha iyi, ama mükemmel asla
Ben bu boşlukları ve pürüzsüz gitmek kadar.
Çünkü, yine, ben sadece alıyorum ne Ben soldan sağa verilen ediyorum.
Yani o kadar şanslı alamadım Bu her şey mükemmeldi.
Bu az vardı bu yüzden Biz zamanla sabit mispositions.
>> Peki bu algoritmaların tüm görünüyor biraz farklı hızlarda çalışır.
Aslında, hangi olduğunu söyleyebilirim En iyi ya da bugüne kadar en hızlı?
Kabarcık sıralama, ilk?
Seçim sıralama, ikinci?
Yerleştirme sıralama, üçüncü?
Ben bazı seçim türlü duyuyorum.
Diğer düşünceler?
>> Bu yüzden çıkıyor Bu algoritmaların hepsi
gibi temelde sadece verimli gibi, tersine, her bir other-- veya
birbirlerine gibi verimsiz, Biz temelde yapabiliriz çünkü
Üç daha Bu algoritmaların.
Ve bu bir beyaz yalan biraz da bu.
Ben verimli derken veya verimsiz olarak,
en az içindir n süper-büyük değerler.
Biz burada sadece sekiz kişi var olduğunda, ya da belki ekranda 50 ya da öylesine barlar,
kesinlikle farklılıkları fark edeceksiniz Bu üç algoritma bulunuyor.
Ama n olarak, kişi sayısı, veya sayıların sayısı,
veya telefonda kişilerin sayısı Kitap, veya web sayfalarının sayısı
Google'ın veritabanında , büyük ve daha büyük olur
göreceğiz ki bu her üç algoritmalar aslında oldukça kötü.
Ve biz temelde yapabiliriz Bundan daha iyi.
>> En nihayet, bir göz atalım ne bu algoritmalar olabilir de
gibi ses Birkaç başkalarının bağlam
hem de bu yolu ile Burada görselleştirme
Bu bize tanıtacak bir algoritma numarası.
En go ahead ve tebrik edelim bunların hepsi burada bizim katılımcılar,
kendilerini çok iyi sıralanır.
Eğer bir ayrılık hediye almak istiyorum.
Siz de kendi numaralarını tutabilirsiniz.
Ve göreceksiniz ne, ya da daha doğrusu, şimdi, duymak
olduğunu biz sesler koymak gibi Bu çubukların her birinin
ve yazılım ile ilişkilendirmek Sesin bir çok farklı frekans,
Eğer zihniniz daha audioly sarabilirsiniz Bunlardan her ne etrafında
gibi görünmek.
hangi ilk ekleme tür
>> [SAYISI]
>> Bu kabarcık tür.
>> [SAYISI]
>> Seçim sıralama.
>> [SAYISI]
>> Birleştirme sıralama denilen şey.
>> [SAYISI]
>> Cüce sıralaması.
>> [SAYISI]
>> Bu CS50 için var.
Çarşamba günü görecek.
>> ANLATICI: Ve şimdi, "Derin DAV Farnham tarafından Düşünceleri, ".
Neden bir döngü için?
Neden daha iyi yapmak?
Ben beş döngü yapmak istiyorum.
>> [KAHKAHA]