หน้าเว็บ

แสดงบทความที่มีป้ายกำกับ algorithm แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ algorithm แสดงบทความทั้งหมด

วันอังคารที่ 8 เมษายน พ.ศ. 2557

Multiple points number sorting : java

ผมเชื่อว่าทุกคนเคยเห็นตัวเลขลักษณะนี้  1., 1.1., 6.9.1,  2.5.3, 1.6.1.2, 1.7.3.5 ฯลฯ
มันคือตัวเลขที่เป็น String ซึ่งมีรูปแบบเป็น X.X.X.X (ตัวเลขจะเป็นกี่หลักก็ได้)

ผมขอเรียกว่าตัวเลขแบบนี้ว่า "multiple points number" ก็แล้วกันน่ะครับ
ซึ่งมันไม่สามารถแปลงไปเป็น Float หรือ Double ได้ (เพราะมันเป็น single point)

ปัญหา
ถ้าเราเขียน code การจัดเรียง String แบบธรรมดาๆ เราจะได้ผลลัพธ์การจัดเรียงที่ไม่ถูกต้อง ดังรูป
จะเห็นว่า 10. กับ 11. มาก่อน 2. เนื่องจาก มันจัดเรียงตามหลักพจนานุกรมครับ  ไม่ได้เอาค่าของตัวเลขจริงๆ มาคิด


จากตัวอย่างรูปข้างบน  code ที่เราเขียนจะเป็นลักษณะนี้  ซึ่งมัน "ผิด"
Collections.sort(children, new Comparator<TreeModel>() {

    @Override
    public int compare(TreeModel model1, TreeModel model2) {
        return model1.getId().compareTo(model2.getId()); /***/
    }
});

วันพฤหัสบดีที่ 12 ธันวาคม พ.ศ. 2556

integrate period algorithm : javascript

บทความนี้เป็นการแปลง code จากบทความที่แล้ว (integrate period algorithm : java) ให้มาเป็น javascript ครับ

สิ่งที่นำไปประยุกต์ใช้
การ highlight keyword ที่เกิดการเหลื่อมกัน ระหว่างคำ https://github.com/jittagornp/index-search-javascript/blob/master/src/main/webapp/indexsearch.js


Utils.js
function empty(list) {
    return list === null || list.length === 0;
}

function notEmpty(list) {
    return !empty(list);
}

function isUndefined(object) {
    return typeof object === 'undefined';
}

function defined(object) {
    return !isUndefined(object);
}

function notDefined(object) {
    return isUndefined(object);
}

วันพุธที่ 11 ธันวาคม พ.ศ. 2556

integrate period algorithm : java

เป็น algorithm ที่ผมคิดขึ้นมาเอง  เพื่อเอาไว้รวม (ผนวก) ช่วงข้อมูลที่มีการเหลื่อมกัน ให้เป็นอันเดียวกันครับ

period timeline


initial period : period {start, end}
  1. 50 - 65
  2. 85 - 90
  3.   0 - 20
  4. 80 - 85
  5. 70 - 100
  6. 15 - 40
  7.   5 - 30
  8. 50 - 55
success period (integrated)
  1.   0 - 40
  2. 50 - 65
  3. 70 - 100

วันอังคารที่ 25 มิถุนายน พ.ศ. 2556

AVL tree : javascript


AVLNode.js
/**
 * @author   redcrow
 * @link     http://na5cent.blogspot.com/2013/06/avl-tree-javascript.html
 * @create   25/06/2013
 */
var AVLNode = function(item) {
    var item_ = item || null;
    var left_ = null;
    var right_ = null;
    var height_ = 0;

    this.getItem = function() {
        return item_;
    };

    this.getLeft = function() {
        return left_;
    };

    this.setLeft = function(node) {
        left_ = node;
    };

    this.getRight = function() {
        return right_;
    };

    this.setRight = function(node) {
        right_ = node;
    };

    this.getHeight = function() {
        return height_;
    };

    this.size = function(node) {
        if (node === null) {
            return 0;
        } else {
            return size(node.getLeft()) + size(node.getRight()) + 1;
        }
    };

    this.preorderPrint = function(padding) {
        padding = padding || '';
        padding = '--' + padding;

        console.log(padding + item_);

        if (left_ !== null) {
            left_.preorderPrint(padding);
        }

        if (right_ !== null) {
            right_.preorderPrint(padding);
        }
    };

    this.inorderPrint = function(padding) {
        padding = padding || '';
        padding = '--' + padding;

        if (left_ !== null) {
            left_.inorderPrint(padding);
        }

        console.log(padding + item_);

        if (right_ !== null) {
            right_.inorderPrint(padding);
        }
    };

    this.postorderPrint = function(padding) {
        padding = padding || '';
        padding = '--' + padding;

        if (left_ !== null) {
            left_.postorderPrint(padding);
        }

        if (right_ !== null) {
            right_.postorderPrint(padding);
        }

        console.log(padding + item_);
    };
};

วันอาทิตย์ที่ 24 กุมภาพันธ์ พ.ศ. 2556

Algorithm find difference percentage of 2 strings

        อันนี้เป็น algorithm ที่ผมคิดขึ้นมาเอง  แล้วใช้งานจริงในหน้า index ครับ  เอาไว้แนะนำคำ search ใกล้เคียงเวลาที่เราพิมพ์ผิด (อาจจะไม่ผิด  แต่ในระบบไม่มีคำๆนี้) ซึ่งผมจะหาคำที่ใกล้เคียงมาให้  ในกรณีที่คำนวณออกมาแล้ว  ได้มากกว่าหรือเท่ากับ 60% ครับ  ลอง ๆ เล่นดูก็ได้  พอดีผมคิดสนุกหาไรมาเล่นแก้เครียดดูครับ


วันพฤหัสบดีที่ 6 ธันวาคม พ.ศ. 2555

get friends on location area

พอดี  ผมเห็นมีแต่คนมาถามเรื่องนี้อ่ะครับ   เรื่องโปรเจ็คจบผม android (Social Network Location)
ผมไม่สามารถที่จะให้ source code ทั้งหมดไปได้น่ะครับ  เพราะผมจะนำไปพัฒนาต่อ
แต่ผมสามารถช่วยเหลือในบางส่วนได้ครับ

วันนี้  ผมก็เลยเอามาให้ดูกันเลยแล้วกันครับว่า source code search around ทางฝั่ง server (PHP and MySQL)  มันเป็นยังไง
อันนี้ return data เป็น json น่ะครับ
android ก็แค่มา get เอาข้อมูลไปก็แค่นั้นเอง

code คือ return list of friends on location area

วันจันทร์ที่ 5 มีนาคม พ.ศ. 2555

mysql search around [Haversine formula algorithm (finding locations nearby)]

SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;

        เป็น algorithm ที่ใช้ในการค้นหาพิกัดตำแหน่ง GPS ที่อยู่ในรัศมีที่เรากำหนด  เช่นจากตัวอย่าง code ข้างบน  บอกว่าให้ค้นหา  id ที่อยู่รอบๆ GPS  37,-122(latitude,longitude)  ในรัศมี 25 ไมล์  มาจำนวน 20 คน 

3959 คือ รัศมีของโลกมีหน่วยเป็นไมล์
ถ้าจะใช้หน่วยเป็นกิโลเมตรในการค้นหา  ให้เปลี่ยนเป็น 6371  

วันเสาร์ที่ 23 กรกฎาคม พ.ศ. 2554

การคำนวณระยะห่าง ของตำแหน่ง GPS 2 จุด (javaScript)

คำศัพท์

ละติจูด (latitude) คือเส้นแนวนอน  มีทั้งหมด 180 เส้น โดยแบ่งออกเป็นซีกโลกบน 90 เส้น  (90 องศา) และซีกโลกล่างอีก 90 เส้น (90 องศา)  มีค่าต่ำสุดอยู่ที่ 0 องศา และมีค่าสูงสุดอยู่ที่ 90 องศา ละติจูดที่ 0 องศา มีค่าเท่ากับเส้นศูนย์สูตร


ลองจิจูด (longitude) คือเส้นแนวตั้ง  มีทั้งหมด 360 เส้น โดยแบ่งออกเป็นซีกโลกซ้าย 180 เส้น (180 องศา) และซีกโลกขวาอีก 180 เส้น (180 องศา) มีค่าต่ำสุดอยู่ที่ 0 องศา และมีค่าสูงสุดอยู่ที่ 180 องศา