הבעיה העיקרית היא שהשרת של תחנת השידור חייב להפיץ אותו התוכן לכמות גדולה של מאזינים. שיטת ההפצה הנפוצה ביותר היא Unicast, ובה נדרש רוחב פס גדול, מכיוון שהשרת מעביר את השידור באופן אישי לכל מאזין ומאזין. שיטת ה-Multicast יעילה יותר אך פחות נפוצה, בגלל שיש בה חסרונות טכניים אחרים. שיטה אפשרית נוספת היא ביזור נפח השידור באמצעות טכנולוגיית ה-P2P, שבה כל מחשב לא רק צורך נתונים מהשרת אלא מעביר את הנתונים שהוא קיבל לעוד מחשבים. שימוש בטכנולוגיות P2P אמור להקטין את מספר השידורים שמעביר השרת למאזינים - במקום שהשרת מעביר את השידור בנפרד לכל אחד מהמאזינים שלו, המשתמשים מקבלים את השידורים ממחשבים של משתמשים אחרים מבלי לגשת לשרת של הרדיו. שימוש בטכנולוגיות P2P צפוי להפחית עלויות לחברות המספקות שידורי רדיו דרך האינטרנט, וחיסכון זה צפוי לזרז חדירה רחבה של טכנולוגיה זו לשוק. מצד שני, רתימת מחשבים אחרים לטובת השידור דורשת את הסכמתם של המשתמשים, ותלויה בהמשך האזנתם לשידור.
רדיו אינטרנטי בישראל.
בתחילת שנות ה-2000 הושק רדיו נטקינג, שפעל כחלק מפורטל האינטרנט נטקינג. הרדיו פעל כשנה בלבד וכלל שישה ערוצי מוזיקה שונים (שהפכו בהמשך לשמונה). כל ערוץ שידר 24 שעות, ובמהלך אותה שנה עלו ברדיו גם תוכניות רדיו שונות ששודרו בשידור חי. שנה לאחר מכן עלה רדיו אינטרנטי נוסף, שנקרא Radi-Yo, שהקים ערן קורץ בביתו הפרטי באילת. הרדיו הוקם ללא אולפנים, אלא נוצר מאוסף של שדרנים שהיו פזורים ברחבי הארץ, מצפון עד דרום שכל אחד מהם משדר מהאולפן הביתי שלו. בין השדרנים היו קורץ עצמו, עופר להב, איציק אהרון, יניב מורוזובסקי, ליאור חג'בי ועוד.
תחנת הרדיו נסגרה ב-2006 בשל דרישה של חברות התקליטים לתשלום תמלוגים רטרואקטיביים שהגיעו לסכומים עצומים, שהתחנה לא יכלה לעמוד בהם. כך גם תחנות אינטרנטיות נוספות שקמו בישראל לאחר מכן, וביניהן רדיו אוממו (Omemo.co.il), שכמו Radi-Yo נאלצו לסגור בשל תשלומי התמלוגים הגבוהים והרווחיות הנמוכה.
לאורך שנות האלפיים החלו גם בתחנות הרדיו הוותיקות והממוסדות לשדר דרך האינטרנט, במקביל לשידורהן בערוצי הרדיו המסורתיים.
תמלוגים וזכויות יוצרים.
קצב תחנות השידור החדשות שקמו הואט בעיקר בשל חברות התקליטים והדרישה שלהן לתמלוגים עבור תכנים מוזיקליים וזכויות יוצרים. בגלל שהאינטרנט היא רשת עולמית רחבה, קשה לחברות התקליטים לבקר ולעקוב אחרי כל תחנות השידור הקיימות והחדשות הקמות מדי יום, ואין דרך יעילה ואחידה לגביית התמלוגים בעבור מדיה באינטרנט. בשל כך, יכול כל אדם להשמיע את התכנים והשירים שהוא בוחר ללא תשלום תמלוגים לחברות התקליטים. תחנות גדולות ומוכרות אינן יכולות להרשות לעצמן שלא לשלם, והן אלה שסופגות את מירב העול מחברות התקליטים.
כיום, לפחות בתחנות השידור הגדולות והמוכרות, ישנן מערכות אשר מחשבות, ומרכזות את מספר ההשמעות של כל יצירה במהלך חודש, ממיינות אותן לפי בעלי זכויות, תוכניות ויצירות, וכך משלם הרדיו תמלוגים לבעלי הזכויות על היצירות המוזיקליות בעבור כל השמעה.
חד-פסיגיים
חד־פסיגיים (שם מדעי: Liliopsida) הם מחלקה במערכת בעלי הפרחים, המאופיינת על ידי פסיג (עלה זרע) יחיד בזרע הצמח. השם המדעי נקבע על־פי הסוג האופייני שושן (Lilium), אם כי נהוג להשתמש גם בשם Monocotyledones.
מבנה החד־פסיגיים פשוט יחסית לדו־פסיגיים, למרות העובדה שהראשונים התפתחו מהאחרונים. השרידים המאובנים הראשונים המיוחסים לחד־פסיגיים שייכים לתקופת הקרטיקון התחתון. כיום החד־פסיגיים תופסים מעמד דומה בחשיבותו לזה של הדו־פסיגיים במערכת האקולוגית של כדור הארץ.
המחלקה מונה כ־130 משפחות, מהן 18 מיוצגות בישראל. אחת החשובות ביותר היא משפחת הסחלביים המתמחה בהאבקה באמצעות חרקים, והפרחים של אחדים מבני המשפחה הם מן המורכבים שבעולם הצומח (ע"ע דבורנית). משפחה חשובה נוספת היא דגניים המתמחה בהאבקה בעזרת הרוח.
תכונות החד־פסיגיים.
בנוסף לתכונה האופיינית של פסיג יחיד, לכל הצמחים ממחלקת החד־פסיגיים מספר תכונות נוספות. תכונות אלה אינן ייחודיות באופן מוחלט לחד־פסיגיים, אך מצויות בהם לעיתים קרובות הרבה יותר מאשר בדו־פסיגיים או בסוגי צמחים אחרים:
עץ חיפוש
במדעי המחשב עץ חיפוש הוא מבנה נתונים ממוין המאפשר הכנסה, הוצאה וחיפוש מהירים. עץ החיפוש מתבסס על מבנה העץ בתורת הגרפים.
הגדרות.
עבור עץ G וצמתים v ,u
עץ חיפוש בינארי.
עץ חיפוש בינארי הוא עץ הנתונים הפופולרי ביותר. בעץ זה יש לכל קודקוד שני בנים לכל היותר, ימני ושמאלי. הבן הימני, יחד עם כל צאצאיו, נמצא ביחס הסדר אחרי הקודקוד שממנו הוא יוצא, ואילו הבן השמאלי וכל צאצאיו קודמים לקודקוד האב ביחס הסדר.
כדי להוסיף קודקוד חדש לעץ יעבור האלגוריתם על כל קודקוד וקודקוד החל מהשורש, וינוע ימינה כאשר מפתח הקודקוד הנוכחי במסלול קטן מהמפתח של הקודקוד המוכנס, ושמאלה במקרה ההפוך. האלגוריתם ייעצר ויבצע את ההוספה במקום שבו המסלול ייגמר.
כדי למחוק קודקוד יש תחילה למצוא אותו, ולאחר מכן אם הוא עלה פשוט למחוק אותו, אם יש לו בן אחד בלבד למחוק ולהפוך את הבן הזה לבן של האבא של מה שמחקנו, ואם יש לו שני בנים, למצוא את העוקב (הקודקוד הקטן ביותר שגדול ממנו) שבהכרח אין לו בן שמאלי, למחוק את העוקב ולהחליף את הקודקוד שלנו בעוקב. לשם ביצוע פעולות אלו ביעילות יש לשמור גם מצביע להורה.
מאחר שלעץ בינארי יש שני בנים, הרי שבמקרה של עץ מלא במידה שווה, גובהו יהיה Log n, עבור n נתונים (log בסיס 2). במצב כזה חיפוש בעץ יימשך פרק זמן קצר יחסית הנמצא בסיבוכיות לוגריתמית למספר הנתונים. אומנם, ייתכנו מקרים גרועים, למשל הכנסה בסדר ממוין מראש, שבהם גובה העץ יהיה n, ועלות החיפוש גבוהה.
סיבוכיות הזמן בחיפוש נתון בעץ חיפוש בינארי היא (O(n במקרה הגרוע ו-((O(log(n במקרה הממוצע.
כדי להבטיח שמצב כזה לא יתרחש פותחו אלגוריתמים משוכללים להכנסה לעצים בינאריים ולמחיקה מהם באופן המבטיח שגובה העץ לא יהיה גדול מדי. עליהם מבוססים כמה עצי נתונים בינאריים חשובים.
מסלולי מעבר.
קיימות כמה שיטות מעבר נפוצות על עצים בינאריים.
שלוש השיטות הפשוטות והנפוצות ביותר הן:
סדר תחילי (pre-order traversal).
קריאת הקודקוד, לאחר מכן קריאת תתי העץ שלו, תחילה תת-העץ השמאלי ואחר כך הימני. בהינתן הדפסת עץ המתבססות על סדר תחילי, ניתן אף לשחזר את העץ בצורה חד-חד ערכית, אם אכן הוא עומד במאפייניו של עץ חיפוש.
function visit(node)
print node.value
if node.left != null then visit(node.left)
if node.right != null then visit(node.right)
סדר תוכי (in-order traversal).
קריאת תת-העץ השמאלי, לאחר מכן קריאת השורש (הצומת ממנו התחלנו), ולאחר מכן תת-העץ הימני.
function visit(node)
if node.left != null then visit(node.left)
print node.value
if node.right != null then visit(node.right)
עץ הוא עץ חיפוש אם ורק אם הסדר התוכי שלו ממוין.
סדר סופי (post-order traversal).
קריאת תת-העץ השמאלי, לאחר מכן תת-העץ הימני ולאחר מכן קריאת השורש. בהינתן הדפסת עץ המתבססות על סדר סופי, ניתן אף לשחזר את העץ בצורה חד-חד ערכית, אם אכן הוא עומד במאפייניו של עץ חיפוש.
function visit(node)
if node.left != null then visit(node.left)
if node.right != null then visit(node.right)
print node.value
בעץ חיפוש זה,
Breadth-first search (BFS)
שיטה נוספת היא מעבר רוחבי על רמות העומק בעץ בזו אחר זו: F, B, G, A, D, I, C, E, H (F ראשון).
עצים לא בינאריים.
קיימים כמה סוגים של עצים לא בינאריים. עצי multiway מסדר m, שבהם לכל אב יש עד m בנים (כל עץ יקבל m משלו לפי הצורך). וריאציה שלהם הם עצי B, שבהם כל העלים באותה רמה ומספר הבנים אינו נמוך לעולם ממחצית m. וריאציה נוספת היא עצי B+. בעצים אלו כל הקודקודים עד העלים אינם מכילים מידע, אלא משמשים אך ורק כמפתחות המכוונים את מסלול החיפוש.
השימוש בעצים אלו נוח כאשר חשוב לחסוך במספר החיפושים על ידי העלאת בסיס לוגריתם גובה העץ ובמקרה של עצי B+, כאשר חפצים שהעלים מכילי המידע יהיו מאוחסנים סדרתית.
סוג נוסף של עצים מאוזנים בהם הצמתים הפנימיים אינם מכילים מידע הם עצי R. עצים אלו משמשים לגישה למידע מרחבי, כלומר לנתונים עם אופי רב ממדי. נתונים כאלו יכולים להיות קואורדינטות גאוגרפיות, מלבנים וצורות גאומטריות נוספות. הרעיון העיקרי בעץ R הוא לקבץ עצמים שסמוכים זה לזה במרחב n-ממדי, ולייצג אותם ברמה גבוהה יותר בעץ על ידי מלבן חוסם מינימלי - המלבן ה-n-ממדי הקטן ביותר שמקיף אותם (ומקביל לצירים).
עץ חיפוש מסוג אחר הקרוי עץ תחיליות (או עץ חיפוש דיגיטלי) מאפשר חיפוש המתבסס על דמיון בתוך מרכיבים של שמות. העץ מסודר כך שכל מילה או מספר מפורק לרכיביו ומכל רכיב (אות, ספרה וכדומה) ניתן להמשיך לאחד הרכיבים האפשריים הבאים.
מחסנית (מבנה נתונים)
מחסנית היא סוג של מבנה נתונים מופשט הפועל בצורה דומה לזו של מחסנית רובה: האיבר שנכנס ראשון למחסנית יוצא ממנה אחרון (תכונה זו מכונה נכנס אחרון יוצא ראשון - LIFO).
פעולות על המחסנית.
פעולות בסיסיות.
שלוש הפעולות הבסיסיות המגדירות מחסנית הן:
פעולות נוספות.
לעיתים, מוגדרות במחסנית גם פעולות נוספות:
פונקציות.
את כל הפעולות האלה ניתן להגדיר פורמלית כפונקציות מתמטיות שאינן משנות את המחסנית, אלא מחזירות מחסנית חדשה. הפונקציות מקיימות את התנאים דלהלן:
כל הפעולות במחסנית מתבצעות בזמן קבוע, שאיננו תלוי במספר האיברים במחסנית.