Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2012, 10:50   #11
Artem_Kow
 
Регистрация: 14.03.2012
Сообщений: 9
По умолчанию

Именно что в с#, был бы в чем-нибудь другом, было бы легче. У нас у всей группы такого рода задания, а препод просто с"ка. Вечно заставляет делать то, что уже сделано, в прошлый раз полностью класс math делали но это фигня полная...
Artem_Kow вне форума Ответить с цитированием
Старый 05.04.2012, 11:56   #12
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Цитата:
Сообщение от Скарам Посмотреть сообщение
ds.Dante, AddRange().Sort() каждая операция практически оптимально(достаточно посмотреть в отладчике как это происходит).
Ты никак не отсортируешь очередь быстрее, чем за O(n log n). А слияние двух отсортированных очередей - это другое дело.

Последний раз редактировалось ds.Dante; 05.04.2012 в 12:15.
ds.Dante вне форума Ответить с цитированием
Старый 05.04.2012, 12:31   #13
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 823
По умолчанию

Быстродействие есть хорошо, но использовать unsafe код + не забыть fixed, чтобы сборщик мусора не озоровал + указатели (!), когда надо отслеживать куда можно обратится, куда нет (память она такая)= нарушение всего того, для чего создавался .NET ( писать безопасный и легко поддерживаемый код была одной из задач при создании платформы). И это хотят заставить студента, который примет это за паттерн!.. Приехали, называется...
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 05.04.2012, 17:04   #14
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Если включить телепатию, становится очевидно, что речь идёт о ссылках, а не об указателях, а значит, никакого unsafe. Также телепатия подсказывает мне, что вместо очередей подразумевались связные списки; либо условие на счёт дополнительной памяти не очень строгое - результат можно записывать в новую очередь.

Вот так выглядит для очередей:

Код:
using System;
using System.Collections.Generic;

class Program
{
	static void Main ()
	{
		Queue<int> qwe1 = new Queue<int> (new int[] { 1, 3, 5 });
		Queue<int> qwe2 = new Queue<int> (new int[] { 2, 4, 6 });
		Queue<int> result = new Queue<int> ();

		while (qwe1.Count > 0 || qwe2.Count > 0)
		{
			if (qwe1.Count > 0 && (qwe2.Count == 0 || qwe1.Peek () < qwe2.Peek ()))
				result.Enqueue (qwe1.Dequeue ());
			else
				result.Enqueue (qwe2.Dequeue ());
		}

		foreach (var value in result)
			Console.WriteLine (value);
		Console.ReadKey ();
	}
}
Кстати, как линком объединить и отсортировать два Queue или LinkedList?

Последний раз редактировалось ds.Dante; 05.04.2012 в 17:26.
ds.Dante вне форума Ответить с цитированием
Старый 05.04.2012, 17:33   #15
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 823
По умолчанию

Цитата:
Сообщение от ds.Dante Посмотреть сообщение
Кстати, как линком объединить и отсортировать два Queue или LinkedList?
Код:
            var a = new LinkedList<int>(new List<int>{1,2,3,4,5,6,7,8} );
            var b = new LinkedList<int>(new List<int> { 11, 22, 33, 44, 55, 66, 77, 88 });
            a.Union(b).OrderBy(item => item).ToList().ForEach( Console.WriteLine );
            Console.ReadLine();
Как-то так. Замени LinkedList на Queue и будет очередь.
Не давай организму поблажки, каждый день тренируй его в шашки..

Последний раз редактировалось Скарам; 05.04.2012 в 17:38.
Скарам вне форума Ответить с цитированием
Старый 05.04.2012, 18:04   #16
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А как через линк слить очереди за O(n) и без дополнительной памяти?
А разве в задаче есть такое ограничение?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.04.2012, 22:19   #17
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Скарам, ты потеряешь повторяющиеся элементы.

Код:
ForEach( Console.WriteLine )
Круто, не знал про такую конструкцию.


Цитата:
Сообщение от Stilet Посмотреть сообщение
А разве в задаче есть такое ограничение?
На счёт памяти условие было. А на счёт скорости - это моя программистская гордость.

Последний раз редактировалось ds.Dante; 05.04.2012 в 22:21.
ds.Dante вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очередь Си svetikzo Помощь студентам 0 23.01.2010 10:03
Очередь C++ svetikzo Помощь студентам 2 23.01.2010 09:53
Очередь skiffter Помощь студентам 2 03.12.2009 17:39
Очередь Юлькин Общие вопросы C/C++ 4 30.05.2009 16:00