SORU
5 EKİM 2012, Cuma


1 milyon 8 haneli RAM 1MB numaraları sıralama

RAM 1M ile bir bilgisayar ve başka bir yerel depolama var. 1 milyon 8 haneli bir TCP bağlantısı üzerinden ondalık sayılar kabul etmek, sıralamak ve sıralanmış listesini başka bir TCP bağlantısı üzerinden göndermek zorundayım. Numaralar listesine atmak zorundayım olmayan çiftleri içerebilir. Kod 1M benim kod boyutunu çıkarmak lazım değil o yüzden ROM yer olacak. Ben zaten ethernet port sürücü ve TCP/IP bağlantıları işlemek için kod var, ve hangi aracılığıyla Kodu ve veri okuma ve yazma 1k bir tampon da dahil olmak üzere devletin kendi verileri için 2k gerektirir. Bu sorun için bir çözüm var mı?

Soru-Cevap Kaynaklar:
slashdot.org

cleaton.net

CEVAP
25 EKİM 2012, PERŞEMBE


Sorunu çözer Here's some working C code.

Bellek kısıtlamaları memnun olduğunun kanıtı:

Editör:Maksimum bellek gereksinimlerini de onun bloglarda bu yazı veya yazar tarafından sunulan kanıt yok. Bit değeri kodlamak için gereken bir dizi değerleri, daha önce kodlanmış bağlı olduğundan, bu tür bir kanıt muhtemelen önemsiz değil. Yazar, deneysel olarak takılmaları olabilir büyük kodlanmış boyutu 1011732, ve Tampon boyutu 1013000 keyfi olarak seçtiğini belirtiyor.

typedef unsigned int u32;

namespace WorkArea
{
    static const u32 circularSize = 253250;
    u32 circular[circularSize] = { 0 };         // consumes 1013000 bytes

    static const u32 stageSize = 8000;
    u32 stage[stageSize];                       // consumes 32000 bytes

    ...

Birlikte, bu iki dizi depolama 1045000 bayt al. Bu 1048576 - 1045000 - 2&kez;1024 = 1528 kalan değişkenler için bayt ve yığın alanı bırakır.

"Çok çekirdekli benim W3520 yaklaşık 23 saniye içinde çalışır. Programı aşağıdaki Python betiği kullanarak çalışan, sort1mb.exe program adı varsayarsak doğrulayabilirsiniz.

from subprocess import *
import random

sequence = [random.randint(0, 99999999) for i in xrange(1000000)]

sorter = Popen('sort1mb.exe', stdin=PIPE, stdout=PIPE)
for value in sequence:
    sorter.stdin.write('d\n' % value)
sorter.stdin.close()

result = [int(line) for line in sorter.stdout]
print('OK!' if result == sorted(sequence) else 'Error!')

Algoritma ayrıntılı bir açıklama mesajlar aşağıdaki dizi içinde bulunabilir:

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • hitcreatormusic2

    hitcreatormu

    21 Mayıs 2010
  • sinumatic

    sinumatic

    19 Aralık 2006
  • Yo Mama

    Yo Mama

    18 EYLÜL 2005