Neden bir grafiğe bakıp hemen başka bir noktaya en yakın noktayı bulabilirim, ama programlamada O (n) zamanımı alıyor mu?


122

Açıklayayım:

Verili sayıdaki bazı noktaların bir dağılım grafiği göz önüne alındığında, eğer zihinsel olarak komplodaki herhangi bir noktaya en yakın noktayı bulmak istersem, grafikteki çoğu noktayı hemen görmezden gelebilir, seçimlerimi az sayıdaki sabit sayıdaki noktalara daraltabilirim. .

Yine de, programlamada, bir dizi nokta verildiğinde, herhangi birine en yakın noktayı bulmak için, zamanı olan diğer her noktanın kontrol edilmesi gerekir .O(n)

Bir grafiğin görsel olarak görülmesinin muhtemelen anlayamadığım bir veri yapısının eşdeğeri olduğunu tahmin ediyorum; çünkü programlama ile, örneğin bir Dörtlüağaç olarak daha yapısal bir yönteme noktaları dönüştürerek, bir yakın noktaları bulmak için noktaları de zaman, ya da ammortized zaman.n k log ( n ) O ( log n )knklog(n)O(logn)

Ancak veri yeniden yapılandırılmasından sonra nokta bulma için hala bilinen bir calO amortize algoritma (bulabilirim) yoktur.O(1)

Öyleyse neden bu sadece görsel inceleme ile mümkün görünüyor?


36
Tüm noktaların zaten ve kabaca nerede olduklarının farkındasınız; Gözleriniz için "yazılım sürücüleri", görüntüyü yorumlamanız için zaten çok uğraştı. Analojinizde, gerçekte olmadığı zaman bu çalışmayı "özgür" saymayı düşünüyorsunuz. Zaten puan konumlarını bir tür sekizli gösterime sokan bir veri yapınız varsa, O (n) den çok daha iyisini yapabilirsiniz. Beyninizin bilinçaltı kısmında, bilgi bilinçli kısma gelmeden önce, bir çok ön işlem gerçekleşir; Bu tür analojilerde bunu asla unutma.
Richard Tingle

20
Bence varsayımlarınızdan en az biri genel olarak geçerli değil. 'küçük' pertürbasyonları olan bir daire üzerinde düzenlenen tüm noktaları ve dairenin merkezi olan 1 ek P noktasını varsayalım. P'ye en yakın noktayı bulmak istiyorsanız , grafikteki diğer noktaların hiçbirini kaldıramazsınız .
collapsar

4
Çünkü beynimiz gerçekten harika! Ucuz bir cevap gibi geliyor ama doğru. Gerçekten de (görünüşte büyük ölçüde paralel) görüntü işlemenin nasıl çalıştığı hakkında pek bir şey bilmiyoruz.
Carl Witthoft

7
Temel olarak, beyniniz siz fark etmeden alan bölümlemesini kullanıyor. Bunun gerçekten hızlı görünmesi, zamanın sabit olduğu anlamına gelmez - sonlu bir çözünürlükle çalışıyorsunuz ve görüntü işleme yazılımınız bunun için tasarlandı (ve hatta tüm bunları paralellikle kullanıyor olabilir). Ön işleme yapmak için yüz milyon küçük CPU kullanıyor olmanız sizi etmiyor - sadece birçok küçük işlemcide karmaşık işlemi yapıyor. Ve 2D kağıda çizmeyi unutmayın - bu kendi başına vardır olmak, en azından . 0 ( n )O(1)O(n)
Luaan

9
Bahsedildiğinden emin değil, ancak insan beyni bir SISD von Neumann tipi bilgisayar sisteminden çok farklı şekilde çalışıyor. Buradaki bilhassa ilgili olan, benim anladığım gibi, insan beyninin içsel olarak paralel olması ve özellikle duyusal uyaranların işlenmesi söz konusu olduğunda: aynı anda birçok şeyi duyabilir, görebilir ve hissedebilir ve (kabaca, yine de farkında) olabilirsiniz. hepsi aynı anda. Yorum yazmaya yoğunlaşıyorum ama masamı, bir kutu soda, kapımda asılı ceketim, masamdaki kalem vb. Görüyorum. Beyniniz aynı anda birçok noktayı kontrol edebilir.
Patrick87

Yanıtlar:


115

Zihinsel olarak yaptıklarınızla ilgili modeliniz yanlış. Aslında, iki adımda çalışırsınız:

  1. zamanda çok uzaktaki tüm noktaları kaldırın .O(1)
  2. zamanında , yaklaşık olarak yakın olan noktalarını ölçün .Θ ( m )mΘ(m)

Eğer pétanque (kaseler) veya kıvrık gibi oyunlar oynadıysanız, bu aşina olmalıdır - hedeften çok uzaktaki nesneleri incelemenize gerek yoktur, ancak en yakın yarışmacıyı ölçmeniz gerekebilir.

Bu noktayı göstermek için, hangi yeşil nokta kırmızı noktaya en yakındır? (Yalnızca 1 pikselin biraz üzerinde, ancak en yakın olanı var.) İşleri kolaylaştırmak için, noktalar bile renk kodluydu.

bir nokta bulutu

Bu resim, neredeyse bir çember üzerindeki puan ve toplamda yeşil nokta içermektedir. 1. adım, noktası dışındakilerin hepsini ortadan kaldırmanıza izin verir , ancak 2. adım, noktalarının her birinin kontrol edilmesini gerektirir . A priori giden yoktur .n 10 m m mm=10n10mmm

Fiziksel bir gözlem, sorun boyutunu tüm nokta kümesinden, kısıtlı aday nokta kümesine daraltmanıza izin verir . Bu adım, genel olarak anlaşıldığı gibi bir hesaplama adımı değildir, çünkü sürekli bir sürece dayanmaktadır. Sürekli süreçler, hesaplama karmaşıklığı ve özellikle de asimptotik analiz hakkındaki olağan sezgilere tabi değildir.mnm

Şimdi, neden sürekli bir süreç sorunu tamamen çözemiyor? Bu noktalarına nasıl geliyor , neden e ulaşmak için süreci iyileştirmiyoruz ?m = 1mm=1

I oluşur için oluşturulur noktaları kümesi sunulmaktadır: cevap biraz hile olmasıdır neredeyse yakın noktaları ve daha puanları vardır. Genel olarak, hangi noktaların kesin bir sınır dahilinde olduğunu belirlemek, nokta nokta yapılması gereken hassas bir gözlem gerektirir. Kaba bir eleme süreci, bariz aday olmayan birçok adayı dışlamanıza izin verir, ancak yalnızca hangi adayların kaldığına karar vermek, bunları numaralandırmayı gerektirir., n - mmnm

Bu sistemi ayrık ve hesaplamalı bir dünyada modelleyebilirsiniz. Noktaların bunları bir ızgaradaki hücrelere ayıran bir veri yapısında temsil edildiğini varsayalım, yani nokta hücre için bir listede depolanır . en yakın noktaları arıyorsanız ve bu noktayı içeren hücre en fazla bir nokta içeriyorsa, bu hücreyi ve çevresindeki 8 hücreyi kontrol etmeniz yeterlidir. Bu 9 hücredeki toplam nokta sayısı . Bu model, insan modelinin bazı temel özelliklerine saygı duyar:( x , y ) ( x 0 , y 0 ) m,(x,y)(x,y)(x0,y0)m

  • m potansiyel olarak sınırlandırılmamıştır - örneğin bir dairede yatan noktaların mesela dejenere kötü bir durumu her zaman mümkündür.
  • Pratik verimlilik, verilere uygun bir ölçek seçilmesine bağlıdır (örneğin, noktalarınız bir kağıt parçası üzerindeyse ve hücreleriniz 1 km genişliğinde ise hiçbir şey kaydetmezsiniz).

9
Dahası, tüm grafikler ovaya yansıtılamaz, böylece Euklidian mesafeleri grafikteki mesafelerle eşleşir (örneğin, kenar ağırlıkları metrik oluşturmuyorsa).
Raphael

5
@Raphael Soruyu grafik teorisinden ziyade hesaplama geometrisi ile ilgili olarak anladım, fakat bu gerçekten de ek bir komplikasyondur.
Gilles

2
@ Gilles Yapıldı . Hesaplama geometrisi terimini daha yeni öğrendim .
gerrit

2
Bu bir nitelite olabilir, ne göstermeye çalıştığınızı anlayabiliyorum, ancak renk körü köründe "kırmızıya en yakın yeşili seç" olarak, hangi noktaların hangisi olduğu hakkında kafa çizilmeye neden oluyor. Gelecekte düşünmeniz gereken bir şey var - kırmızı / yeşil dışındaki diğer renk kombinasyonlarını seçin!
tpg2114 18.04.2014

3
@ tpg2114 Unutma kırmızı / yeşil, renk körlüğünün tek türü değildir. Şeklinde (veya renkten başka herhangi bir nitelik) göstermek, "kırmızı / yeşil dışındaki diğer renk kombinasyonlarından" daha fazla kapsayıcı olacaktır.
Jonathan Van Matre

42

Bunun nedeni, verinin bu sorgu için optimize edilmiş bir "veri yapısına" konulması ve grafiğin hazırlanmasında ön işleme süresinin, nokta sayısıyla orantılı olarak ölçülen sürelerinize dahil edilmesi ve bir O (n) verilmesidir. tam burada karmaşıklık.

Koordinatları, her bir noktanın X ve Y koordinatlarını listeleyen bir tabloya koyarsanız, noktalar arasındaki mesafeleri hesaplamak için çok daha büyük bir zihinsel çaba gerektirir, mesafelerin listesini sıralayın ve en küçük olanı seçin.

Görsel olarak iyi çalışmayan bir sorgu örneği olarak, gece gökyüzüne bakmak ve - sadece sizin görüşünüze ve her bir yıldızın koordinat tablosuna dayanarak - Dünya'ya en yakın yıldızı veya hangi astrolojik işaretin en küçük mesafeye sahip olduğunu bulmak olabilir. Oluşan yıldızlar. Burada, bir bilgisayarın bunu aslınızla aynı problem olarak kabul edeceği yeri görsel olarak belirlemek için yakınlaştırılabilir ve çevrilebilir bir 3B modele ihtiyacınız olacak.


2
+1 - Tam olarak bu noktayı yapan birini aramak için aşağı kaydırıyordum. Gelen bir verinin gösterimi önemlidir - sıralanmamış bir listenin ortancasını sıralanmamış bir listeye göre bulmaya çalışın!
cloudfeet,

21

O(1)O(1)


8
Bir daire boyunca milyarlarca nokta koyduğunuzu, ancak hepsinin biraz tedirgin olduğunu hayal edin, böylece puanlarınız bulanık görünümlü bir halka oluşturur. Merkeze göz ile en yakın noktayı bulmak için, tüm noktaları birer birer kontrol etmekten daha iyi yapabileceğinizi anlamıyorum.
Nick Alger

4
@NickAlger Bu yüzden O(numberOfPointsAboutTheSameDistanceFromTheTargetPointAsTheClosestPoint)mutlaka ile ilgili değil, gibi n. Her iki durumda da, bunun bir cevabının, insan zihninin onu nasıl algıladığı ve sorguladığı anlamında olası veri yapılarını sunması gerektiğini düşünüyorum. Basitçe söylemek gerekirse O (1) hissettiriyor ... tembel? yetersiz?
Dukeling

5
@Dukeling O (bir şey) en kötü duruma işaret eder. İnsan beyninin sürekli olarak yapamayacağı herhangi bir düzen varsa, o zaman kesinlikle O (1) değil. İnsan beyninin X noktalarını sabit sürede işleyebileceği, ancak X * 2 noktalarını hiç işleyemediği bir X sınırı varsa, o zaman O (1) değildir.
Peteris

3
@Dukeling Gerektiğinde n'e bağlıdır, çünkü en kötü durumda n'ye eşittir ve eğer isteğe bağlı puanlar verirseniz, C * n işlemlerinden daha hızlı yapmanın imkansız olacağını beklemeniz gerekir.
Peteris

2
@Peteris Sanırım "zorunlu olarak n'ye bağımlı olmanın" ne anlama geldiği ve en yakın üst sınırın nasıl belirleneceği konusunda hemfikir değiliz.
Dukeling

15

Görsel denetimin üstünlüğü, genel olarak garanti edilemeyen önemli tesislere dayanır:

  • O(n)

  • count : (bkz. Nick Alger'in DW tarafından verilen cevap üzerine yaptığı yorum), retinal hücrelerin sayısını aşan bir puan saydığını farzediyor - dahil olan tüm puanları bile tanımlamayacaksınız.

  • varyans : (bkz. Nick Alger'in DW tarafından verilen cevap üzerine yaptığı yorum), küçük rastgele bozulmalara maruz kalan normal (örneğin altıgen) bir ızgara üzerinde bir takım noktaları varsayar. eğer bu bozulmalar retinanın çözünürlüğünden (veya diğer üst üste binen ızgaraların) çözünürlüğünden daha az olursa, yalnızca gerçek minimum mesafeyi saptamakla kalmaz, aynı zamanda yüksek olasılıkla yanlış nokta çiftleri seçersiniz.

O(n)O(1)


1
O(n)O(log(n))

O(n)nO(nlogn)n

15
  1. Bilgisayar farklı bir problem çözüyor. Noktaların rasterleştirilmiş bir görüntüsünü değil, bir puan listesini alır . Bir listeden bir resme dönüştürme, yani “noktaları” çizme O(n)zaman alır .

    Hızlı! Hangisine en yakın (1,2):

    • (9, 9)
    • (5, 2)
    • (3, -2)
    • (4, 3)
    • (0, 4)
    • (1, 9)

    Çok daha zor, değil mi? Bahse girerim, listeyi iki defa daha uzun yaparsam, iki defa daha fazla iş yapmanız gerekecek.

  2. Beyninin ne kadar çalıştığını bilmiyorsun. Hangi noktanın daha yakın olduğunu "bilmezsin". Beyniniz, bu cevabı bulmak ve kullanılabilir kılmak için hesaplamalı çalışmalar yapıyor. Beyin her noktada paralel olarak çalışır, bu yüzden bitirme zamanı kabaca aynı kalır, ancak gereken iş miktarı hala puan sayısıyla artar.


13

Aynı nedenle, bir üçgene baktığınızda ve bir üçgen olduğunu bildiğinizde, fark etmeden yaptığınız milyonlarca hesaplamayı unutmuş olursunuz.

Nöral ağlar

Aslında, veri yığınları üzerine eğitilmiş ve kitlelerle yüklenen sinirsel bir ağsınız.

Bebek şekli sıralama oyununu örnek olarak alın:

görüntü tanımını buraya girin

Bir çocuk ilk önce bununla etkileşime girdiğinde, yanlış deliklere şekiller yerleştirmeye çalışacak olmaları muhtemeldir, bunun nedeni beynini henüz eğitmemiş olmaları ya da ağlar oluşturmak için yeterli veriyle karşılaşmalarıdır. Hangi şekle deliğe uyacağını belirlemek için kenarlar, büyüklük, vs. gibi varsayımlar yapamazlar.

Bu sizin için bariz gözüküyor (umarım) çünkü bu bağlantıları kurmuşsunuzdur, hatta sezgisel olduğunu ve kopması gerekmeyeceğini düşünebilirsiniz, örneğin sadece üçgenin üçgene uyduğunu ve boyuta yaklaşmanız gerekmediğini biliyorsunuzdur. , kenarları saymak, vb. Bu doğru değil, tüm bunları bilinçaltınızda yaptınız, sahip olduğunuz tek bilinçli düşünce onun bir üçgen olduğuydu. Milyonlarca hesaplama, görsel bir temsil almak, neyi temsil ettiğini anlamak, tek tek öğelerin ne olduğunu anlamak ve sonra onların mesafelerini tahmin etmekten kaynaklanıyordu, bu da anketi sorgulamak için büyük bir bilgi veritabanına sahip olduğunuz gerçeğini basitleştirdi.

Beynin ikili değil

Beyninizin çalıştığı veriler ikili değildir (bildiğimiz kadarıyla), doğru veya yanlış değildir, verileri yorumlamak için kullandığımız birçok durumu tutar, doğru olanı takip etsek bile sık sık yanlış şeyler yaparız. işlem, bunun nedeni verilerin sık sık değişmesidir. Beyinlerimizin, bitlerin okunana kadar yaklaşık bir durumda olduğu kuantum bilgisayar gibi çok daha fazla işlev gördüğü tahminini tehlikeye atardım. Yani, eğer beynimiz bir bilgisayar gibi çalışıyorsa, gerçekten bilinmemektedir.

Dolayısıyla, ikili verilerle çalışmak için bir algoritma aynı şekilde çalışmayacaktır. İkisini karşılaştıramazsın. Kafanızda, çok daha fazla bilgi içeren zengin veri türlerini gerçekleştirmek için kavramlar kullanıyorsunuz, açıkça tanımlanmadıkları yerlerde bağlantılar kurma yeteneğiniz var; bir üçgen gördüğünüzde ayın örtüsünün Pink Floyd'un Karanlık tarafını düşünebilirsiniz.

görüntü tanımını buraya girin

Dağılım grafiğine geri dönersek, bunu bir bitmap kullanarak ve başka bir noktayla karşılaşana kadar artan yarıçaptaki bir noktadan mesafeyi ölçerek bir bilgisayarda bunu yapamamanızın hiçbir nedeni yoktur. Muhtemelen bir insanın yaklaşımına yaklaşabileceğin en yakın şey. Veri sınırlaması nedeniyle ve beyinlerimizin hesaplama karmaşıklığını önemsemediği ve işleri yapmak için karmaşık bir yol izlemesi gerekmediğinden daha yavaş olması muhtemeldir.

N, nokta sayısı ise O (1), hatta O (n) olmaz, bunun yerine karmaşıklığı şimdi seçilen noktadan görüntünün sınırına kadar olan maksimum doğrusal mesafeye bağlıdır.

tl; Dr.

Beynin ikili bir bilgisayar değil.



8

önemli bir adımı unutuyorsunuz: tüm bu noktaları bakmakta olduğunuz grafik üzerine çiziyorsunuz.

bu zorunlu olarak bir O (n) işlemidir.

Bundan sonra, bir bilgisayar, insan gözüyle aynı şekilde merkeze en yakın yaklaşık noktaları bulmak için görüntü tanıma yazılımını kullanabilir. Bu bir O (sizeOfImage) işlemi en kötü durumudur.

bir insanın bilgisayarla aynı şeyi yapması için, bilgisayarın bir koordinat listesi aldığını ve sadece bir tanesine bakabileceğini unutmayın.


1
Eğer biri sabit bir "çözünürlük" seçerse, bunları çizmek ve ilgilenilen noktaya "yakın" olan tüm noktaları tanımlamak için, nokta başına zaman O (log (çözünürlük)) olan bir algoritma kullanabilirsiniz. O (log (özünürlük)), noktaları kağıda tam olarak çizmenin daha az kesin olarak yapmasından daha uzun sürmesi gerçeğine tamamen benzemektedir. Ayrıca, çözünürlüğün artırılmasının, aday olmayan noktaları elimine etmek için algoritmaların puan başına maliyetini artıracağını, ancak en yakın noktadan kurtulan noktaların elimine edilmesini azaltacağını unutmayın.
supercat,

7

Benim soru yorumum:

Bu sorunun basit bir şekilde hesaplamalı bir geometri karmaşıklığı sorunu olarak ele alınacağına inanmıyorum. Şunu söyleyerek daha iyi anlaşılmalıdır: cevabı bulabildiğimiz zaman, sürekli zamanda bulma yeteneğini algılarız. Bu algıyı açıklayan ve bu açıklamaya ve insan sınırlamalarına kadar bir bilgisayar da yapabilir.

O(1)O(log(n))

Bu, algımızın gerçek fiziksel ölçünün logaritmik bir ölçeğinde ölçülmesi gerektiğini belirten Weber-Fechner yasaları ile güçlendirilebilir . Başka bir deyişle, mutlak varyasyonlardan ziyade nispi varyasyonları algılıyoruz. Bu, örneğin ses yoğunluğunun desibel olarak ölçülmesinin nedenidir.

O(log(n))Oψ(log(log(n)))Oψ

Oψ(log(log(n))) tüm pratik amaçlar için muhtemelen bir sabitden algısal olarak ayırt edilemez ve bu tanıma sürecini başlatmak ve sonucu onaylamak için buna bir süre daha eklenmesi gerekir.

Fizyolojik sınırlamaları dikkate alarak

Görüntü elde etme adımları göz önüne alındığında, yukarıdaki sonuç daha da sürdürülmektedir.

OP, birkaç sorguda itfa edilen “dörtlü gibi” uygun bir veri yapısının inşasını ayırma konusunda dikkatliydi.

Bu, görüntüyü ezberlemeyen çoğu insan için işe yaramaz. Görüntünün her sorgu için tarandığını düşünüyorum, ancak bu tüm noktaları taramak anlamına gelmiyor: ilk kez değil, sonradan sorgular için değil.

TscanTscan

mOψ(log(log(m)))

227log2(27)

Kullanılacak gerçek birimleri bilmeden, bu sadece işleme için varyasyonun diğer sabit zaman işlemleri ile aynı sırada en kötü durumda olduğunu gösterir. Bu nedenle, en yakın noktayı bulmak için algılanan zamanın sabit kalması oldukça doğaldır. . . En yakın noktayı mı yoksa yalnızca bir yakın nokta kümesi mi belirlediğimizi.

Karşı örnekler ve olası bir çözüm hakkında

Kuşkusuz, yakın noktaların küçük bir koleksiyonu arasında en yakın noktanın gözlerinin belirlenmesini zorlaştıran karşı örnekler oluşturmak kolaydır. Bu nedenle OP, en yakınları hariç, çoğu noktayı hızla ortadan kaldıran bir algoritma istiyor. Birkaç yakın nokta arasından seçim yapmanın muhtemel zorluğuna dair bu sorun birçok cevapta ele alınmaktadır; Genellikle Weber-Fechner yasaları, küçük mesafe değişimlerini yeterince uzun mesafelerden ayırt edebilmeyi önler. Bu etki aslında, ortadan kaldırılmasına rağmen mesafelerin algılanmasını bozabilecek başka noktaların varlığıyla arttırılabilir. Bu yüzden en yakın noktayı belirlemeye çalışmak daha zor bir iş olacaktır. ve sabit zaman duygusunu tamamen yok edecek aletleri kullanma gibi özel sınav adımları gerektirebilir. Ancak OP tarafından değerlendirilen deneylerin dışında açıkça görünüyor, bu nedenle pek ilgili değil.

Aslında OP'nin sorduğu soru olan cevaplanacak soru, muhtemelen referans noktasına çok benzeyen uzak mesafeler dışında kalan noktaların çoğunu ortadan kaldırmanın bir yolu olup olmadığıdır.

O(log(n))

İtfa edilmiş maliyeti reddetmek, tüm noktalara bakmak zorunda olduğu için bilgisayar çözümüne izin vermez. Bu, beynin ve insan algısının bilgi işlem gücünde büyük bir farkın altını çiziyor: Analog hesaplamayı dijital hesaplamanın oldukça farklı olan özellikleriyle kullanabilir . Bu genellikle, milyarlarca noktanın gözle ayırt edilemediği, farklı karanlık tonları olan büyük bir buluttan başka bir şey görme çözünürlüğüne sahip olmadığı durumdur. Ancak göz daha sonra ilgili küçük parçaya odaklanabilir ve ilgili olanları içeren sınırlı sayıda nokta görebilir. Tek tek tüm noktaları bilmek zorunda değildir. Bir bilgisayarın aynısını yapması için, her bir noktanın kesin sayısal koordinatlarından ziyade ona benzer bir sensör vermeniz gerekir. Bu çok farklı bir problem.

"Mere görsel denetim" bazı bakımlardan dijital hesaplamaya göre çok daha güçlü. Ve ayrıca, beynin muhtemelen daha büyük bir hesaplama gücüne değil, sensörlerin fiziğine de bağlıdır.


O(1)O(logn) O(1)O(1)O(logn)Görevi algılamanın ötesinde bir görevi çözdüğünüzde, örneğin belirli bir sayıyı etiketli düğümleri olan dengeli bir ikili yığının grafiksel gösterimi içinde bulmak. Algısal sınırlamaların yalnızca grafikleri yerel olarak incelediğinizden önemli olmadığını unutmayın.
collapsar

n

Oψ(log(log(n)))

4

Bir diziyi ne kadar hızlı sıralayabildiğiniz sorulduğunda, bilgisayarların aptal olduğunu iddia eden ve n * log (n) (veya daha kötüsü) gerektiren, insanlar daha hızlı yapabildiği sınavlarda öğrencilerimiz oldu.

Profesörümün cevabı her zaman oldu: 10.000 öğenin bir listesini vereceğim. Bakalım bir bilgisayarın yapabileceğinden daha hızlı bir yöntem bulabilecek misiniz?

Ve sonra: En yakın noktayı bulmaya çalıştığınızda kaç işlem çekirdeği katılır? Tek işlemcili bir makine değilsin, sinirsel bir ağın var, böyle işler söz konusu olduğunda biraz esnekliğe sahip.


1
Ayrıca, veriler hakkında bildiklerinizin çeşitli yönlerini ve sıralama yapmanız gerektiğinde kullanabileceğiniz kaynakları kullanabilirsiniz. Örneğin, eğer öğrenci arkadaşlarınızın odaya tamamen sığamayacak bir şeyi sıralaması gerekirse.
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen: Bu kadar önemli uzay karmaşıklığı anlamak için güzel bir hayvan 8 ^) "odasında tamamen sığamaz şey" olduğunu
Zane

3

@ Patrick87'nin size ipucu verdiğine inanıyorum: gözleriniz ve beyniniz büyük ölçüde paralel bir hesaplama makinesi. Bazıları bunun sorunu açıklamadığını, çünkü keyfi olarak büyük sorunlar için sınırlı sayıda paralel işlemcinin bir fark yaratmadığını savundu.

Fakat burada: birçoğunun ima ettiği gibi, gözlerin (ve beynin) bu sorunu çözme konusunda sınırlı bir kapasiteye sahip; ve bunun, normal bir insan bakış açısı içinde hiç bir noktaya sığamamasıdır. Gözleriniz bir başlangıç ​​için onları ayırt edebilmelidir ve çok fazla varsa, o zaman gözleriniz arasındaki farkı fark etmeyecek kadar yakın olacaklardır. Alt satır: normal görüşünüze uyan yeterince iyi noktalar için hızlı, yani çok az. Diğer durumlarda başarısız olur.

Böylece beyninizin bir esinti içinde işleyebileceği küçük ve basit durumlar için bu sorunu O (1) 'de çözebilirsiniz. Bunun ötesinde, olamaz ve bu nedenle, O ( hiçbir şey ) bile değildir, çünkü büyük olasılıkla başarısız olur.


1

Hiç kimse bu sorunun uzaysal indeksli bir bilgisayarda çok hızlı bir şekilde çözülebileceğinden bahsetmedi. Bu, gözlerinizin hızlı bir şekilde taranması ve noktaların çoğunu ortadan kaldırması için görüntüdeki noktaları çizmenin eşdeğeridir.

Geohash denilen en yakın noktaları bulmak için Google ve diğerleri tarafından kullanılan çok iyi bir indeksleme algoritması vardır. http://en.wikipedia.org/wiki/Geohash .

Bunun bilgisayar yarışması için bile yarışma olacağını düşünüyorum. Doğrusal düşünceyi kullanan bazı cevaplardan etkilenmedim.


Θ(n) Θ(lgn)

Mesele, mekansal bir indeksin kabaca noktalarla çevrili bir ekrana bakan bir insan için olduğu kadar kolay hale getirdiğidir.
reinierpost

1

Öklid uzayında n-boyut kümesinde en yakın komşular bulmayı düşünürsek, karmaşıklık tipik olarak büyüdükçe boyutların sayısıyla sınırlıdır (yani veri kümesinin boyutundan daha büyük).

O(logd2n)

Bir grafikteki bir düğüme en yakın noktayı bulma problemi, grafik yeterince küçük bir bozulma ile Euclid uzayına gömülebildiği zaman bir Öklid ifadesine sahiptir. Ve ağırlıklarla birlikte bir bitişik liste kullanarak, yine de bitişik bir liste yapmamız gerekiyor.

O(1)


-1

Diğer cevaplar iyidir ama nasıl bazı kusurluluk göstermek için aşırı orijinal sorunun temel akıl yürütme / önermeyi uzanıyor [aynı zamanda özünde paradoks zen sayaç soru hakkında AI araştırma ]:

İnsan zekası ile düşünebiliyorsam, neden insan kadar düşünen bir bilgisayar oluşturamıyorum?

Sorunuzu yanıtlamanın birçok yolu vardır, ancak temel olarak, düşünce süreçlerimiz ve beyin algısal yeteneklerimiz iç gözlem için mutlaka erişilebilir değildir ve onlara uyguladığımız iç gözlem yanıltıcı olabilir. örneğin, nesneleri tanıyabiliriz ancak buna izin verecek yarı-algoritmik süreci algılamak / açıklamak için hiçbir yolumuz yoktur. Ayrıca, gerçeklik algılarımızda ve özellikle de zaman algımızdaki ince çarpıtmaların olduğunu gösteren birçok psikoloji deneyi vardır, örneğin zaman algılamaya bakınız .

Genel olarak bilim adamları tarafından insan beyninin aslında algoritmalar kullandığı, ancak bilgisayarlı olanlardan farklı işlev gördüğü düşünülmektedir / tahmin edilmektedir , ayrıca beyinde sinir ağları ile hassas bir şekilde karşılaştırılamayan çok büyük miktarda paralel işlem vardır . sıralı bilgisayar algoritmaları. memelilerde, tüm beyin hacminin önemli bir yüzdesi görsel işlemeye adanmıştır.

Başka bir deyişle, insan beyni birçok yönden yüksek düzeyde optimize edilmiş görsel bilgisayarlardır ve aslında birçok yönden, nesnelerin tanınması vb. İnsan yapımı yazılım / donanımda, milyonlarca yıl boyunca yüksek oranda ayarlanmış / geliştirilmiş / optimize edilmiş biyolojiye kıyasla.


O(f(n))

-2

Genel olarak konuşmak gerekirse, iki farklı problemi çözüyorsunuz ve aynı rekabette yarışırsanız, karmaşıklık her ikiniz için de O (1) olacaktır. Neden? Durumu biraz daha basitleştirelim - bir kırmızı nokta ve n yeşil noktalara sahip bir çizginiz olduğunu varsayalım. Göreviniz kırmızı noktaya en yakın yeşil noktayı bulmak. Her şey grafikte. Şimdi ne yapıyorsanız ve ne yapıyorsunuz temelde aynıdır - sadece kırmızı noktadan (her iki yöne de) yürüyün ve baktığınız pikselin beyaz / siyah (arka plan) veya yeşil olup olmadığını kontrol edin. Şimdi karmaşıklık O (1).

İlginç olan, bazı veri sunum yöntemlerinin bazı sorulara derhal cevap vermesidir (Ö (1)). Temel örnek son derece basittir - sadece siyah görüntüdeki beyaz pikselleri sayın (her piksel değeri 0 = siyah veya 1 = beyaz). Yapmanız gereken sadece tüm piksel değerlerini eklemektir - karmaşıklık 1 beyaz piksel ve 1000 için aynıdır, ancak resim boyutuna bağlıdır - O (m), m = image.width * image.height. Daha hızlı yapmak mümkün mü? Tabii ki, tek yapmamız gereken, bütünleşik imaj olan görüntüleri saklamak için farklı bir yöntem kullanmaktır : görüntü tanımını buraya girin Şimdi sonucu hesaplamak O (1) 'dir (eğer hesaplanmış bütünleşik bir görüntünüz varsa). Başka bir yol da tüm beyaz pikselleri dizi / vektör / list / ... dizininde saklamak ve sadece büyüklüğünü saymaktır - O (1).


O(1)O(1)

@ FrankW - "çekip gitmenin" karmaşıklığı nedir? Yanıldığını söylemeye çalışmıyorum, sadece bilmek istiyorum. Dizi / vektör / listenin büyüklüğünü saymak - genellikle dizi büyüklüğü sabittir, bu yüzden saymaya gerek yoktur, vektör - emin değilim, uygulamaya bağlı olduğunu söyleyebilirim (ancak çoğu uygulamada sadece alanın bir nesneyi saymaya gerek kalmaz), liste - haklısın, O (1) değil - hatam.
cyriel

kkO(#pixels)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.