Các câu hỏi phỏng vấn [32]

Đây là mấy câu hỏi phỏng vấn kinh điển. Rất nhiều các câu hỏi PV của Microsoft và Google là biến thể của hai câu sau đây:

  1. Viết một hàm int significant_place(uint32_t x) bằng ngôn ngữ C, trả về vị trí của bit 1 cuối cùng bên trái của x (position of the most significant bit)
  2. Viết một hàm int count_ones(uint32_t x) bằng ngôn ngữ C, trả về tổng số bít 1 trong biểu diễn nhị phân của x. Hàm chạy càng nhanh càng tốt. (Có khá nhiều cách trả lời khác nhau cho bài này, mỗi cách có cái hay riêng. Quyển Beautiful Code có hẳn một chương về bài này.)

Cập nhật 4 tháng 3: một sinh viên của tôi vừa phỏng vấn với Bloomberg chiều nay. Một trong số các câu hỏi là một câu hỏi kinh điển của cấu trúc dữ liệu:

  1. Giả lập một queue bằng 2 stacks, sao cho amortized cost của enqueue và dequeue là O(1).

Chủ đề : Dành cho du học sinh, Vui - Giải Trí. Bookmark the permalink. Trackbacks are closed, but you can post a comment.

10 Comments

  1. Posted 04/03/2009 at 3:37 am | Permalink

    Chào anh Hưng, em giải thử bài 87: dùng logarithm để tìm vị trí bit cao nhất

    int significant_place(uint32_t x) {
    if (x > 0) {
    return ln(x) / ln(2);
    }
    return -1;
    }

  2. sontran
    Posted 04/03/2009 at 3:56 am | Permalink

    87.
    if (x==0) return -1;
    ulong index=31;
    while ((x&(1UL<<31))==0) {–index; x<<=1;} return index;

  3. Posted 04/03/2009 at 11:56 pm | Permalink

    Cách của Khoa hay đấy

    tìm số mũ của x theo cơ số 2 = log (x) theo cơ số 2 = ln (x) / ln (x). Chạy sẽ nhanh.

  4. Nguyen Phuc Son
    Posted 06/03/2009 at 8:26 am | Permalink

    amortized cost la gi a ?

  5. Posted 06/03/2009 at 8:35 am | Permalink

    Hi Sơn, xem ở đây. Đại khái, bất kể ta enqueue và dequeue thế nào, thì thời gian cần cho mỗi tác vụ (enqueue/dequeue) là hằng số, tính trung bình.

  6. XXX
    Posted 09/03/2009 at 10:57 am | Permalink

    Câu 89 là câu lấy từ cuốn Introduction to Algorithms ra, solution thì quá obvious, sao bọn Bloomberg lại interview dễ thế nhỉ.

  7. Posted 11/03/2009 at 5:49 am | Permalink

    Oh, my god! I don’t know how to do if i get those questions!

  8. minhdoan
    Posted 15/03/2009 at 5:50 pm | Permalink

    Mình có bài này rất nice, share mọi người làm cho fun.

    Bạn có 1 array[0..n-1], (n>=2). Hãy tìm max gap với amortized cost là O(n). Định nghĩa max gap có thể hiểu như sau:

    sort(a, a+n);
    maxgap=a[1]-a[0];
    for i:1-(n-1) maxgap >?= a[i]-a[i-1];
    return maxgap;

    Cheers,

  9. Hùng Phan
    Posted 30/03/2009 at 12:54 am | Permalink

    Hi anh Hưng, cám ơn anh Hưng đã recommend cuốn Beautiful code, em rất thích đọc những cuốn sách “explain how they think”

  10. Posted 24/02/2010 at 9:05 pm | Permalink

    Hi, em không hiểu lắm cách của anh Khoa.
    Nếu t là vị trí bit cao nhất thì 2^t = x nếu x chỉ có 1 bit 1. Còn nếu x có nhiều bit 1 thì sao ạ ?

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>