ورود

View Full Version : سوال: ایجاد حجم مشخص دیتا در بازه مشخص



Roshanikabir
شنبه 04 آبان 1398, 12:17 عصر
سلام دوستان
من واسه یه پروژه ای باید یه گیگ دیتا تو بازه 1 تا 1000 بسازم و تو یه فایل متنی بزارم و بعدش اونو با یه الگوریتم خاص مرتب کنم...
1:چطوری 1 گیگ دیتا بسازم؟مثلا من واسه ساخت اعداد تابع رندوم بزنم،از کجا بفهمم کی میشه 1 گیگ؟
2:تو اری لیست بزنم؟
3:اگه با اری لیست زدم چطور مقادیر تو اری لیست رو با اون الگوریتم مورد نظرم مرتب کنم؟

خیلی خیلی ممنون میشم جواب بدین
اینم جهت اطمینان:roshanikabir@gmail.com

Roshanikabir
شنبه 04 آبان 1398, 13:48 عصر
سلام دوستان
من واسه یه پروژه ای باید یه گیگ دیتا تو بازه 1 تا 1000 بسازم و تو یه فایل متنی بزارم و بعدش اونو با یه الگوریتم خاص مرتب کنم...
1:چطوری 1 گیگ دیتا بسازم؟مثلا من واسه ساخت اعداد تابع رندوم بزنم،از کجا بفهمم کی میشه 1 گیگ؟
2:تو اری لیست بزنم؟
3:اگه با اری لیست زدم چطور مقادیر تو اری لیست رو با اون الگوریتم مورد نظرم مرتب کنم؟

خیلی خیلی ممنون میشم جواب بدین
اینم جهت اطمینان:roshanikabir@gmail.com


قسمت اول حل شد.2 و 3 مونده هنوز...

mak12776
چهارشنبه 08 آبان 1398, 20:36 عصر
نوع ذخیره سازی اعدادتون می خواید چه شکلی باشه؟ مثلا به صورت text ذخیره باشه یا به صورت binary ؟
اگه به صورت binary باشه، ذخیره سازی و خوندش هم راحت تره.

پیشنهاد من برای ساختن یه فایل یک گیگی این کده:



public class Main
{
public static void main(String[] args) throws IOException
{
final int FILE_SIZE = (1024 * 1024 * 1024 * 1);
final String FILE_NAME = "temp";

Random random = new Random();

DataOutputStream stream = new DataOutputStream(new FileOutputStream(FILE_NAME));

for (int i = 0; i < FILE_SIZE / 4; i += 1)
{
stream.writeInt(random.nextInt());
}
stream.close();
}
}




و برای sort کردن هم از این کد استفاده کنید:




public class Main
{
public static void main(String[] args) throws IOException
{
final int FILE_SIZE = (1024 * 1024 * 1024 * 1);
final String FILE_NAME = "temp";

DataInputStream inStream = new DataInputStream(new FileInputStream(FILE_NAME));

int[] array = new int[FILE_SIZE / 4];
for (int i = 0; i < FILE_SIZE / 4; i += 1)
{
array[i] = inStream.readInt(1000);
}

Arrays.sort(array);
inStream.close();

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(FILE_NAME + ".sorted"));

for (int i = 0; i < FILE_SIZE / 4; i += 1)
{
outStream.writeInt(array[i]);
}

outStream.close();
}
}




یکم جمع و جور تر با استفاده از تابع:


package respiler;


import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.Random;


public class Main
{
public static void writeIntArray(String name, int[] array) throws IOException
{
DataOutputStream outStream = new DataOutputStream(new FileOutputStream(name));

for (int i = 0; i < array.length; i += 1)
{
outStream.writeInt(array[i]);
}

outStream.close();
}

public static void readIntArray(String name, int[] array) throws IOException
{
DataInputStream inStream = new DataInputStream(new FileInputStream(name));

for (int i = 0; i < array.length; i += 1)
{
array[i] = inStream.readInt();
}

inStream.close();
}

public static int[] randomArray(int size, int max)
{
int[] result = new int[size];
Random random = new Random();

for (int i = 0; i < result.length; i += 1)
{
result[i] = random.nextInt(max);
}

return result;
}

public static final int data_size = (1024 * 1024 * 1024 * 1); // 1GB
public static final String file_name = "temp";

public static void main(String[] args) throws IOException
{
boolean generateFile = true;

if (generateFile)
{
int[] array = randomArray(data_size / 4, 1000);
writeIntArray(file_name, array);
}
else
{
int[] array = new int[data_size / 4];
readIntArray(file_name, array);
Arrays.sort(array);
writeIntArray(file_name + ".sorted", array);
}
}
}

Roshanikabir
پنج شنبه 09 آبان 1398, 01:39 صبح
خیلی ممنون بابت جوابتون