Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 30.08.2014
Сообщений: 99
1

Как создать 1 000 000 строк без совпадений?

09.09.2014, 14:59. Показов 2184. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
помогите дорогие друзья!!! как создать 1 000 000 строк без совпадений? делаю так
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
  private void button1_Click(object sender, EventArgs e)
        {
            string abc = "1234567890abcdef"; //набор символов
            int kol = 32; // кол-во символов
            string result = "";
           List<string> keys_gen = new List<string>();
            for (int y = 0; y < 1000000; y++ )
            {
 
                int lng = abc.Length;
                for (int i = 0; i < kol; i++)
                {
                    result += abc[r.Next(lng)];
                    
                }
                /// нужно проверять список на наличие совпадения строки
               
                string find_u = keys_gen.Find(x => x == result);
 
                if (find_u != result)
                {
                  //  lock (keys_gen)
                    keys_gen.Add(result);
                    result = "";
                }
              //      
                
            }
            
            
        }
я заполняю лист масив keys_gen
неодинаковыми 32 символьными значениями
но программа вылетает если мне нужно создать более 1 000 000 значений (
как правильно сделать? прошу помогите пожалуйста!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.09.2014, 14:59
Ответы с готовыми решениями:

Как в List<short> запихнуть 200 000 000 значений и не получить OutOfMemoryException?
В начале было list&lt;int&gt;, максимальное значение 20К, уменьшил до short, у shot нет операций &quot;+&quot;, &quot;-&quot;...

Вывод на экран всех простых чисел в диапазоне от 2 до 10.000.000
Написать программу, которая выводит на экран все простые числа в диапазоне от 2 до 10.000.000.

Подсчет количества чисел в диапазоне от 1 до 1 000 000, которые делятся на сумму своих цифр
Как написать метод подсчета количества “Хороших” чисел в диапазоне от 1 до 1 000 000? Хорошим...

Модифицировать программу так, чтобы она решала задачу с 10 000 000 элементов менее чем за минуту
Модифицировать задачу так, чтобы она решала задачу с 10 000 000 элементов менее чем за минуту. ...

15
215 / 180 / 79
Регистрация: 02.10.2011
Сообщений: 651
09.09.2014, 15:04 2
Насколько я понимаю, программа вылетает из за того, что закончилась память. Следовательно нужно организовать другой способ хранения
0
0 / 0 / 0
Регистрация: 30.08.2014
Сообщений: 99
09.09.2014, 15:06  [ТС] 3
я вам скажу долго генерация идёт ( более 20 мин
0
52 / 52 / 7
Регистрация: 13.10.2012
Сообщений: 180
09.09.2014, 15:19 4
по генерации должны быть я так полагаю похожи на мд5 и не должно быть каких бы то ни было закономерностей?
0
0 / 0 / 0
Регистрация: 30.08.2014
Сообщений: 99
09.09.2014, 15:24  [ТС] 5
да вы правильно поняли
0
1145 / 873 / 507
Регистрация: 09.04.2014
Сообщений: 2,056
09.09.2014, 15:32 6
Лучший ответ Сообщение было отмечено divert как решение

Решение

Guid вам в помощь

Добавлено через 3 минуты
C#
1
2
3
4
5
6
7
int count=1000000;
List<string> keys_gen = new List<string>(count);
for(int i=0; i<count; i++)
{
    string str=Guid.NewGuid().ToString("N");
    keys_gen.Add(str);
}
у меня меньше секунды
0
Кодогенератор
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
09.09.2014, 15:33 7
Цитата Сообщение от divert Посмотреть сообщение
я вам скажу долго генерация идёт ( более 20 мин
попробуйте добавить в алгоритм вместо списка - словарь, проверка на существование сократится в разы.
0
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
09.09.2014, 15:33 8
i.ToString() - это и будет 1000000 уникальных строк
если нужно 32 символа просто разбавить этот i мусором подходящей длины
0
0 / 0 / 0
Регистрация: 30.08.2014
Сообщений: 99
09.09.2014, 15:39  [ТС] 9
спасибо за ответы. я понял нужно так сделать ?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
private void button1_Click(object sender, EventArgs e)
        {
            string abc = "1234567890abcdef"; //набор символов
            int kol = 32; // кол-во символов
            string result = "";
           Dictionary<string> keys_gen = new Dictionary<string>();
            for (int y = 0; y < 1000000; y++ )
            {
 
                int lng = abc.Length;
                for (int i = 0; i < kol; i++)
                {
                    result += abc[r.Next(lng)];
                    
                }
                /// нужно проверять список на наличие совпадения строки
               
                string find_u = keys_gen.Find(x => x == result);
 
                if (find_u != result)
                {
                  //  lock (keys_gen)
                    keys_gen.Add(result);
                    result = "";
                }
              //      
                
            }
            
            
        }
0
52 / 52 / 7
Регистрация: 13.10.2012
Сообщений: 180
09.09.2014, 15:40 10
1 000 000 строк по 32 символа это 32 000 000 байт ~= 32 000 кб ~= 32 мб, так что странно что врядли дело в памяти, вообще алгоритм генерации должен быть такой, чтоб вам не пришлось проверять повторения
или если вы все таки используете рандом, сначала забиваете весь список, потом в 1 проход берете индексы коллизий (повторяющихся элементов) и генерируете новые строки

у меня генерация без проверки заняла 5 сек

не успел)
0
1145 / 873 / 507
Регистрация: 09.04.2014
Сообщений: 2,056
09.09.2014, 15:41 11
таки попробуй так
0
0 / 0 / 0
Регистрация: 30.08.2014
Сообщений: 99
09.09.2014, 15:43  [ТС] 12
Цитата Сообщение от int_array Посмотреть сообщение
1 000 000 строк по 32 символа это 32 000 000 байт ~= 32 000 кб ~= 32 мб, так что странно что врядли дело в памяти, вообще алгоритм генерации должен быть такой, чтоб вам не пришлось проверять повторения
или если вы все таки используете рандом, сначала забиваете весь список, потом в 1 проход берете индексы коллизий (повторяющихся элементов) и генерируете новые строки
у меня генерация без проверки заняла 5 сек
не успел)
спасибо конечно. но главная задача без дубликатов строк и быстрота генирации
0
1145 / 873 / 507
Регистрация: 09.04.2014
Сообщений: 2,056
09.09.2014, 15:45 13
Цитата Сообщение от divert Посмотреть сообщение
но главная задача без дубликатов строк и быстрота генирации
а чем вам мой вариант не подходит? просто любопытно...
0
0 / 0 / 0
Регистрация: 30.08.2014
Сообщений: 99
09.09.2014, 15:46  [ТС] 14
Цитата Сообщение от nedel Посмотреть сообщение
таки попробуй так
без дублей будут строки?
будет схожесть на md5 ?
0
1145 / 873 / 507
Регистрация: 09.04.2014
Сообщений: 2,056
09.09.2014, 15:47 15
Цитата Сообщение от divert Посмотреть сообщение
без дублей будут строки?
будет схожесть на md5 ?
да, на 100%
1
0 / 0 / 0
Регистрация: 30.08.2014
Сообщений: 99
09.09.2014, 16:14  [ТС] 16
Цитата Сообщение от nedel Посмотреть сообщение
divert
спасибо сейчас проверим

Добавлено через 25 минут
супер работает!! спасибо nedel
и спасибо всем! можно закрывать
0
09.09.2014, 16:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.09.2014, 16:14
Помогаю со студенческими работами здесь

Выполнить деление числа с точностью в 1 000 000 знаков после запятой
Добрый день, каким образом выполнить например деление числа что бы получить точность в 1 000 000...

Как увеличить скорость вычислений 500 000 строк?
Здравствуйте. Вопрос к людям с опытом. Как ускорить вычисления 500 000 строк. Задача посчитать,...

Как из цифры в формате текста "1000000" сделать "1 000 000"?
Лейбл получает decimal цифры-цены, которые трудно читать юзеру без группировки по 3 знака. Что...

Создать массив из 1 000 000 000 и более элементов, а потом заполнить и вывести его
создаю массив, и все идет нормально #include &lt;stdio.h&gt; #include &lt;malloc.h&gt; #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru