|
Кодирование информации)
|
|||
---|---|---|---|
#18+
Может кто-нибудь кинуть текст программы на си или си#, которая кодирует информацию по алгоритму Шеннона Фано или Хаффмана ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2013, 15:53 |
|
Кодирование информации)
|
|||
---|---|---|---|
#18+
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication2 { class Program { static void Main(string[] args); } 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); } } } } вот нашел текст программы, но выдает ошибку ошибка CS0501: "ConsoleApplication2.Program.Main(string[])" должен объявлять тело, т.к. он не помечен модификатором abstract, extern, или partial. Как исправить? Модератор: Тема перенесена из форума "C++". ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2013, 15:59 |
|
|
start [/forum/search_topic.php?author=Olle_Up&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
2ms |
others: | 343ms |
total: | 510ms |
0 / 0 |