Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / код хаффмана / 10 сообщений из 10, страница 1 из 1
17.11.2013, 18:48
    #38467869
unker
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
код хаффмана
помогите исправит код программы, пожалуйста)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class TreeCompare : IComparer<KeyValuePair<string, int>>
{
public int Compare(KeyValuePair<string, int> kvp1, KeyValuePair<string, int> kvp2)
{
return kvp1.Value.CompareTo(kvp2.Value);
}
}

class HaffmanTree
{
private List<KeyValuePair<string, int>> tree;
private List<KeyValuePair<string, bool>> listOfFreeNodes;
public HaffmanTree(char[] arraOfFrequency, int[] countOfFrequency)
{
string[] strArrayOfFrequency = new string[arraOfFrequency.Length];
for (int i = 0; i < strArrayOfFrequency.Length; i++)
{
strArrayOfFrequency[i] = Convert.ToString(arraOfFrequency[i]);
}

tree = new List<KeyValuePair<string, int>>();
for (int i = 0; i < arraOfFrequency.Length; i++)
{
tree.Insert(i, new KeyValuePair<string, int>(strArrayOfFrequency[i], countOfFrequency[i]));
}

listOfFreeNodes = new List<KeyValuePair<string, bool>>();
}

private void BuildListOfFreeNodes()
{
foreach (KeyValuePair<string, int> node in tree)
{
listOfFreeNodes.Add(new KeyValuePair<string, bool>(node.Key, true));
}
}

private bool IsFreeElement(string key)
{
return listOfFreeNodes.Any(node => key == node.Key && node.Value == true);
}

public void BuildTree()
{
IComparer<KeyValuePair<string, int>> comparer = new TreeCompare();
tree.Sort(comparer);
BuildListOfFreeNodes();
int countTrueValue = 0;
while (countTrueValue != 1)
{
int indMin1 = 0, indMin2 = 0;
int min1 = int.MaxValue, min2 = int.MaxValue;
string keyMin1 = string.Empty;
string keyMin2 = string.Empty;
foreach (KeyValuePair<string, int> kvp in tree.Where(kvp => kvp.Value < min1 && IsFreeElement(kvp.Key)))
{
keyMin1 = kvp.Key;
indMin1 = tree.IndexOf(kvp);
min1 = kvp.Value;
listOfFreeNodes[indMin1] = new KeyValuePair<string, bool>(keyMin1, false);
foreach (KeyValuePair<string, int> kvp2 in tree.Where(kvp2 => kvp2.Value < min2 && (kvp2.Value == min1 || kvp2.Value > min1) && kvp2.Key != keyMin1 && IsFreeElement(kvp2.Key)))
{
indMin2 = tree.IndexOf(kvp2);
min2 = kvp2.Value;
keyMin2 = kvp2.Key;
}
listOfFreeNodes[indMin2] = new KeyValuePair<string, bool>(keyMin2, false);
}
string result = keyMin1 + keyMin2;
tree.Add(new KeyValuePair<string, int>(result, min1 + min2));
listOfFreeNodes.Add(new KeyValuePair<string, bool>(result, true));
countTrueValue = listOfFreeNodes.Count(kvp => kvp.Value == true);
}
}

public void ShowHaffmanTree()
{
Console.WriteLine("Tree");
foreach (KeyValuePair<string, int> node in tree)
{
Console.WriteLine("{0} {1}", node.Key, node.Value);
}
Console.WriteLine();
Console.WriteLine("List of free nodes");
foreach (KeyValuePair<string, bool> node in listOfFreeNodes)
{
Console.WriteLine("{0} {1}", node.Key, node.Value);
}
}
}
}
при отладке выдает ошибку:ошибка CS5001: Программа "C:\Users\SA\Desktop\4 семестр\ConsoleApplication1\ConsoleApplication1\obj\x86\Debug\ConsoleApplication1.exe" не содержит статического метода "Main", подходящего для точки входа
...
Рейтинг: 0 / 0
17.11.2013, 20:35
    #38467918
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
код хаффмана
unker,

Код: c#
1.
C:\Users\SA\Desktop\4 семестр



Нельзя компилить в эту папку, ошибка компилятора известная.
...
Рейтинг: 0 / 0
17.11.2013, 21:16
    #38467939
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
код хаффмана
Pallaris,
...
Рейтинг: 0 / 0
17.11.2013, 21:22
    #38467942
Alex Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
код хаффмана
unker,

да и из под SA (System Administrator) работать моветон...

А кстати, куда из скопипасченного кусочка функция main подевалась?
...
Рейтинг: 0 / 0
17.11.2013, 23:08
    #38467994
unker
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
код хаффмана
Alex Kuznetsov,

ее там и не было
...
Рейтинг: 0 / 0
17.11.2013, 23:08
    #38467996
unker
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
код хаффмана
Pallaris,

смена папки сохранения ничего не дает
...
Рейтинг: 0 / 0
17.11.2013, 23:37
    #38468011
petalvik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
код хаффмана
unkerсмена папки сохранения ничего не дает
...
Рейтинг: 0 / 0
17.11.2013, 23:46
    #38468016
unker
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
код хаффмана
petalvik,

офф
...
Рейтинг: 0 / 0
18.11.2013, 07:18
    #38468099
Alex Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
код хаффмана
...
Рейтинг: 0 / 0
18.11.2013, 19:22
    #38469079
Esofter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
код хаффмана
unker,

у тебя не хватало точки входа в программу

держи


Код: 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.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
using System;
using System.Collections.Generic;
using System.Linq;


namespace ConsoleApplication1
{
    class TreeCompare : IComparer<KeyValuePair<string, int>>
    {
        public int Compare(KeyValuePair<string, int> kvp1, KeyValuePair<string, int> kvp2)
        {
            return kvp1.Value.CompareTo(kvp2.Value);
        }
    }

    class HaffmanTree
    {
        private List<KeyValuePair<string, int>> tree;
        private List<KeyValuePair<string, bool>> listOfFreeNodes;
        public HaffmanTree(char[] arraOfFrequency, int[] countOfFrequency)
        {
            string[] strArrayOfFrequency = new string[arraOfFrequency.Length];
            for (int i = 0; i < strArrayOfFrequency.Length; i++)
            {
                strArrayOfFrequency[i] = Convert.ToString(arraOfFrequency[i]);
            }

            tree = new List<KeyValuePair<string, int>>();
            for (int i = 0; i < arraOfFrequency.Length; i++)
            {
                tree.Insert(i, new KeyValuePair<string, int>(strArrayOfFrequency[i], countOfFrequency[i]));
            }

            listOfFreeNodes = new List<KeyValuePair<string, bool>>();
        }

        private void BuildListOfFreeNodes()
        {
            foreach (KeyValuePair<string, int> node in tree)
            {
                listOfFreeNodes.Add(new KeyValuePair<string, bool>(node.Key, true));
            }
        }

        private bool IsFreeElement(string key)
        {
            return listOfFreeNodes.Any(node => key == node.Key && node.Value == true);
        }

        public void BuildTree()
        {
            IComparer<KeyValuePair<string, int>> comparer = new TreeCompare();
            tree.Sort(comparer);
            BuildListOfFreeNodes();
            int countTrueValue = 0;
            while (countTrueValue != 1)
            {
                int indMin1 = 0, indMin2 = 0;
                int min1 = int.MaxValue, min2 = int.MaxValue;
                string keyMin1 = string.Empty;
                string keyMin2 = string.Empty;
                foreach (KeyValuePair<string, int> kvp in tree.Where(kvp => kvp.Value < min1 && IsFreeElement(kvp.Key)))
                {
                    keyMin1 = kvp.Key;
                    indMin1 = tree.IndexOf(kvp);
                    min1 = kvp.Value;
                    listOfFreeNodes[indMin1] = new KeyValuePair<string, bool>(keyMin1, false);
                    foreach (KeyValuePair<string, int> kvp2 in tree.Where(kvp2 => kvp2.Value < min2 && (kvp2.Value == min1 || kvp2.Value > min1) && kvp2.Key != keyMin1 && IsFreeElement(kvp2.Key)))
                    {
                        indMin2 = tree.IndexOf(kvp2);
                        min2 = kvp2.Value;
                        keyMin2 = kvp2.Key;
                    }
                    listOfFreeNodes[indMin2] = new KeyValuePair<string, bool>(keyMin2, false);
                }
                string result = keyMin1 + keyMin2;
                tree.Add(new KeyValuePair<string, int>(result, min1 + min2));
                listOfFreeNodes.Add(new KeyValuePair<string, bool>(result, true));
                countTrueValue = listOfFreeNodes.Count(kvp => kvp.Value == true);
            }
        }

        public void ShowHaffmanTree()
        {
            Console.WriteLine("Tree");
            foreach (KeyValuePair<string, int> node in tree)
            {
                Console.WriteLine("{0} {1}", node.Key, node.Value);
            }
            Console.WriteLine();
            Console.WriteLine("List of free nodes");
            foreach (KeyValuePair<string, bool> node in listOfFreeNodes)
            {
                Console.WriteLine("{0} {1}", node.Key, node.Value);
            }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {

            var tree = new HaffmanTree(new char[] {'a', 'b', 'c', 'd', 'e', 'f'}, new int[] {1, 2, 3, 4, 5, 6});
            tree.BuildTree();
            tree.ShowHaffmanTree();
        }
    }
}


...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / код хаффмана / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]