SORU
16 AĞUSTOS 2010, PAZARTESİ


Kolay mülakat zor soru var: 1..100, eksik numaraları bulmak verilen numaraları

İlginç bir iş görüşmesi deneyimi bir süre önce vardı. Bu soru gerçekten çok kolay:

Q1Bir torba numaraları1, 2, 3, ..., 100. içeren var Her sayı tam olarak bir kez görünür, 100 sayı vardır. Şimdi rastgele bir çanta seçti. Eksik numarasını bulun.

Bu görüşmeden önce, tabii ki soru duydum, ben çok çabuk hatları boyunca cevap verdi:

A1: Sayılar 1 2 3 … N toplamı (N 1)(N/2) (Wikipedia: sum of arithmetic series). N = 100, miktar 5050.

Eğer tüm numaraları çanta varsa Böylece, toplamı tam olarak 5050 olacak. Bir sayı eksik olduğu için, bu miktar daha az olacak ve fark sayıdır. O(N) O(1) uzayda kayıp parça buluruz.

Bu noktada iyi bir şey yaptığımı sanıyordum, ama aniden soru beklenmedik bir hal aldı:

S2: Doğru, ama şimdi bunu nasıl olursa yaparsınİKİnumara eksik?

Asla/Ben de panikledim/önce bu değişimi kabul duydum, gördüm ve bu soruya cevap veremedi. Görüşmeci ısrar bilmek benim düşünce süreci, yani bahsettiğim belki alabiliriz daha fazla bilgi ile karşılaştırarak karşı beklenen ürün, ya da belki de ne bir saniye geçtikten sonra toplanmış olan bazı bilgiler ilk pas, vb, ama gerçekten sadece çekim karanlık yerine aslında sahip net bir yol çözümü.

Görüşmeci ikinci bir denklem olması gerçekten sorunu çözmek için bir yol olduğunu söyleyerek beni teşvik etmek için elinden geleni yaptı. Bu noktada ben biraz üzgün (bilmeden cevap önce el), ve istenirse bu bir genel (okuma: "yararlı") programlama tekniği, ya da eğer sadece bir hile/yakaladım cevap.

Görüşmeci cevabı beni şaşırttı: tekniği 3 eksik numaraları bulmak için genelleme yapabilirsiniz. Aslında, onu bulmak için genelleme yapabilirsinizkeksik sayılar.

QkKesinlikleknumaraları çantasından eksik, nasıl verimli bulmak istiyorsunuz?

Bu birkaç ay önce oldu, ve ben hala bu tekniğin ne olduğunu anlayamadı. Belli ki Ω(N) Bir kez tüm sayıları en az bir kez tarama etmeliyiz beri alt sınır var, ama görüşmeci için ısrar ettiZAMANveBOŞLUKçözme tekniği (O(N) zaman giriş eksi tarama) karmaşıklığı tanımlanırkdeğilN.

Yani burada soru basit:

  • Nasıl çözersinS2?
  • Nasıl çözersinQ3?
  • Nasıl çözersinQk?

Açıklamalar

  • Genellikle vardırN1. sayılarNsadece 1..100.
  • Bakmıyorum belirgin kümesi tabanlı bir çözüm, örneğin kullanarak bir bit set kodlama varlığı/yokluğu her sayı değeri belirlenmiş bit, bu nedenle kullanarak O(N) bit ek alan. Herhangi bir ek alan ile orantılı göze alamayızN.
  • Ayrıca sıralama-ilk belirgin yaklaşım aramıyorum. Bu ve küme tabanlı bir yaklaşım, bir röportajda (uygulamak kolay değildir ve bağlı olarak . gerçekten övgüye değer ^em>Nolabilir , çok pratik. Kutsal Kase çözüm olabilir ya da uygulamak için pratik olmayabilir, ama yine de istenen asimptotik özelliklere sahip olan) arıyorum.

Yani yine, tabii ki sana O(N), ama sadece küçük bilgi miktarı çekebilirsiniz (açısından tanımlanmış . giriş tarama gerekir ^em>kdeğilNve sonra bulmak gerekirkeksik sayılar bir şekilde.

CEVAP
16 AĞUSTOS 2010, PAZARTESİ


İşte Dimitris Andreou's link bir özet.

Ben-inci güçlerin toplamı unutma, i=1,2,..,k) nerede. Bu denklem sistemini çözmek için sorun azaltır

bir1bir2... birk= b1

bir12bir22... birk2= b2

...

bir1kbir2k... birkk= bk

Kullanarak 18**, b bilerekbenyardımcı oluyor

c1= bir1bir2... birk

c2= bir1bir2bir1bir3... birk-1birk

...

ck= bir1bir2... birk

Eğer polinom genişletin (x-a1)...(x-ak) katsayıları tam olarak c olacak1, ..., ck- Viète's formulas bkz. Her polinom faktörler benzersiz (polinomların halkası Euclidean domain) beri, bu bir araçbenbenzersiz belirlenir, permütasyon.

Bu hatırlama güçlerini numaralarını kurtarmak için yeterli bir kanıt biter. Sabit k için, bu iyi bir yaklaşım.

K değişen, ancak bilgisayar doğrudan yaklaşım c1,...,ckprohibitely pahalı, örneğin beri ck,/tüm eksik numaraları büyüklüğü n! ürünüdür(n-k)!. Bunun üstesinden gelmek için, Z hesaplamaları yapmaksq n < gibi bir başbakan olduğu alan; A= S &; 2n - Bertrand's postulate var lt. Kanıt formülleri kıpırdama beri değişmiş olması gerekmez, ve polinomların çarpanlara ayırma hala benzersizdir. Ayrıca, sonlu cisimler üzerinde çarpanlara ayırma, örneğin Berlekamp Cantor-Zassenhaus biri için bir algoritma lazım.

Yüksek seviye sabit k yarı:

  • Ben-inci sayıların güçlerini hesaplamak
  • I-th bilinmeyen numaralar güçleri toplamı almak için çıkarın. Toplamları b Araben.
  • Newton kimlikleri b katsayıları hesaplamak için kullanınben; onları Ara cben. Temelde, c1= b1; c2(c . = ^alt>1b1- b2)/2; kesin formüller için lazımdır
  • Faktör polinom xk-c1xk-1... ck.
  • Polinom kökleri gereken bir sayı1, ...,k.

K değişken için, n n <=&; 2n Miller-Rabin örneğin kullanarak, ve bütün numaraları adımları gerçekleştirin q lt azaltılmış mod q.

Heinrich Apfelmus açıklamalı olarak kullanabileceğiniz bir başbakan yerine q=2 q⌈günlük n⌉ve arithmetic in finite field gerçekleştirin.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 2ndfloor91

    2ndfloor91

    17 Kasım 2007
  • Abe Olandres

    Abe Olandres

    16 EYLÜL 2006
  • HouseholdHacker

    HouseholdHac

    6 Kasım 2007