forked from: 【LinkedListTest】連結リストによる高速化 (forループで)

by motikawa_rgm forked from 【LinkedListTest】連結リストによる高速化 (diff: 19)
連結リストによる高速化
自分の環境では処理時間を21%ほどに短縮できた
♥0 | Line 71 | Modified 2010-03-26 14:06:44 | MIT License
play

ActionScript3 source code

/**
 * Copyright motikawa_rgm ( http://wonderfl.net/user/motikawa_rgm )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/gGgH
 */

// forked from wetcradle's 【LinkedListTest】連結リストによる高速化
/**
連結リストによる高速化
自分の環境では処理時間を21%ほどに短縮できた
*/
package {
	import flash.display.Sprite;
	import flash.text.TextField;
	public class LinkedListTest extends Sprite {
		private var textField:TextField;
		private var vector:Vector.<LinkedListItem>;
		private var linkedList:LinkedListItem;
		private const LENGTH:uint = 1e+6;
		public function LinkedListTest():void {
			configTextField();
			initializeList();
			
			var vectorSum:Number = 0;
			var linkedSum:Number = 0;
			var linkedflSum:Number = 0;
			for (var i:int=0; i<10; i++) {
				var vectorTime:Number = doTestVector();
				var linkedTime:Number = doTestLinked();
				var linkedTimeForloop:Number = doTestLinkedForloop();
				vectorSum += vectorTime;
				linkedSum += linkedTime;
				linkedflSum += linkedTimeForloop;
				textField.appendText(String(vectorTime)+", "+String(linkedTime)+"," + String(linkedTimeForloop) +"\n");
			}
			textField.appendText("\n"+String(vectorSum)+", "+String(linkedSum)+","+String(linkedflSum) + "\n");
		}
		private function configTextField():void {
			textField = new TextField();
			textField.width = textField.height = 400;
			addChild(textField);
			textField.text = "vector, linked,linked(for loop)\n";
		}
		private function initializeList():void {
			var prevLinkedListItem:LinkedListItem = linkedList = new LinkedListItem();
			vector = new Vector.<LinkedListItem>(LENGTH);
			for (var i:int=0; i<LENGTH; i++) {
				vector[i] = new LinkedListItem();
				prevLinkedListItem = prevLinkedListItem.next = new LinkedListItem();
			}
		}
		private function doTestVector():Number {
			var startDate:Date = new Date();
			for (var i:int=0; i<LENGTH; i++) {
				vector[i].value++;
			}
			return new Date().time - startDate.time;
		}
		private function doTestLinked():Number {
			var startDate:Date = new Date();
			var tempLinkedListItem:LinkedListItem = linkedList;
			while (tempLinkedListItem = tempLinkedListItem.next)
			{
				tempLinkedListItem.value++;
			}
			return new Date().time - startDate.time;
		}
		private function doTestLinkedForloop():Number
		{
			var startDate:Date = new Date();
			var tempLinkedListItem:LinkedListItem;
			for (tempLinkedListItem = linkedList;tempLinkedListItem;tempLinkedListItem = tempLinkedListItem.next)
			{
				tempLinkedListItem.value++;
			}
			return new Date().time - startDate.time;
		}
	}
}

class LinkedListItem {
	public var next:LinkedListItem;
	public var value:Number = 0;
}