forked from: 【LinkedListTest】連結リストによる高速化 (forループで)
forked from 【LinkedListTest】連結リストによる高速化 (diff: 19)
連結リストによる高速化 自分の環境では処理時間を21%ほどに短縮できた
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;
}
