none
Criar array com 50.000.000 de posições

    Question

  • Como poderia criar um array com 50.000.000 de posições?

    Alguem tem ideia?
    Thursday, March 11, 2010 10:25 PM

Answers

  • olha... é mais facil se vc espor o problema inteiro do que so uma parte dele... por exemplo:

    ao inves de dizer "Como poderia criar um array com 50.000.000 de posições?" se vc tivesse tido "Eu tenho um vetor de numero inteiros com 50.000.000 posicoes e presciso ordernar os mesmos em ordem decrecente e apresentar na tela" teria sido muito mais facil ^^

    Agora seu professor tmb viajou na maionese... primeiro pq a forma de fazer ordenacao de 1000 é a mesma de 50.000.000 so que tem que ter uma maquina nervosa para order 50.000.000 os meus 4Gb de Ram aqui nao aguentaram.....

    e sem contar q tem framework para isso....

    o metodo que vc usaria na vida real é:
    using System;
    using System.Linq;
    
    namespace ConsoleApplication1 {
        class Program {
            static void Main(string[] args) {
                var aleatorio = CriarVetorAleatorio(50000000);
                for (int i = 0; i < aleatorio.Length; i++) Console.WriteLine("[{0}] - {1}", i, aleatorio[i]);
                Console.WriteLine();
    
                int[] ordenado = aleatorio.OrderByDescending(i => i).ToArray();
                for (int i = 0; i < ordenado.Length; i++) Console.WriteLine("[{0}] - {1}", i, ordenado[i]);
                Console.ReadLine();
            }
    
            static int[] CriarVetorAleatorio(int tamanho) {
                int[] retorno = new int[tamanho];
                for (int i = 1; i < tamanho; i++) {
                    Random random = new Random(i);
                    int index = random.Next(0, retorno.Length - 1);
                    while (retorno[index] != 0) {
                        index++;
                        if (index == retorno.Length) index = 0;
                    }
                    retorno[index] = i;
                }
                return retorno;
            }
        }
    }

    O Metodo "Academico" que o seu professor ta querendo é

    using System;
    using System.Linq;
    
    namespace ConsoleApplication1 {
        class Program {
            static void Main(string[] args) {
                var vetor = CriarVetorAleatorio(50000000);
                WriteArray(vetor);
                Console.WriteLine();
    
                QuickSort(vetor, 0, vetor.Length -1);
                WriteArray(vetor);
                Console.ReadLine();
            }
    
            static void WriteArray(int[] vetor) {
                int i = 0;
                while (i < vetor.Length) {
                    string linha = String.Empty;
                    for (int c = 0; c < 4; c++) {                    
                        Console.Write("[{0}] - {1}  \t", i, vetor[i]);
                        i++;
                        if (i == vetor.Length) break;
                    }
                    Console.WriteLine();
                }
            }
    
            static void QuickSort(int[] items, int left, int right) {
                int i, j;
                int x, y;
    
                i = left; j = right;
                x = items[(left + right) / 2];
    
                do {
                    while ((items[i] > x) && (i < right)) i++;
                    while ((x > items[j]) && (j > left)) j--;
    
                    if (i <= j) {
                        y = items[i];
                        items[i] = items[j];
                        items[j] = y;
                        i++; j--;
                    }
                } while (i <= j);
    
                if (left < j) QuickSort(items, left, j);
                if (i < right) QuickSort(items, i, right);
            }
    
            static int[] CriarVetorAleatorio(int tamanho) {
                int[] retorno = new int[tamanho];
                for (int i = 1; i < tamanho; i++) {
                    Random random = new Random(i);
                    int index = random.Next(0, retorno.Length - 1);
                    while (retorno[index] != 0) {
                        index++;
                        if (index == retorno.Length) index = 0;
                    }
                    retorno[index] = i;
                }
                return retorno;
            }
        }
    }
    

    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    • Marked as answer by Rodrigo Moura Tuesday, March 16, 2010 1:57 PM
    Friday, March 12, 2010 2:34 PM
    Moderator

All replies

  • Não entendi a sua duvida... qual o problema em fazer:

     

    object[] aa = new object[50000000];


    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    Friday, March 12, 2010 1:04 AM
    Moderator
  • Rodrigo,

    Na minha opinião, a necessidade de criar um array desse tamanho demonstra que pode existir algo errado com a sua aplicação. O que esse array irá representar?

    Att.

    Ari C. Raimundo
    MCAD, MCP
    http://araimundo.blogspot.com
    Friday, March 12, 2010 1:50 AM
    Moderator
  • Ari,

    N é um sistema oficial, é um trabalho que meu professor mandou fazermos.

    To começando agora com .NET, queria tentar fazer em c#.

    Rui,

    N tentei fazer assim. Tentei int [] vetor = new int[50000000];

    Queria mostrar o vetor em ordem decrescente, ou seja:

    vetor[1] = 50000000
    vetor[2] = 49000000
    vetor[3] = 48000000
    ...

    Mas n consegui mostrar na tela =/

    Entendeu?
    Friday, March 12, 2010 4:17 AM
  • Na verdade eu tinha que ordenar um vetor de 50.000.000 de posições.

    Ia tentar fazer com shellsort, mas n to nem conseguindo montar o vetor e mostrar na tela. =/
    Friday, March 12, 2010 4:18 AM
  • olha... é mais facil se vc espor o problema inteiro do que so uma parte dele... por exemplo:

    ao inves de dizer "Como poderia criar um array com 50.000.000 de posições?" se vc tivesse tido "Eu tenho um vetor de numero inteiros com 50.000.000 posicoes e presciso ordernar os mesmos em ordem decrecente e apresentar na tela" teria sido muito mais facil ^^

    Agora seu professor tmb viajou na maionese... primeiro pq a forma de fazer ordenacao de 1000 é a mesma de 50.000.000 so que tem que ter uma maquina nervosa para order 50.000.000 os meus 4Gb de Ram aqui nao aguentaram.....

    e sem contar q tem framework para isso....

    o metodo que vc usaria na vida real é:
    using System;
    using System.Linq;
    
    namespace ConsoleApplication1 {
        class Program {
            static void Main(string[] args) {
                var aleatorio = CriarVetorAleatorio(50000000);
                for (int i = 0; i < aleatorio.Length; i++) Console.WriteLine("[{0}] - {1}", i, aleatorio[i]);
                Console.WriteLine();
    
                int[] ordenado = aleatorio.OrderByDescending(i => i).ToArray();
                for (int i = 0; i < ordenado.Length; i++) Console.WriteLine("[{0}] - {1}", i, ordenado[i]);
                Console.ReadLine();
            }
    
            static int[] CriarVetorAleatorio(int tamanho) {
                int[] retorno = new int[tamanho];
                for (int i = 1; i < tamanho; i++) {
                    Random random = new Random(i);
                    int index = random.Next(0, retorno.Length - 1);
                    while (retorno[index] != 0) {
                        index++;
                        if (index == retorno.Length) index = 0;
                    }
                    retorno[index] = i;
                }
                return retorno;
            }
        }
    }

    O Metodo "Academico" que o seu professor ta querendo é

    using System;
    using System.Linq;
    
    namespace ConsoleApplication1 {
        class Program {
            static void Main(string[] args) {
                var vetor = CriarVetorAleatorio(50000000);
                WriteArray(vetor);
                Console.WriteLine();
    
                QuickSort(vetor, 0, vetor.Length -1);
                WriteArray(vetor);
                Console.ReadLine();
            }
    
            static void WriteArray(int[] vetor) {
                int i = 0;
                while (i < vetor.Length) {
                    string linha = String.Empty;
                    for (int c = 0; c < 4; c++) {                    
                        Console.Write("[{0}] - {1}  \t", i, vetor[i]);
                        i++;
                        if (i == vetor.Length) break;
                    }
                    Console.WriteLine();
                }
            }
    
            static void QuickSort(int[] items, int left, int right) {
                int i, j;
                int x, y;
    
                i = left; j = right;
                x = items[(left + right) / 2];
    
                do {
                    while ((items[i] > x) && (i < right)) i++;
                    while ((x > items[j]) && (j > left)) j--;
    
                    if (i <= j) {
                        y = items[i];
                        items[i] = items[j];
                        items[j] = y;
                        i++; j--;
                    }
                } while (i <= j);
    
                if (left < j) QuickSort(items, left, j);
                if (i < right) QuickSort(items, i, right);
            }
    
            static int[] CriarVetorAleatorio(int tamanho) {
                int[] retorno = new int[tamanho];
                for (int i = 1; i < tamanho; i++) {
                    Random random = new Random(i);
                    int index = random.Next(0, retorno.Length - 1);
                    while (retorno[index] != 0) {
                        index++;
                        if (index == retorno.Length) index = 0;
                    }
                    retorno[index] = i;
                }
                return retorno;
            }
        }
    }
    

    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    • Marked as answer by Rodrigo Moura Tuesday, March 16, 2010 1:57 PM
    Friday, March 12, 2010 2:34 PM
    Moderator
  • Valeu pela ajuda amigo, mas isso era como um desafio.

    A galera que fez em JAVA conseguiu, eles modificaram a memoria virtual do JAVA e rodou bacana. Colocaram a memoria em 512 e o programa rodou em 5 segundos
    Friday, March 12, 2010 3:23 PM
  • Isso vai depender da quantidade de memória que vc tiver.
    Se vc declarar um array de int vai gastar em torno de 200 MB, acho q vc utilizar alocação dinamica vai conseguir, agora se for estatica dificilmente vai deixar. Irá dar erro.
    Se sua pergunta foi respondida por favor marque a resposta como certa.
    Tuesday, March 16, 2010 4:16 PM