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

Переписать функцию без использования битового сдвига

02.06.2016, 09:13. Показов 931. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте , нужно заменить побитовый сдвиг в функции Crossover, так чтобы эта функция вертала тот же результат , что с побитовым сдвигом.

вот код:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
       static Random random = new Random((int)DateTime.Now.Ticks);
 
        static double f(int x)
        {
            return x * x;
        }
 
        static void Crossover(ref int a, ref int b)
        {
            int pointA = random.Next(0, 5),
                pointB = random.Next(pointA, 5);
            int resA = 0, resB = 0;
            for (int i = 0; i < 5; i++)
            {
                if (i < pointA || i > pointB)
                {
                    resA |= a & (1 << i);
                    resB |= b & (1 << i);
                }
                else {
                    resA |= b & (1 << i);
                    resB |= a & (1 << i);
                }
            }
            a = resA;
            b = resB;
        }
 
        static void Main(string[] args)
        {
            int[] chroms = new int[4];
            //Создание начальной популяции
            for (int i = 0; i < 4; i++)
                chroms[i] = random.Next(0, 32);
            for (int iteration = 0; iteration < 4; iteration++)
            {
               //Вычисление фитнес-функции и весы лице
                double[] fittness = new double[4];
                double[] chance = new double[4];
                double sum = 0;
                for (int i = 0; i < 4; i++)
                {
                    fittness[i] = f(chroms[i]);
                    sum += fittness[i];
                }
                for (int i = 0; i < 4; i++)
                    chance[i] = fittness[i] / sum;
                //Выбор новой популяции
                int[] newChroms = new int[4];
                for (int i = 0; i < 4; i++)
                {
                    double roulette = random.NextDouble();
                    sum = 0;
                    for (int j = 0; j < 4; j++)
                    {
                        sum += chance[j];
                        if (roulette < sum)
                        {
                            newChroms[i] = chroms[j];
                            break;
                        }
                    }
                }
                chroms = (int[])newChroms.Clone();
                //Кросинговер
                for (int i = 0; i < 2; i++)
                    Crossover(ref chroms[i], ref chroms[3 - i]);
                //Mутация
                int chrom = random.Next(0, 4), pos = random.Next(0, 5);
                chroms[chrom] ^= (1 << pos);
            }
            Console.WriteLine(chroms.Max());
            Console.ReadKey();
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.06.2016, 09:13
Ответы с готовыми решениями:

Переписать без использования внутренних классов
Программисты посмотрите) тоже есть код но надо сделать его без внутренних классов, я немного не...

Переписать программу без использования StringBuilder
Console.WriteLine(&quot;Введите символ&quot;); char c = Convert.ToChar(Console.ReadLine()); ...

Переписать код без использования async
Есть метод, нужно переписать его под обычный, чтобы программа подождала выполнения Идей 0..... ...

Переписать код без использования LINQ to XML
Подскажите пожалуйста аналогичную запись только используя стандартные средства языка C# var dates...

6
Эксперт .NET
6452 / 4053 / 1599
Регистрация: 09.05.2015
Сообщений: 9,487
02.06.2016, 09:26 2
1 << i это тоже самое что и 2 в степени i, причем побитовый сдвиг по идее работает быстрее.
0
3 / 2 / 1
Регистрация: 21.04.2015
Сообщений: 57
02.06.2016, 09:30  [ТС] 3
разве??
https://msdn.microsoft.com/lib... .100).aspx

Добавлено через 2 минуты
а можете правильно переписать ??
0
Эксперт .NET
6452 / 4053 / 1599
Регистрация: 09.05.2015
Сообщений: 9,487
02.06.2016, 09:33 4
Сами смотрите...
Миниатюры
Переписать функцию без использования битового сдвига  
0
3 / 2 / 1
Регистрация: 21.04.2015
Сообщений: 57
02.06.2016, 09:36  [ТС] 5
то есть это
C#
1
1 << i
заменить на это
C#
1
Math.Pow(2,i)
?
0
Эксперт .NET
6452 / 4053 / 1599
Регистрация: 09.05.2015
Сообщений: 9,487
02.06.2016, 09:38 6
На
C#
1
(int)Math.Pow(2,i)
1
3 / 2 / 1
Регистрация: 21.04.2015
Сообщений: 57
02.06.2016, 09:45  [ТС] 7
щас попробую

Добавлено через 3 минуты
да спс, а можете под сказать что можно еще поменять в той функции?

Добавлено через 3 минуты
Someone007, а можете под сказать что можно еще поменять в той функции?
0
02.06.2016, 09:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.06.2016, 09:45
Помогаю со студенческими работами здесь

Переписать асинхронный метод без использования async/await
Ломаю голову как переписать асинхронный метод что бы достичь того же эффекта как при использовании...

Переписать код обработки массива без использования стандартных функций
Всем привет, дан код и надо реализовать поэлементную обработку массива, или же расписать...

удаления без сдвига
Как сделать так что бы при удаление строки остальные которые находятся ниже не сдвигались, а то...

Переписать код без использования операций сдвига и "битового and"
как переписать (num &amp; ((1) &lt;&lt; k)) != 0не используя операцию &amp; и &lt;&lt;? Помогите, пожалуйста!


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

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