|
|
|||||
Регистрация: Oct 2010
Адрес: Новосиб
Сообщений: 122
|
Мой способ рекурсией быстрее урая я выйграла
var t:int = getTimer(); for (var i:uint = 0; i< 100000; i++) { TestEtc(); } trace(getTimer()-t);//1378 var t2:int = getTimer(); for (var i2:uint = 0; i2< 100000; i2++) { TestKseniya(); } trace(getTimer()-t2);//1176 function TestEtc() { var arr:Array = new Array(); arr.push({name:"one", manager:true}); arr.push({name:"tru", manager:true}); arr.push({name:"fri", manager:false}); arr.push({name:"one", manager:true}); arr.push({name:"tru", manager:true}); arr.push({name:"fri", manager:true}); var dict:Object = new Object(); for (var i:uint = 0; i<arr.length; i++) { var hash:String = getHash(arr[i]); if (hash in dict) { arr.splice(i--, 1); } dict[hash] = true; } dict = null; } function TestKseniya() { var arr:Array = new Array(); arr.push({name:"one", manager:true}); arr.push({name:"tru", manager:true}); arr.push({name:"fri", manager:false}); arr.push({name:"one", manager:true}); arr.push({name:"tru", manager:true}); arr.push({name:"fri", manager:true}); arr = sortO(arr,0,0,arr.length); } function getHash(obj:Object):String { return obj.name + (obj.manager ? '1' : '0'); } function traceEmployee(element:*, index:int, arr:Array):void { trace("\t" + element.name + ((element.manager) ? " (manager)" : "")); } function sortO(arrr:Array, i1:uint, i2:uint, len:uint):Array { if (i1 < len) { if (i2 < len) { var len2:uint = len; if (i1 != i2 && arrr[i1]["name"] == arrr[i2]["name"] && arrr[i1]["manager"] == arrr[i2]["manager"]) { len2--; arrr.splice(i2, 1); } sortO(arrr, i1, i2+1, len2); } else { sortO(arrr, i1+1, 0, len); } } return arrr; } |
|
|||||
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Бугага
Цитата:
var t:int = getTimer(); var i:int; for (i=0; i< 100000; i++) { TestEtc(); } trace("TestEtc: ", getTimer()-t); t = getTimer(); for (i=0; i< 100000; i++) { TestKseniya(); } trace("TestKseniya: ", getTimer()-t); t = getTimer(); for (i=0; i< 100000; i++) { TestIO(); } trace("TestIO: ", getTimer()-t); function TestEtc() { var arr:Array = new Array(); arr.push({name:"one", manager:true}); arr.push({name:"tru", manager:true}); arr.push({name:"fri", manager:false}); arr.push({name:"one", manager:true}); arr.push({name:"tru", manager:true}); arr.push({name:"fri", manager:true}); var dict:Object = new Object(); for (var i:uint = 0; i<arr.length; i++) { var hash:String = getHash(arr[i]); if (hash in dict) { arr.splice(i--, 1); } dict[hash] = true; } dict = null; } function TestKseniya() { var arr:Array = new Array(); arr.push({name:"one", manager:true}); arr.push({name:"tru", manager:true}); arr.push({name:"fri", manager:false}); arr.push({name:"one", manager:true}); arr.push({name:"tru", manager:true}); arr.push({name:"fri", manager:true}); arr = sortO(arr,0,0,arr.length); } function TestIO() { var arr:Array = new Array(); arr.push({name:"one", manager:true}); arr.push({name:"tru", manager:true}); arr.push({name:"fri", manager:false}); arr.push({name:"one", manager:true}); arr.push({name:"tru", manager:true}); arr.push({name:"fri", manager:true}); removeDuplicatesIn(arr); } function removeDuplicatesIn( array:Array ):void { if( !array || array.length < 1 ) return; var i:int = array.length; while( i-- > 0 ) { var m:Object = array[i]; var j:int = i; while( j-- > 0 ) { var n:Object = array[j]; if( n.name == m.name && n.manager == m.manager ) { array.splice( i, 1 ); break; } } } } function getHash(obj:Object):String { return obj.name + (obj.manager ? '1' : '0'); } function traceEmployee(element:*, index:int, arr:Array):void { trace("\t" + element.name + ((element.manager) ? " (manager)" : "")); } function sortO(arrr:Array, i1:uint, i2:uint, len:uint):Array { if (i1 < len) { if (i2 < len) { var len2:uint = len; if (i1 != i2 && arrr[i1]["name"] == arrr[i2]["name"] && arrr[i1]["manager"] == arrr[i2]["manager"]) { len2--; arrr.splice(i2, 1); } sortO(arrr, i1, i2+1, len2); } else { sortO(arrr, i1+1, 0, len); } } return arrr; } А вообще, у etc способ лучше. Он проявит себя с большими массивами.
__________________
Загружаем картинки, минуя ошибки безопасности Последний раз редактировалось i.o.; 05.04.2011 в 18:38. |
|
|||||
Регистрация: Oct 2010
Адрес: Новосиб
Сообщений: 122
|
эх, а жаль, я так старалась =(((
|
|
|||||
для сложносочиненных объектов можно так извратиться:
__________________
http://cleptoman.free-lance.ru achivements: дважды благословлен на воровство. осеяный благодатью |
|
|||||
Modus ponens
|
Цитата:
С другой стороны, можно развернуть рекусрию на уровне байткода Т.е. переписать вызовы функций и возвраты на джампы (и т.о. написать тот же алгоритм, только с использованием "goto") - тогда, я думаю, есть все шансы оказаться быстрее
__________________
Hell is the possibility of sanity |
Часовой пояс GMT +4, время: 23:19. |
|
« Предыдущая тема | Следующая тема » |
Теги |
array , массив , удаление переменной |
|
|